Android的Facebook的SDK 3.0 AUTH(Android Facebook SDK

2019-07-17 18:20发布

实际上,我下面从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帐号我的应用程序是存在的,那么就意味着我已经做了很好完成正确的验证流程。 但我不会得到正确验证从我的应用程序,因为这个问题的。

你知不知道为什么,我该如何解决呢?

谢谢。

- 流动明细更新:

这是实际的流量(从片段 ):

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

这怎么可能? 正如我已经说过,在这一切的流动问题是requestCode回到onActivityResult是从我pendingRequest requestCode不同的,这种断裂登录客户端部分(getActiveSession()函数。onActivityResult不执行代码返回)。

Answer 1:

我遇到了同样的问题,但在我的情况下违规requestCode3263500x4face )。 我确实是叫super.onActivityResult ,所以由埃里克·萨维奇提出的解决办法已经到位,但没有效果。 所有的最怪异的事情,这东西没有工作,只是一个几个星期前,和犯罪行为出现没有自己的任何升级(Facebook的SDK版本,Android版本,支持库的版本,甚至在我正在开发/测试的手机,是所有一样,当我有它的工作)。

然而,Eric的答复包含其他有趣的提示,这是我利用来再作我的代码工作。 基本上,而不是整个传递requestCodeSession.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中的错误,并会坚持要把它修补下一个版本。



Answer 2:

恰好碰到了同样的问题。 64206(0xface)和129742(0x1face)之间的差异是因为FragmentActivity已经上涨了一个额外的0x10000以确定它来自哪个片段。 这是通过确保超级活动期间onActivityResult被称为解决

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        // ...
    }
}

你“只能使用较低的requestCode 16位”,如FragmentActivity.startActivityFromFragment规定



文章来源: Android Facebook SDK 3.0 auth