Android Facebook SDK与Parse SDK登录问题

5

我在使用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(),而是其他值,类似于双倍。例如,当我尝试调试并检查值时,它是这样的:

CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode() = 64206

Activity类中收到的requestCode = 129742

现在,由于这个requestCode,当callbackManager尝试调用onActivityResult方法时,

callbackManager.onActivityResult(requestCode, resultCode, data);

它无法从映射中找到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中返回了正确的请求代码,并且它简单地起作用了。这解决了我的问题,但仍然想了解这里片段的问题,如果你知道请分享你的想法。谢谢。

请避免使用Parse,因为我们知道它正在被弃用,并且Facebook已经为Android提供了相当多的SDK。这是一个建议给你。 - Harsh Dalwadi
1
我正在使用Parse作为后端,并已将其迁移到专用应用服务器上。 - KunalK
2个回答

3
尝试在用户已经登录的情况下调用ParseFacebookUtils.logInWithReadPermissionsInBackground是不正确的,这可能是您没有收到回调的原因。
如果您的用户已经登录但尚未链接到Facebook,则应调用正确的函数ParseFacebookUtils.linkWithReadPermissionsInBackground,这意味着您想将用户链接到Facebook,而不是登录到您的应用程序(因为他已经登录)。请参阅文档了解更多信息:http://parseplatform.github.io/docs/android/guide/#facebook-linking

好的,让我试试。谢谢你的回复。 - KunalK
当另一个用户已经在另一台设备上使用Facebook登录时,根据文档所述,“链接时发生的步骤与登录非常相似。不同之处在于,在成功登录后,现有的ParseUser将更新为Facebook信息。未来通过Facebook的登录将会将用户登录到他们现有的帐户中。” - KunalK
那是另一个问题。这个答案解决了你最初的问题吗? - Natan R.
它也不能与ParseFacebookUtils.linkWithReadPermissionsInBackground一起使用,而且我在活动中得到的请求代码仍然与**CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()**不同。但是我发现一个奇怪的事情,即从片段内部使用Facebook SDK或ParseFacebookUtils登录或链接都无法工作,因此我尝试从父活动进行相同的登录,结果__成功了__。 - KunalK

2
如果您在片段中调用 LoginManager.getInstance().logInWithReadPermissions(..),则应该在片段的 onActivityResult 中接收正确的请求代码,而不是活动的 onActivityResult
请参见此处。片段有自己的 'onActivityResult' 方法。它们不需要依赖于活动。
真棒吧,即使不需要任何 UI,它仍然自己提供了这个方法 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接