我正在尝试将新的 Facebook SDK 3.0 实施到我的 Android 应用程序中,但遇到了问题。我遇到的问题是要求用户再次登录以授予发布(“post_to_wall”)权限,即使用户已经登录并具有读取权限。仅当用户未安装 FB 应用程序时才会发生这种情况。如果他安装了 FB 应用程序,则只要求他授予权限。
这就是我实现登录的方式:
public void login(Activity activity) {
Session session = Session.getActiveSession();
if (session == null || !session.isOpened()) {
openActiveSession(activity, true, sessionStatusCallback);
}
}
private Session openActiveSession(final Activity activity, final boolean allowLoginUI, final StatusCallback callback) {
return openActiveSession(activity, allowLoginUI, new OpenRequest(activity).setCallback(callback));
}
private Session openActiveSession(final Context context, final boolean allowLoginUI, final OpenRequest openRequest) {
Session session = new Builder(context).setApplicationId(FACEBOOK_APPLICATION_ID).build();
if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) {
Session.setActiveSession(session);
session.openForRead(openRequest);
return session;
}
return null;
}
这是回调的调用方法:
public void call(final Session session, final SessionState state, final Exception exception) {
if (session.isOpened()) {
if (state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
// code if new permissions have been granted
} else {
// code for login
}
} else if (session.isClosed()) {
// code for user canceled login
} else if (exception != null) {
// code if there were errors during login
}
}
}
这是我添加到调用登录的活动的 onActivityResult 方法的代码:
Session.getActiveSession().onActivityResult(activity, requestCode, resultCode, data);
这就是我要求新权限的方式:
Session session = Session.getActiveSession();
if (session != null && session.isOpened()) {
if (DONT_HAVE_PERMISSIONS) {
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(activity,
FACEBOOK_PERMISSIONS).setRequestCode(FACEBOOK_AUTHORIZE_ACTIVITY_CODE);
session.requestNewPublishPermissions(newPermissionsRequest);
}
}
我试图找出更多关于这个问题的信息,但我只发现了一些暗示这是有意的,但我还没有找到任何具体的东西。
这是默认行为吗?如果是这样,有没有办法解决它?或者,也许我做错了什么?
谢谢您的帮助。