2012-12-22 40 views
0

行動在這個Android應用程序的流量 -Android:Facebook PublishPermissions無需重新輸入密碼(使用SUPPRESS_SSO時)?

  1. 用戶X在Facebook上註冊
  2. 用戶X授予read_permissions
  3. 用戶X補助publish_permissions
  4. 他是的access_token存儲在我們的數據庫。
  5. 用戶X註銷

  6. 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; 
    } 
} 

回答

相關問題