Facebook Auth有时会返回OnCancel

时间:2015-09-05 00:04:57

标签: android facebook facebook-android-sdk

在我的应用程序中我的facebook auth有时会调用方法onCancel,我不知道发生了什么。我觉得我的代码是正确的,有时auth工作得很好,有时候不行。

我的身份验证的源代码:https://gist.github.com/ppamorim/76d40f0edf3fd4f64d47

然后,这在第46行失败。首先我要求:

strings.add("public_profile");
strings.add("email");
loginManager.logInWithReadPermissions(contextCallback.getActivity(), strings);

然后,我称之为:

ArrayList<String> stringss = new ArrayList<>();
stringss.add("publish_actions");
loginManager.logInWithPublishPermissions(contextCallback.getActivity(), stringss);

auth在那里工作得很好,但在返回我的应用程序之后,这将随机下降到OnCancel。

清单:

<!-- Facebook Keys -->
    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/app_id" />

<provider android:authorities="com.facebook.app.FacebookContentProviderHIDDEN_KEY"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />

我不知道发生了什么......

编辑1:

我更改了源但遇到了同样的问题:

https://gist.github.com/ppamorim/446183341ecd5ad099fe

编辑2:

新的更新,当然更少的代码。 但仍然没有工作,它停在第53行。 我现在就删除publish_actions,然后当它解决后,我将返回此功能。

https://gist.github.com/ppamorim/3cd0a141aac5d52bd60e

1 个答案:

答案 0 :(得分:1)

我不认为您可以连续两次调用登录对话框,就像您正在做的那样:

public Facebook authorize(/* ... */) {
    // ...
    ArrayList<String> strings = new ArrayList<>();
    strings.add("public_profile");
    strings.add("email");
    loginManager.logInWithReadPermissions(contextCallback.getActivity(), strings);
    ArrayList<String> stringss = new ArrayList<>();
    stringss.add("publish_actions");
    loginManager.logInWithPublishPermissions(contextCallback.getActivity(), stringss);
    return this;
}

这不起作用的原因是 - 我认为 - 登录对话框仍处于打开状态时会调用登录/发布权限对话框。这是因为登录对话框打开,然后异步运行到您自己的authorize()方法,然后该方法再次尝试打开权限对话框。 显然,如果第一次登录对话框尚未正确完成,则可能会失败。

相反,您应该等待第一次登录的onSuccess()回调完成,然后再决定是否要再次打开权限对话框以询问发布权限。

这也是documented by Facebook