升级到 Facebook SDK 12.0.0(或 13)后,Android CallbackManager 回调停止工作
我有一个通过 Facebook 登录的 Android 应用程序。 当我使用 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 类中,我有以下代码:
@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 注册被触发。
升级到Facebook SDK 13.0.0后(我尝试了12.0.0也有同样的问题),用户登录Facebook后,调用了onActivityResult,但是没有调用FacebookCallback。
因此我的登录过程被破坏了。
有人有同样的问题并且有解决方案吗?
I have an Android app that does login via Facebook.
Everything was working when I was on Facebook SDK
implementation 'com.facebook.android:facebook-android-sdk:11.1.1'
However, recently I noticed in my Gradle file that there is an update available for Facebook SDK, so I updated it to
implementation 'com.facebook.android:facebook-android-sdk:13.0.0'
And then the problem happens.
Before I have my code setup like the following:
private void facebookSignInSetup() {
//Facebook login setup
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
....
}
And in my Activity class I have the following code:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
......
}
When I was on Facebook SDK 11.1.1, after user login via Facebook, method: onActivityResult is fired then FacebookCallback registered is fired.
After upgrading to Facebook SDK 13.0.0 (I tried 12.0.0 also having the same problem), after the user login to Facebook, onActivityResult is called, however, FacebookCallback is not called.
Hence my login process is broken.
Anyone has the same problem and is the resolution?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据帖子:
如何使用 Facebook 登录 CallbackManager 并弃用 onActivityResult?< /a>
看来Facebook Android SDK 12之后,使用方法
已弃用。截至今天,我发布了这个问题(2022 年 3 月 2 日),Facebook 官方开发人员文档:https://developers.facebook.com/docs/facebook-login/android/#9--register-a-callback
仍然在告诉大家Facebook登录的老方法。
我希望这篇文章可以帮助其他面临同样问题的人。
以下是解决方案
示例代码:
https://github.com/facebook/facebook-android-sdk/blob/main/samples/FBLoginSample/src/main/java/com/facebook/fbloginsample/FacebookLoginActivity.java
解决方案:
删除
callbackManager.onActivityResult(requestCode, resultCode, data);
来自 onActivityResult
使用权限设置您的 Facebook 按钮
LoginButton mLoginButton = findViewById(R.id.login_button);
mLoginButton.setPermissions(Arrays.asList("public_profile", "email"));
将 LoginManager 替换为您的 LoginButton 实例。变化:
LoginManager.getInstance().registerCallback(callbackManager,
新的 FacebookCallback() {
更改为:
mLoginButton.registerCallback(callbackManager,
新的 FacebookCallback() {
According to the post:
How to use Facebook Sign in CallbackManager with onActivityResult deprecated?
It seems after Facebook Android SDK 12, the approach of using
is deprecated. And as of today, I am posting this question (2/March/2022), Facebook official developer document: https://developers.facebook.com/docs/facebook-login/android/#9--register-a-callback
is still telling everyone the old way of doing Facebook login.
I hope this post could help others facing the same problem.
The following are the solution
Sample code:
https://github.com/facebook/facebook-android-sdk/blob/main/samples/FBLoginSample/src/main/java/com/facebook/fbloginsample/FacebookLoginActivity.java
Solution:
Remove
callbackManager.onActivityResult(requestCode, resultCode, data);
from onActivityResult
Setup your Facebook button with permission
LoginButton mLoginButton = findViewById(R.id.login_button);
mLoginButton.setPermissions(Arrays.asList("public_profile", "email"));
Replace LoginManager with your LoginButton instance. Change:
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback() {
Change to:
mLoginButton.registerCallback(callbackManager,
new FacebookCallback() {
更新到最新(目前)版本:16.0.0(我有13.2.0)后,该问题已解决。除此之外不需要更改任何代码。
The issue was fixed for me after updating to the latest (for now) version: 16.0.0 (I had 13.2.0). No code changes were needed besides this.
Emil 的评论是正确的,我们不能将 LoginButton 解决方案与 LoginManger 一起使用。但经过几个小时的实验,我通过降级依赖项版本解决了这个问题,请参阅:https://stackoverflow.com/a/74490644/ 13694485
Emil's comment is correct we can't use loginButton solution with LoginManger. But after several hours of experiments I solved it by downgrading the dependencies version please refer this: https://stackoverflow.com/a/74490644/13694485