Android Facebook SDK 3.0 认证

标签 android facebook facebook-android-sdk

我实际上是在关注 facebook sdk 示例中的 SessionLoginFragment.java 示例。

我真正不明白的是:

当我做

session.openForRead(new Session.OpenRequest(fragment).setCallback(statusCallback));

将我的用户登录到 facebook 并请求基本的读取权限(只是为了测试集成)它根本不起作用。

我用调试器进行了一些挖掘,然后我遵循了路径。如果您不将 requestCode 放入 session 的 OpenRequest,它将随机给它一个(这没关系)。

openForRead(我的实际 session 处于 CREATED 状态)将创建权限对话框。当您点击“确定”按钮时,它将执行

request.getStartActivityDelegate().startActivityForResult(intent, request.getRequestCode());

可以从fb sdk源码中看到代码。那么 requestCode 与 session 相同(这没关系)。

当 fb 将您登录到系统时,它将完成他的 facebook.LoginActivity 并在我的 Activity 中给我回复我的 onActivityResult 。问题是这里的 requestCode 与请求的不同。而且我不知道为什么以及它来自哪里!

如果我进入我的 fb 帐户,我的应用程序就在那里,这意味着我已经完成了正确的身份验证流程并顺利完成。但由于这个问题,我无法从我的应用程序中获得正确的身份验证。

你知道为什么吗?我该如何解决?

谢谢。

更新流程细节:

这是实际流程(来自 fragment ):

session.openForRead(new Session.OpenRequest(fragment).setCallback(statusCallback));

创建后,请求码(总是)64206 现在 openForRead 流程将调用(最后一部分)

request.getStartActivityDelegate().startActivityForResult(intent, request.getRequestCode());

从 facebook SDK 调用 LoginActivity 并执行客户端/服务器验证/oauth

现在我的 Activity 被称为onActivityResult(不是在 fragment 上而是在 Activity 部分)

我调用

Session.getActiveSession().onActivityResult(activity, requestCode, resultCode, data);

这里的requestCode是requestCode 129742

这怎么可能?正如我已经说过的,所有这个流程中的问题是返回到 onActivityResult 的 requestCode 与我的 pendingRequest requestCode 不同,并且这个中断(getActiveSession().onActivityResult 返回而不执行代码)登录客户端部分。

最佳答案

我遇到了同样的问题,除了在我的例子中有问题的 requestCode326350 (0x4face)。我确实在调用 super.onActivityResult,所以 workaround proposed by Eric Savage已经到位但没有效果。最奇怪的是,这东西几周前才起作用,而且我没有升级任何东西(Facebook SDK 版本、Android 版本、支持库版本,甚至我正在开发/测试的手机,都是一切都和我工作时一样)。

但是,Eric 的回答包含其他有趣的提示,我利用这些提示使我的代码再次运行。基本上,我没有将整个 requestCode 传递给 Session.onActivityResult,而是削减了最低的 16 位并仅传递它们。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session session = Session.getActiveSession();
    int sanitizedRequestCode = requestCode % 0x10000;
    session.onActivityResult(this, sanitizedRequestCode, resultCode, data);
}

我确实相信这是一个应该在 Facebook SDK 中修复的错误,并且会坚持为下一个版本打补丁。

关于Android Facebook SDK 3.0 认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14130481/

相关文章:

java - 使用 espresso 在 coordinatorlayout 中滚动

android - Flutter Base64编码字符串不完整

android - 如何在 libgdx 中使用网络框架(volley、okhttp 等)?

javascript - Facebook 为 400KB 加载 15 个 javascript 文件

Android:如何使用 access_token 获取 facebook 用户图像

Android模拟器出现蓝屏死机

php - 如何清除 Controller CakePHP 2.x 中的缓存?

javascript - 检查用户是否使用 FB.ui 在共享对话框中发布(或取消)共享到 Facebook

fb sdk3.0中的Android Facebook登录错误

android - 为什么 com.facebook.Settings.publishInstallAsync 在 onResume 中?