1

我創建了一個活動,帶有Facebook登錄按鈕和onCreate方法中的註冊回調。現在,當我按登錄按鈕並通過Facebook登錄時,我希望我的回調被解僱,但他們沒有。我究竟做錯了什麼?Android的Facebook登錄回調永不失火

CallbackManager callbackManager; 
    LoginButton loginButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     FacebookSdk.sdkInitialize(getApplicationContext()); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     loginButton = (LoginButton) findViewById(R.id.login_button); 
     loginButton.setReadPermissions("user_friends"); 
     callbackManager = CallbackManager.Factory.create(); 

     loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       Toast.makeText(getApplicationContext(), "Success!", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onCancel() { 
       Toast.makeText(getApplicationContext(), "Cancelled!", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onError(FacebookException e) { 
       Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 
+0

Facebook活動是否開始?你需要將它添加到清單中,並檢查'onActivityResult'方法! – Leonardo

+0

是的,我看到我給我的應用程序權限的Facebook窗口。我應該添加到'onActivityResult'? – Andrei

+0

@LeonardoFerrari omg我被推遲了。謝謝。它現在有效。 – Andrei

回答

3

由於您發佈的回調代碼不工作。

  1. 我假設你已經創建的Facebook開發者控制檯上的一個項目,獲得發展哈希和狀態設置爲公開。

  2. 您的應用程序清單具有應用程序ID的元數據標籤。

因此進一步來到你的代碼,在你的活動添加onActivityResult()並將其轉發給您的callbackManager。Facebook Documentation

如果登錄成功,LoginResult參數將具有新的AccessToken以及最近授予或拒絕的權限。

您不需要registerCallback就可以成功登錄,您可以選擇使用下面描述的AccessTokenTracker類來關注當前的訪問令牌更改。

在onActivityResult

然後()的登錄結果轉發到)中的onCreate(創建的callbackManager:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 
0

我面臨同樣的問題。請檢查您是否在您的清單文件中添加以下:

<activity 
    android:name="com.facebook.CustomTabActivity" 
    android:exported="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <data android:scheme="@string/fb_login_protocol_scheme" /> 
    </intent-filter> 
</activity> 

而且在strings.xml如下:

<string name="fb_login_protocol_scheme">fbAPP_ID</string> 

請注意,上面一行,您的應用程序ID應該由preceeded 「FB」。 Facebook文檔中明確提到了這一點,但我沒有注意到這些細節。 如果你的應用程序ID是1234567,你應該使用fb1234567 然而,當你調用FacebookSdk.setApplicationId()時,你不需要前綴fb。 Ref:https://developers.facebook.com/docs/facebook-login/android