我有一个Android应用程序,需要能够更新用户的Facebook状态。 我正在使用此代码来请求适当的权限:
public void onClick(DialogInterface dialog, int which) {
final String openPermission = "basic_info";
final String publishPermission = "publish_actions";
Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
Log.d("test", "callback session opened " + session.isOpened() + " " + exception);
if (session.isOpened()) {
Log.d("test", "callback session permissions " + session.getPermissions());
if (session.getPermissions().contains(publishPermission)) {
doUpdateStatus(session, status);
} else {
Session.NewPermissionsRequest newPermRequest = new Session.NewPermissionsRequest(ctx, publishPermission);
session.requestNewPublishPermissions(newPermRequest);
}
}
}
};
Session session = new Session.Builder(ctx)
.setApplicationId(APPLICATION_ID)
.build();
Session.setActiveSession(session);
Log.d("test", "session opened " + session.isOpened());
if (!session.isOpened()) {
Session.OpenRequest openRequest = new Session.OpenRequest(ctx);
openRequest.setPermissions(new String[]{openPermission});
session.addCallback(callback);
session.openForRead(openRequest);
} else {
callback.call(session, session.getState(), null);
}
}
此代码工作正常,除非用户第一次尝试(当用户从未尝试与我的应用程序进行任何交互时)。在这种情况下,session.getPermissions()
只返回[],即使在以无限循环结束的NewPermissionRequest
之后,程序仍会要求publish_action
权限。
我怎样才能在第一次通话时给出正确的许可?
答案 0 :(得分:0)
我找到了绕过这个问题的方法: 我创建了2个回调,一个用于会话打开请求,另一个用于状态更新权限请求。
在状态更新权限请求的回调中,如果会话没有正确的权限,我只需将其关闭并创建一个新会话。