在我的应用程序中我的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
,然后当它解决后,我将返回此功能。
答案 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()
回调完成,然后再决定是否要再次打开权限对话框以询问发布权限。