我实际上是在关注 facebook sdk 示例中的 SessionLoginFragment.java 示例。
我真的不明白的是:
当我做
session.openForRead(new Session.OpenRequest(fragment).setCallback(statusCallback));
将我的用户登录到 facebook 并询问基本的读取权限(只是为了测试集成)它根本不起作用。
我用调试器挖了一点,然后沿着这条路走。如果您没有将 requestCode 放入会话的 OpenRequest 中,它将给它一个随机的(这没关系)。
openForRead(我的实际会话处于创建状态)将创建权限对话框。当您点击“确定”按钮时,它将执行
request.getStartActivityDelegate().startActivityForResult(intent, request.getRequestCode());
您可以从 fb sdk 源代码中查看代码。那么 requestCode 与会话相同(这里没问题)。
当 fb 将您登录到系统时,它将完成他的 facebook.LoginActivity 并在我的活动中回叫我的 onActivityResult。问题是这里的 requestCode 与请求的不同。而且我不知道它为什么以及它来自哪里!
如果我进入我的 fb 帐户,我的应用程序就在那里,这意味着我已经完成了正确的身份验证流程。但是由于这个问题,我不会从我的应用程序中获得正确的身份验证。
你知道为什么以及如何解决它吗?
谢谢。
更新流程细节:
这是实际流程(来自fragment):
session.openForRead(new Session.OpenRequest(fragment).setCallback(statusCallback));
创建后,请求代码是(总是)64206 现在 openForRead 流将调用(最后部分)
request.getStartActivityDelegate().startActivityForResult(intent, request.getRequestCode());
从 facebook SDK 调用 LoginActivity 并执行客户端/服务器验证/oauth
现在我的活动被称为 onActivityResult (不是在片段上,而是在活动部分)
我在这里打电话
Session.getActiveSession().onActivityResult(activity, requestCode, resultCode, data);
这里的 requestCode 是 requestCode 129742
这怎么可能?正如我已经说过的,所有这个流程中的问题是返回到 onActivityResult 的 requestCode 与我的 pendingRequest requestCode 不同,并且这个中断(getActiveSession().onActivityResult 返回而不执行代码)登录客户端部分。