Android Facebook登录回调永远不会激发

时间:2015-06-27 18:41:59

标签: java android facebook-login android-facebook facebook-sdk-4.0

我使用facebook登录按钮创建了一个活动,并在onCreate方法中注册了回调。现在,当我按下登录按钮并通过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();
            }
        });
    }

2 个答案:

答案 0 :(得分:3)

由于您发布的回调代码无效。

  1. 我假设您已在facebook开发者控制台上创建了一个项目,获得了开发哈希并且状态设置为公开。

  2. 您的应用程序清单包含应用程序ID的元数据标记。

  3. 进一步查看您的代码,在您的活动中添加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);
        }
    

答案 1 :(得分: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应该以“fb”开头。 Facebook文档中明确提到了这一点,我没有注意到这一细节。 如果您的App ID是1234567,则应使用fb1234567 但是,当您调用FacebookSdk.setApplicationId()时,不需要为fb添加前缀。 价:https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#specifying-authentication-backends