2013-12-13 54 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

除了强调本杰明的评论之外,我还想重申它 - 这个解决方案不适用于我,直到我在openForRead前添加了setActiveSession。 – leontx

7

这解决了使用的openSession和扩展persmission只有一次的问题。 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

很好的帮助,谢谢 –