有一项任务是为服务器端访问令牌提供多个权限(多个读取和发布)。在 3.0 版中,有 2 种单独的会话打开方法: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 开发人员的设计工作?..还是我做错了什么?