Android 升级到 Facebook SDK 12.0.0(或 13)后,CallbackManager 回调停止工作

Android CallbackManager call back stopped working after upgrading to Facebook SDK 12.0.0 (Or 13)

我有一个 Android 应用程序可以通过 Facebook 登录。 当我使用 Facebook SDK

时一切正常
implementation 'com.facebook.android:facebook-android-sdk:11.1.1'

不过,最近我在我的 Gradle 文件中注意到有一个可用于 Facebook SDK 的更新,所以我将其更新为

implementation 'com.facebook.android:facebook-android-sdk:13.0.0'

然后问题就出现了。

在我的代码设置如下之前:

private void facebookSignInSetup() {
    //Facebook login setup
    callbackManager = CallbackManager.Factory.create();
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                  ....
                }

在我的 Activity class 中,我有以下代码:

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

当我使用 Facebook SDK 11.1.1 时,用户通过 Facebook 登录后,方法:onActivityResult 被触发然后 FacebookCallback registered 被触发。

升级到Facebook SDK 13.0.0后(我试过12.0.0也有同样的问题),用户登录Facebook后,调用了onActivityResult,但是没有调用FacebookCallback。

因此我的登录过程中断了。

有人遇到同样的问题吗?解决方法是?

根据 post: How to use Facebook Sign in CallbackManager with onActivityResult deprecated?

好像是Facebook Android SDK 12之后,使用的方法

onActivityResult

已弃用。截至今天,我正在 post 回答这个问题 (2/March/2022),Facebook 官方开发者文档:https://developers.facebook.com/docs/facebook-login/android/#9--register-a-callback 还在告诉大家Facebook登录的老办法

我希望这个post可以帮助其他面临同样问题的人。

以下是解决方法

示例代码: https://github.com/facebook/facebook-android-sdk/blob/main/samples/FBLoginSample/src/main/java/com/facebook/fbloginsample/FacebookLoginActivity.java

解决方案:

  1. 删除

    callbackManager.onActivityResult(requestCode, resultCode, data); 来自 onActivityResult

  2. 使用权限设置您的 Facebook 按钮

    登录按钮 mLoginButton = findViewById(R.id.login_button); mLoginButton.setPermissions(Arrays.asList("public_profile", "电子邮件"));

  3. 用您的 LoginButton 实例替换 LoginManager。变化:

    LoginManager.getInstance().registerCallback(callbackManager, 新的 FacebookCallback() { 更改为:

    mLoginButton.registerCallback(回调管理器, 新的 FacebookCallback() {