2013-03-05 51 views
1

我正在開發中,我使用Facebook登錄來進行驗證和內容的應用程序訪問用戶數據。 facebook sdk 3.0需要一些訪問用戶數據的權限,例如個人資料圖片,emailID,publish_stram等。如何在代碼中授予訪問這些內容的權限。直到現在我能夠得到fb_access_token。這裏是我的代碼:如何給Facebook的權限在Facebook中-SDK-3.0

Session.openActiveSession(this, true, new Session.StatusCallback() { 

      // callback when session changes state 
      @Override 
      public void call(Session session, SessionState state, 
        Exception exception) { 
       if (session.isOpened()) { 
        // make request to the /me API 
        Request.executeMeRequestAsync(session, 
          new Request.GraphUserCallback() { 

           // callback after Graph API response with 
           // user 
           // object 
           @Override 
           public void onCompleted(GraphUser user, 
             Response response) { 
            if (user != null) { 
             fb_user_id = user.getId(); 
            } 

            Session session = Session 
              .getActiveSession(); 
            if (session.isOpened()) { 
             access_token = session 
               .getAccessToken(); 
            } 

            new postFBData().execute(); 
           } 
          }); 
       } 
      } 
     }); 

採取這一代碼片段來自Facebook的樣品。如何在從FB訪問access_token之前給予許可?

任何幫助將不勝感激。

回答

3

調用Session.openActiveSession只會給你基本的權限(直到您要求額外的)。您還需要分開讀取和發佈權限請求。

在你的情況,我會做這樣的事情:

Session session = // create a new Session using Session.Builder 
Session.OpenRequest openRequest = // create an OpenRequest using Session.OpenRequest 
openRequest.setPermissions(READ_PERMISSION_LIST); 
session.openForRead(openRequest); 
Session.setActiveSession(session); 

然後,一旦你這是使用Facebook SDK V3這是V2會議開幕,

// check if you already have publish permissions first 
if (!Session.getActiveSession.getPermissions.contains("publish_stream")) { 
    Session.NewPermissionsRequest permissionRequest = // create a NewPermissionsRequest 
    permissionRequest.setPermissions(PUBLISH_PERMISSION_LIST); 
    Session.getActiveSession().requestNewPublishPermissions(permissionRequest); 
} 
+0

我得這麼多權限'user_photos,user_videos,publish_stream,offline_access,read_stream,user_checkins,friends_checkins,friends_likes ,電子郵件,user_likes'。你能告訴把上面的代碼放在哪裏,什麼時候調用這些權限方法? – Anupam 2013-03-05 18:50:14

+0

這些都是「publish_stream」例外的讀取權限。通常,只有數據訪問權限的內容纔是讀取權限,任何可以修改用戶數據的權限(包括管理權限以及與事件相關的權限)都是發佈權限。 – 2013-03-06 00:14:55

+0

是帖子還是fb.request()? – JRowan 2013-03-06 00:28:35

0

我認爲你這是怎麼授權某一種功能在String []

fb.authorize(MainActivity.this,new String[] {"publish_stream"}, new DialogListener(){ 

      @Override 
      public void onFacebookError(FacebookError e) 
      { 
       Toast.makeText(MainActivity.this, "on Facebook error", Toast.LENGTH_SHORT).show(); 
      } 
      @Override 
      public void onError(DialogError e) 
      { 
       Toast.makeText(MainActivity.this, "on error", Toast.LENGTH_SHORT).show(); 
      } 
      @Override 
      public void onComplete(Bundle values) 
      { 
       updateButtonImage(); 

      } 
      @Override 
      public void onCancel() 
      { 

      } 
     }); 
+0

? – Anupam 2013-03-05 14:55:18

+0

是啊,我用它與SDK 3 – JRowan 2013-03-05 15:07:21

+0

它當你登錄你指定你將需要在String []的權限,如果引用的網站,你可以看到所有你可以實際使用 – JRowan 2013-03-05 15:09:23