2012-05-29 87 views
0

我試圖授權我的手機應用程序與facebook,但是當facebook授權窗口關閉時,它不會回到我的應用程序的continueLoading(1)方法.. 無法理解爲什麼:android授權與facebook

private void authorizeFacebook(final Loader loader) {  
    String[] permissions = new String[] {"friends_status", "user_status"}; 
    facebook.authorize(this, permissions , new DialogListener() { 
     @Override 
     public void onComplete(Bundle values) { 
      Log.e("finish", "oncomplete"); 
      //SharedPreferences.Editor editor = mPrefs.edit(); 
      //editor.putString("access_token", facebook.getAccessToken()); 
      //editor.putLong("access_expires", facebook.getAccessExpires()); 
      //editor.commit();     
      loader.continueLoading(1); 
     } 

     @Override 
     public void onFacebookError(FacebookError error) { 
      Log.i("FacebookAuthorize", error.toString());    
      app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader);  
     } 

     @Override 
     public void onError(DialogError e) { 
      Log.i("FacebookAuthorize", e.toString());    
      app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader); 
     } 

     @Override 
     public void onCancel() { 
      Log.i("FacebookAuthorize", "onCancel"); 
      app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader); 
     } 
    }); 

} 

    @Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    facebook.authorizeCallback(requestCode, resultCode, data); 
} 

裝載機的第一步:

private void continueLoading(int step) {  
    switch(step) 
    { 
      //loading current user facebook profile 
    case 1: progressBar.incrementProgressBy(750);    
      loadingStatus.setText("Getting user's facebook details");        
      facebookRunner = new AsyncFacebookRunner(facebook);   
      facebookConnection = new FacebookConnection(this, 1); 
      facebookRunner.request("me",facebookConnection); 
      app.setFacebook(facebook); 
      app.setFacebookRunner(facebookRunner); 
      break; 

回來我的應用程序,它只是接近的一切,而不是..

+0

這條線會做什麼? loader.continueLoading(1); – Venky

+0

它繼續加載...我會將它添加到我的問題 –

+0

登錄成功後,如果您需要移動到新的活動說Activity_1,然後添加此行startActivity(new Intent(this,Activity_1.class)); – Venky

回答

0

Facebook的Android SDK中^ h作爲兩種不同的認證流程:

1)SSO - 將在用戶在同一設備上安裝facebook應用程序時使用。 如果是這種情況,那麼您正在使用的Facebook sdk將啓動Facebook應用的新意向,以針對您的應用對用戶進行身份驗證。 爲了能夠知道什麼時候這樣做了你需要補充一點:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    facebook.authorizeCallback(requestCode, resultCode, data); 
} 

2)如果設備沒有安裝,則SDK將打開它的用戶認證自己的對話框的Facebook應用程序,在此將使用您傳遞給authorize方法的DialogListener實例。

您需要同時具備(DialogListeneronActivityResult)才能處理這兩種情況。

+0

哦,所以你說我應該使用continueLoading方法在沒有Facebook應用程序的用戶的對話框偵聽器內部以及具有的用戶的onActivityResult。 因此,如果我正確理解這一點,我應該在onActivityResult中添加continueLoading(1)以及? –

+0

不可以。你只調用'facebook.authorize',那麼sdk決定是使用它的'對話框還是使用一個意圖。如果使用了intent,則會執行'onActivityResult'方法,然後通知sdk('facebook.authorizeCallback'),然後sdk應該調用您提供的'DialogListener'實現的'onComplete'。所有你需要做的就是添加'onActivityResult'方法。 –

+0

但我有一個onActivityResult方法..我一直有..我甚至將它粘貼在我的代碼片段 –