2013-05-22 32 views
6

Tôi đã sử dụng mã sau để xác thực Facebook và nó hoạt động tốt, nhưng khi tôi đã hủy xác thực và cố gắng xác thực lại ứng dụng bị lỗi và nhật ký bị gây ra bởi: java.lang.UnsupportedOperationException: Session: an attempt was made to open an already opened session.
Khi gỡ lỗi, tôi nhận được như thế nàyVấn đề phiên Facebook Facebook

{Session state:CREATED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:xxxxxxxxxxxxxxx} 

Làm thế nào tôi có thể giải quyết issue.Please trợ giúp này me.Thanks trước

private void askFacebbokAuthentication() { 

     Session session = Session.getActiveSession(); 
     if (session.isOpened()) { 

      facebook = true; 
      if (!hasPublishPermission()) { 

       session.requestNewPublishPermissions(new NewPermissionsRequest(
         MyActivity.this, PERMISSIONS)); 

      } 
     } else { 
      Session.OpenRequest openRequest = null; 
      openRequest = new Session.OpenRequest(MyActivity.this); 
      if (openRequest != null) { 

       openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS); 

       if (!hasPublishPermission()) { 
        openRequest.setPermissions(PERMISSIONS); 
       } 
       session.openForPublish(openRequest); 
      } 
     } 
    } 

Trả lời

13

tôi cũng có cùng một vấn đề, nhưng tôi giải quyết với những dòng này. Theo hiểu biết của tôi, chúng tôi không thể yêu cầu phiên cho các quyền mới đã được mở.

Session session = new Session(this); 
    Session.setActiveSession(session); 
    session.openForRead(new Session.OpenRequest(this).setCallback(callback).setPermissions(Arrays.asList("your_permissions"))); 

Tôi hy vọng bạn đã thêm vào dưới dòng trong onActivityResult()

Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
+3

Cảm ơn bạn.Đã hoạt động – user1767260

+0

quyền là gì? – Amitsharma

+0

Cảm ơn Aswin, nhưng bạn đang thêm ba dòng đầu tiên ở đâu? –

3

Nếu đối tượng Session được không mở hay đóng cửa, tôi nghĩ rằng nó là tốt hơn để Session.openActiveSession()

Snipped Đây là đã sao chép từ dự án mẫu Facebook SDK SessionLoginSample, LoginUsingActivityActivity # onClickLogin()

private void onClickLogin() { 
    Session session = Session.getActiveSession(); 
    if (!session.isOpened() && !session.isClosed()) { 
     session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); 
    } else { 
     Session.openActiveSession(this, true, statusCallback); 
    } 
} 

Lưu ý rằng Session # openActiveSession() cũng tạo một Session dưới mui xe, đó là OK. Từ https://developers.facebook.com/docs/technical-guides/iossdk/session/#lifecycle:

Chỉ có thể mở phiên một lần. Khi phiên bị đóng, không thể mở lại . Thay vào đó, một phiên mới sẽ được tạo. Các ứng dụng điển hình sẽ chỉ yêu cầu một phiên hoạt động bất kỳ lúc nào. Facebook SDK cung cấp các phương thức phiên hoạt động tĩnh, đảm bảo việc mở các phiên bản phiên bản mới.