解析sdk的Android Facebook SDK登录问题

Kun*_*alK 5 android parse-platform facebook-sdk-4.0

使用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);
                 }
              }
      );
...
Run Code Online (Sandbox Code Playgroud)

但是当它调用活动的onActivityResult时,它不是CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()其他东西,而是它的双倍.例如,当我尝试调试并检查值时,它是这样的:

CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()= 64206

requestCode在Activity class = 129742中收到

而现在因为这个,当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'
...
Run Code Online (Sandbox Code Playgroud)

如果您能提供帮助,将不胜感激.谢谢.

更新:

当我尝试从父活动而不是片段登录facebook时,它对我有用,这次它在活动的onActivityResult中返回了正确的请求代码,它只是起作用.这已经解决了我的问题,但仍然想在这里理解片段的问题,所以如果你知道请分享你的想法.谢谢.

Nat*_* R. 3

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

如果您的用户已登录,但未链接到 Facebook,则调用的正确函数是ParseFacebookUtils.linkWithReadPermissionsInBackground,这意味着您希望将用户链接到 Facebook,而不是登录到您的应用程序(因为他已经登录)。请查看文档。