行動在這個Android應用程序的流量 -Android:Facebook PublishPermissions無需重新輸入密碼(使用SUPPRESS_SSO時)?
- 用戶X在Facebook上註冊
- 用戶X授予read_permissions
- 用戶X補助publish_permissions
- 他是的access_token存儲在我們的數據庫。
用戶X註銷
UserY登記...因爲它需要我需要SUPPRESS_SSO(感謝How to disable Single SIgn On for facebook android app?)多個用戶的登錄[遵循相同的步驟]
。
現在在Facebook API 3.0中,Facebook使ReadPermissions和PublishPermissions不同。 我成功地要求兩個權限,但它需要用戶登錄兩次(因爲SSO被抑制並且webview被顯示) - 登錄webview再次彈出 - 用戶必須輸入他的電子郵件和密碼。 我想訪問PublishPermissions或ReadPermissions(以任意順序),而用戶不必重新輸入他的密碼。
從Java代碼相關的功能如下所示:
private static final List<String> PERMISSIONS = Arrays.asList("user_photos", "read_friendlists", "email", "publish_actions", "publish_stream");
private void updateView() {
Session session = Session.getActiveSession();
if (session.isOpened()) {
handleAnnounce();
textInstructionsOrLink.setText(ACKNOWLEDGE_USER);
buttonLoginLogout.setText(R.string.logout);
buttonLoginLogout.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
onClickLogout();
}
});
} else {
textInstructionsOrLink.setText(R.string.login);
buttonLoginLogout.setText(R.string.login);
buttonLoginLogout.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
onClickLogin();
}
});
}
}
private void onClickLogin() {
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
Session.OpenRequest openRequest = new Session.OpenRequest(this).setCallback(statusCallback);
List<String> readPermissions = Arrays.asList("user_photos", "email", "read_friendlists");
openRequest.setPermissions(readPermissions);
openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
session.openForRead(openRequest);
} else {
Session.openActiveSession(this, true, statusCallback);
}
}
private void requestPublishPermissions(Session session) {
Log.d(LOG_TAG, "Requesting Publish Permissions...");
if (session != null) {
List<String> publishPermissions = Arrays.asList("publish_actions", "publish_stream");
final int REAUTH_ACTIVITY_CODE = 100;
Session.NewPermissionsRequest reauthRequest = new Session.NewPermissionsRequest(this, publishPermissions).setRequestCode(REAUTH_ACTIVITY_CODE);
reauthRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
session.requestNewPublishPermissions(reauthRequest);
}
}
private void handleAnnounce() {
Session session = Session.getActiveSession();
if (session == null || !session.isOpened()) {
return;
}
List<String> permissions = session.getPermissions();
if (!permissions.containsAll(PERMISSIONS)) {
requestPublishPermissions(session);
return;
}
}
謝謝。我計算了這個錯誤,並在Facebook API中做出了相關更改。 :) – banskt