首页 > 解决方案 > 如何在不推荐使用 onActivityResult 的情况下使用 Facebook 登录 CallbackManager?

问题描述

我正在使用 Facebook 登录选项创建应用程序。到目前为止,我做了所有事情,但是从 Facebook 应用程序之后的结果出现了问题。我遵循了 Google 的文档,但该文档没有使用新弃用的 onActivityResult 函数进行更新。现在,我已经使用了从this获取另一个活动结果的新方法。但是,由于不使用 registerForActivityResult 启动器,这不适用于 Facebook 登录实现,但它使用自己的回调管理器。

有没有人想出解决这个问题的方法?也许我错过了一些东西。

 callbackManager = CallbackManager.Factory.create()
    signInWithFacebook.setReadPermissions("email", "public_profile")

    signInWithFacebook.registerCallback(
        callbackManager,
        object : FacebookCallback<LoginResult> {
            override fun onSuccess(result: LoginResult) {
                handleFacebookAccessToken(result.accessToken)
            }

            override fun onCancel() {
     
            }

            override fun onError(error: FacebookException?) {
              
            }
        })




override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        callbackManager.onActivityResult(requestCode, resultCode, data)
    }


private fun handleFacebookAccessToken(token: AccessToken) {
    val credential = FacebookAuthProvider.getCredential(token.token)
    auth.signInWithCredential(credential)
        .addOnCompleteListener(OnCompleteListener {
            if (it.isSuccessful) {

            } else {
              
            }
        })
} 

标签: androidfacebook

解决方案


使用这个(https://github.com/facebook/facebook-android-sdk/issues/875)Github问题我找到了你的答案,这里是总结

首先,初始化回调管理器

val callbackManager: CallbackManager = CallbackManager.Factory.create()

然后使用登录管理器注册回调

 LoginManager.getInstance().registerCallback(callbackManager,
        object : FacebookCallback<LoginResult?> {
            override fun onSuccess(result: LoginResult?) {
                if (result?.accessToken != null) {
                    val accessToken = result.accessToken.token
        
                }
            }

            override fun onCancel() {
               
            }

            override fun onError(error: FacebookException) {
            }
        })

在您的自定义 Facebook 按钮上,您必须 setOnClickListner

 binding.btnFacebook.setOnClickListener {
        LoginManager.getInstance().logInWithReadPermissions(
            this,
            loginViewModel.callbackManager,
            listOf("public_profile", "email")
        )
    }

我们必须为 onActivityResult 更改的内容已弃用

之前

binding.btnFacebook.setOnClickListener {
            LoginManager.getInstance().logInWithReadPermissions(
                this,
                listOf("public_profile", "email")
            )
        }

现在

 binding.btnFacebook.setOnClickListener {
            LoginManager.getInstance().logInWithReadPermissions(
                this,
                loginViewModel.callbackManager, //we added callback here according to new sdk 12.0.0 version of facebook
                listOf("public_profile", "email")
            )
    }

现在我正在使用 Facebook SDK 版本

  //facebook login
    implementation 'com.facebook.android:facebook-login:12.0.0'

推荐阅读