使用解析sdk的Android Facebook SDK登录问题

时间:2017-01-06 11:59:34

标签: 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);
                 }
              }
      );
...

但是当它调用活动的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中返回了正确的请求代码,它只是起作用。这已经解决了我的问题,但仍然想在这里理解片段的问题,所以如果你知道请分享你的想法。感谢。

2 个答案:

答案 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的东西本身仍然提供这种方法:)