2014-10-10 64 views
0

我正在使用Facebook SDK作爲Android應用程序,它需要額外的2個權限才能登錄/註銷。 這兩個權限是讀取權限:用戶組和發佈權限:發佈。更新Facebook的Android會話權限,而無需註銷並再次登錄

問題是,在最新的Facebook API中需要分別詢問每個權限。我很好。

問題是,在用戶確認它們後,會話對象沒有用新的權限更新,除非我再次註銷並登錄到應用程序。

如果我可以一次詢問所有權限,但是再次不可能,這將不是問題。

有沒有其他方法可以避免這種情況?

而在OnActivityResult是的,我已經嘗試了一切,並在Session.getActiveSession的權限()對象不會更新與新的權限,即使如果我嘗試做必要的行動它的工作原理。

要求用戶在每次許可請求後註銷並登錄應用程序是完全不可行的。

這就是我在我的OnActivityResult(它工作完全好btw)。

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.d("RADARE","ON ACTIVITY RESULT CALLED"); 
    Log.d("RADARE","REQUEST CODE: " + requestCode + " == RESULT CODE: " + resultCode + " == INTENT: " + data.toString()); 
    if (RESULT_CANCELED == resultCode) { 
     Log.d("RADARE", "Canceled"); 
    } 
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 



    uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() { 

     @Override 
     public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) { 
      Log.e("Activity", String.format("Error: %s", error.toString())); 
     } 

     @Override 
     public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) { 
      Log.i("Activity", "Success!"); 
     } 
    }); 







    Session session = Session.getActiveSession(); 


    Log.d("RADARE","Session info: TOKEN: " + session.getAccessToken() + " == PERMISSIONS: " + session.getPermissions().toString() + " == STATE: " + session.getState()); 
    Toast.makeText(this, "You have to logout and login again in order for the service to work.", Toast.LENGTH_LONG).show(); 

我的第一個想法是,而不是使用Session.getPermissions()。包含(「needed_permission_here」),實際的許可,而不是Session對象在網上查詢。

現在,它只是進入一個循環:

的權限檢查=>權限是不存在=>跳到Facebook的應用程序要求的權限=>用戶授予它=>再次應用檢查許可(即使用戶確認了它們也不存在)並跳轉到facebook(這當然只是以確認的許可回覆),並且它們無限地來回跳舞。

除了在線檢查權限,還有其他想法嗎?

回答

0

FB Login Permissions page

報價user_groups-有限使用

此權限授予應用程式建立在平臺Facebook的品牌客戶,其中Facebook是不是已經可用。例如,Android和iOS應用不會被批准獲得此權限。此外,網絡,桌面和電視應用將不會被授予這個權限

和檢查,如果權限已經授予

private static final String PERMISSION = "publish_actions"; 

    <- Whatever read permissions you need -> 
      authButton.setReadPermissions(Arrays.asList("email", "user_birthday", 
        "read_stream", "user_friends","read_friendlists ")); 

    public void call(Session session, SessionState state, 
        Exception exception) { 

        if (session.isOpened()) { 

         List<String> permissions = session.getPermissions(); 
         if (!permissions.contains(PERMISSION)) { 
          pendingAnnounce = true; 
          requestPublishPermissions(session); 
          return; 
         } 
} 

我不知道有多少幫助,這將是你..

+0

謝謝你的回覆。這不是問題。我有權限。而這正是我現在正在接受他們的方式。 問題是,在用戶授予權限後,再次運行此方法,在Session對象中,權限不會更新爲新的和已確認的權限。 如果我註銷並再次登錄應用程序,權限在那裏,一切工作正常。 – manu144x 2014-10-10 12:38:43