2013-12-13 2 views
4

Я пытаюсь интегрировать Facebook SDK в приложение для Android. Я получил код из руководства Facebook. Он использует Session.openActiveSession, а затем запрашивает пользователя графика. Как я могу запросить дополнительные разрешения без использования класса LoginButton?android facebook sdk - установить разрешения для openActiveSession

Session.openActiveSession(this, true, new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     onSessionStateChange(session, state, exception); 

     if (session.isOpened()) { 
      Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 
       @Override 
       public void onCompleted(GraphUser user, Response response) { 
        if (user != null) { 
         // got user graph 
        } else { 
         // could not get user graph 
        } 
       } 
      }); 
     } 
    } 
}); 

спасибо.

ответ

17

Попробуйте это:

mCallback = new Session.StatusCallback() {...}; // the code you already have 

Session.OpenRequest request = new Session.OpenRequest(mContext); 
request.setPermissions(Arrays.asList("email", "user_birthday")); 
request.setCallback(mCallback); 

// get active session 
Session mFacebookSession = Session.getActiveSession(); 
if (mFacebookSession == null || mFacebookSession.isClosed()) 
{ 
    mFacebookSession = new Session(mContext); 
    Session.setActiveSession(mFacebookSession); 
} 
mFacebookSession.openForRead(request); 
+0

Спасибо! Он работает :) – Boy

+4

Я бы также добавил «Session.setActiveSession (mFacebookSession)»; в конце вашего if(), иначе обратный вызов иногда не может быть вызван. –

+0

В дополнение к комментариям Беньямина, я хотел повторить его также - это решение не сработало для меня, пока я не добавил setActiveSession перед openForRead. – leontx

7

Это решает проблему, используя opensession и расширенный одаривать только один раз. Facebook SDK 3.5

Session s = new Session(this); 
Session.setActiveSession(s); 
Session.OpenRequest request = new Session.OpenRequest(this); 
request.setPermissions(Arrays.asList("basic_info","email")); 
request.setCallback(new Session.StatusCallback() { 
     // callback when session changes state 
     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
      if (session.isOpened()) { 
       Request.newMeRequest(session, new Request.GraphUserCallback() { 
         @Override 
         public void onCompleted(GraphUser user, Response response) { 
          if (user != null) { 
           Toast.makeText(getApplicationContext(), "User email is:"+user.getProperty("email"), Toast.LENGTH_SHORT).show(); } 
          else { 
           Toast.makeText(getApplicationContext(), "Error User Null", Toast.LENGTH_SHORT).show(); 
          } 
         } 
       }).executeAsync(); 
      } 
     } 
}); //end of call; 

s.openForRead(request); //now do the request above 
+0

Работает как очарование. – user1007522

+0

Отличная помощь, спасибо –

Смежные вопросы