使用parse SDK的Android Facebook SDK登录问题



我在使用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(),而是其他东西,它就像double。例如,当我尝试调试和检查值时,它是这样的:

CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()=64206

活动类中收到的requestCode=129742

现在正因为如此,当callbackManager尝试调用类似的onActivityResult时

callbackManager.onActivityResult(requestCode,resultCode,data);

有了这个requestCode,它没有从映射中找到要继续的logincallback,它就停在那里。我不知道为什么会发生这种情况,因为我使用ParseFacebookSDK,当我使用ParseFacebookUtils.logInWithReadPermissionsInBackground(..)登录时,它运行得很好。以下是渐变依赖关系。

...
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中返回了正确的请求代码,它很有效。这已经解决了我的问题,但仍然想了解这里的碎片问题,所以如果你知道,请分享你的想法。谢谢

在用户已经登录时尝试调用ParseFacebookUtils.logInWithReadPermissionsInBackground是不正确的,这可能就是您没有得到回调的原因。

如果你的用户已经登录,但没有链接到Facebook,那么正确的调用函数是ParseFacebookUtils.linkWithReadPermissionsInBackground,这意味着你想将用户链接到Facebook而不是登录到你的应用程序(因为他已经登录)。看一下文档。

如果您从片段调用LoginManager.getInstance().logInWithReadPermissions(..),则希望在片段的onActivityResult中而不是活动的onActivityResult中接收正确的请求代码。

请参见此处。片段有自己的"onActivityResult"方法。他们不需要依赖某项活动。

不一定需要任何UI的东西仍然自己提供这种方法,这不是很棒吗:)

最新更新