使用LoginManager
类进行日志记录时,我遇到了一个奇怪的问题。我从一个片段调用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()
,而是其他东西,它就像是双倍。例如,当我尝试调试并检查值时,它是这样的:
CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()= 64206
在Activity class = 129742
中收到requestCode
现在因为这个问题,当callbackManager尝试调用onActivityResult时就像
一样callbackManager.onActivityResult(requestCode,resultCode,data);
有了这个requestCode,它没有从地图中找到logincallback继续前进,它就在那里停止。我不知道为什么会发生这种情况,因为我正在使用ParseFacebookSDK,当我使用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中返回了正确的请求代码,它只是起作用。这已经解决了我的问题,但仍然想在这里理解片段的问题,所以如果你知道请分享你的想法。感谢。
答案 0 :(得分:3)
在您的用户已经登录时尝试拨打ParseFacebookUtils.logInWithReadPermissionsInBackground
是不正确的,这可能就是您没有收到回拨的原因。
如果您的用户已登录但未链接到Facebook,则调用的正确函数为ParseFacebookUtils.linkWithReadPermissionsInBackground
,这意味着您要将用户链接到Facebook,而不是登录到您的应用程序(因为他是已经登录)。 Take a look in the docs for that.
答案 1 :(得分:2)
如果您从片段中调用UpdatePannel
,则希望在片段LoginManager.getInstance().logInWithReadPermissions(..)
中收到正确的请求代码,而不是活动的onActivityResult
。
见here。片段有自己的onActivityResult`方法。他们不需要依赖于活动。
非常棒的是,不一定需要任何UI的东西本身仍然提供这种方法:)