我在使用LoginManager
类进行登录时遇到了一个奇怪的问题。我在Fragment中调用LoginManager.getInstance().logInWithReadPermissions(..)
以获得所需的权限。
我已经尽可能地进行了调试,并发现返回到此片段的父活动的onActivityResult
的回调请求代码是错误的。下面这段代码来自于LoginManager
类,它为登录注册了一些请求代码的回调函数。
...
CallbackManagerImpl.registerStaticCallback(
CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode(),
new CallbackManagerImpl.Callback() {
@Override
public boolean onActivityResult(int resultCode, Intent data) {
return LoginManager.this.onActivityResult(resultCode, data);
}
}
);
...
但是当其调用活动的onActivityResult方法时,它不是
CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()
,而是其他值,类似于双倍。例如,当我尝试调试并检查值时,它是这样的:
现在,由于这个requestCode,当callbackManager尝试调用onActivityResult方法时,CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode() = 64206
Activity类中收到的requestCode = 129742
它无法从映射中找到logincallback并继续进行,就停在那里了。不知道为什么会出现这种情况,因为我正在使用ParseFacebookSDK,并且当我使用callbackManager.onActivityResult(requestCode, resultCode, data);
ParseFacebookUtils.logInWithReadPermissionsInBackground(..)
登录时,它可以完美地工作。以下是gradle依赖项。...
compile 'com.facebook.android:facebook-android-sdk:4.7.0'
compile('com.parse:parse-android:1.13.0') {
exclude group: 'com.parse.bolts',
module: 'bolts-tasks'
}
compile 'com.parse:parsefacebookutils-v4-android:1.10.3@aar'
...
如果您能帮忙,将不胜感激。谢谢。
更新: 当我尝试从父活动而不是片段进行Facebook登录时,它在活动的onActivityResult中返回了正确的请求代码,并且它简单地起作用了。这解决了我的问题,但仍然想了解这里片段的问题,如果你知道请分享你的想法。谢谢。