我正在按照Facebook SDK示例中的SessionLoginFragment.java进行操作。
我真正不理解的是:
当我执行
session.openForRead(new Session.OpenRequest(fragment).setCallback(statusCallback));
为了将我的用户登录到Facebook并请求基本读取权限(只是为了测试集成),它根本不起作用。
我用调试器挖掘了一下,然后跟着路径走。如果您没有将requestCode放入会话的OpenRequest中,它将随机生成一个(这很好)。
openForRead(我的实际会话处于CREATED状态)将创建权限对话框。当您点击“确定”按钮时,它将执行一个操作。
request.getStartActivityDelegate().startActivityForResult(intent, request.getRequestCode());
您可以从fb sdk源代码中查看代码。requestCode与会话相同(这里没问题)。
当fb将您登录到系统时,它将完成其facebook.LoginActivity并在我的活动中调用我的onActivityResult。问题在于此处的requestCode与请求的不同。我不知道它来自哪里和为什么!
如果我进入我的fb帐户,我的应用程序就在那里,这意味着我已经完成了正确的授权流程。但由于这个问题,我无法从我的应用程序中获得正确的身份验证。
您知道为什么以及如何解决它吗?
谢谢。
更新流程详细信息:
这是实际流程(来自片段):
session.openForRead(new Session.OpenRequest(fragment).setCallback(statusCallback));
创建完成后,请求代码始终为64206。现在,打开读取流程将调用(最后一部分)。
request.getStartActivityDelegate().startActivityForResult(intent, request.getRequestCode());
使用Facebook SDK调用LoginActivity并进行客户端/服务器验证和OAuth授权。
现在,在我的活动中调用onActivityResult函数(不是在片段中,而是在活动部分)。
然后,我在这里调用:
Session.getActiveSession().onActivityResult(activity, requestCode, resultCode, data);
这里的requestCode是129742
怎么会这样呢?正如我之前所说,所有流程中的问题在于返回给onActivityResult的requestCode与我的pendingRequest requestCode不同,这破坏了登录客户端部分(getActiveSession().onActivityResult不执行代码便返回)。