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