如何使用带有onActivityResult的Facebook登录回调管理器



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

有人想出解决这个问题的办法吗?也许我错过了什么。

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 {

}
})
} 

使用(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按钮上,你必须设置OnClickListner

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'

在我删除任何onActivityResult后,它就可以正常工作,而不需要做任何额外的工作,如下所示:

private lateinit var callbackManager: CallbackManager
callbackManager = CallbackManager.Factory.create()
// Login Button callback registration
facebookLoginButton.setPermissions("email", "public_profile")
facebookLoginButton.registerCallback(
callbackManager,
object : FacebookCallback<LoginResult> {
override fun onSuccess(result: LoginResult) {
handleSignInResult(result)
}
override fun onCancel() {
_facebookError.value = userCancelError
}
override fun onError(error: FacebookException) {
_facebookError.value = error.message
}
})

但我使用的是这个sdk版本。。

implementation 'com.facebook.android:facebook-login:15.2.0'

最新更新