2013-04-15 42 views
0

當我通過Facebook對話框(未安裝fb應用程序)登錄後嘗試請求發佈權限時,系統會要求我再次登錄,之後所有內容都正常運行。有什麼辦法可以避免這個問題嗎?這是我的代碼:Android SDK 3.0:請求發佈perimissoins會導致再次登錄

private void login() { 
     Session.Builder builder = new Session.Builder(activity); 
     builder.setApplicationId(activity.getString(R.string.app_id)); 
     builder.setTokenCachingStrategy(new SharedPreferencesTokenCachingStrategy(activity)); 
     Session session = builder.build(); 

     Session.setActiveSession(session); 
     Session.OpenRequest request = new Session.OpenRequest(activity).setCallback(new Session.StatusCallback() { 
      @Override 
      public void call(Session session, SessionState state, Exception exception) { 
       if (exception!=null) { 
        Toast.makeText(activity, exception.getMessage(), Toast.LENGTH_SHORT).show(); 
        return; 
       } 
       if (session.isOpened()) 
        checkAndRequestPermissions(); 
      } 
     }); 
     session.openForRead(request); 
    } 

private void checkAndRequestPermissions() { 
     Session session = Session.getActiveSession(); 
     List<String> permissionsList = new ArrayList<String>(); 
     if (!session.getPermissions().contains(USER_PHOTOS_PERMISSION)) 
      permissionsList.add(USER_PHOTOS_PERMISSION); 
     if (!session.getPermissions().contains(PUBLISH_ACTIONS_PERMISSION)) 
      permissionsList.add(PUBLISH_ACTIONS_PERMISSION); 
     if (permissionsList.size()>0) { 
      Session.NewPermissionsRequest request = new Session.NewPermissionsRequest(activity, permissionsList); 
      session.requestNewPublishPermissions(request); 
     } 
     else { 
      publishOnFacebook(filesToPublish); 
     } 
    } 
+0

看到我的[類似的問題]答案(http://stackoverflow.com/questions/15244866) – 5agado

回答

0

好吧我已經想出瞭如何請求讀取和發佈權限。您應該使用Session.openForPublish方法:

 Session.Builder builder = new Session.Builder(activity); 
     builder.setApplicationId(activity.getString(R.string.app_id)); 
     builder.setTokenCachingStrategy(new SharedPreferencesTokenCachingStrategy(activity)); 
     Session session = builder.build(); 

     List<String> permissionsList = new ArrayList<String>(); 
     if (!session.getPermissions().contains(USER_PHOTOS_PERMISSION)) 
      permissionsList.add(USER_PHOTOS_PERMISSION); 
     if (!session.getPermissions().contains(PUBLISH_ACTIONS_PERMISSION)) 
      permissionsList.add(PUBLISH_ACTIONS_PERMISSION); 

     Session.OpenRequest request = new Session.OpenRequest(activity).setCallback(new Session.StatusCallback() { 
      @Override 
      public void call(Session session, SessionState state, Exception exception) { 
       if (exception!=null) { 
        Toast.makeText(activity, exception.getMessage(), Toast.LENGTH_SHORT).show(); 
        return; 
       } 
       if (session.isOpened()) 
        checkAndRequestPermissions(); 
      } 
     }); 
     request.setPermissions(permissionsList); 
     request.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 
     session.openForPublish(request); 

,一切工作正常,我

相關問題