有一项任务是为服务器端访问令牌提供多种权限(多次读取和发布)。在3.0版本中,会话打开有两种不同的方法:openForRead和openForPublish。
一开始,应用程序要求读取权限:
private void authorizeFacebook() {
if (DEBUG)
Log.d(TAG, "Facebook authorization");
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(this.createReadRequest());
} else {
Session.openActiveSession(this, true, mFacebookSessionCallback);
}
}
但是在状态回调之后,应用程序要求发布权限:
if (session.isOpened() && !session.getPermissions().contains("publish_stream")) {
if (DEBUG)
Log.d(TAG, "Facebook, Request additional permission: Publish Stream");
session.requestNewPublishPermissions(new NewPermissionsRequest(this, Arrays.asList("publish_stream")).setCallback(mFacebookSessionCallback).setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO));
用户体验存在很大问题,因为在获得额外的权限请求后,会出现facebook登录表单,用户必须再次输入凭据...它是否像SDK开发人员设计的那样工作?或者我做错了什么?
答案 0 :(得分:5)
这个答案可能会迟到。我有一个类似的问题,使用适用于Android的FB SDK 3.0。这是SDK中的一个错误,他们已经在3月20日发布的适用于Android的FB SDK 3.0.1中修复了它。 change log提及:
“Web视图登录”对话框包含正在请求新权限的方案的令牌信息。这样可以避免用户在为会话请求新权限时必须输入登录凭据。
升级后再试一次。从here获取新SDK。
答案 1 :(得分:0)
我发现如果用户没有在其Android设备上安装Facebook应用程序,则每次要求他/她获得其他权限时都会显示登录屏幕。如果用户确实在他们的设备上安装了Facebook应用程序,那么我发现他/她只需要通过是/否按钮点击确认/取消确认其他权限。
顺便说一下,我已经汇总了一系列三篇简短的文章,解释了如何打开Facebook会话,请求额外的权限等等。 Here's第一个。