我正試圖將新的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);
}
}
我試圖找出更多關於這個問題,我只發現了一些提示,這是打算,但我還沒有發現任何具體。
這是默認行爲嗎?如果是這樣,是否有解決方法?或者,也許我做錯了什麼?
感謝您的幫助。