2013-05-22 15 views
6

私はFacebookの認証のためのコードを次のように使用している、それが正常に動作しているが、私は認証をキャンセルし、再度認証しようとした際にアプリがクラッシュし、ログがによって引き起こされた:私が得たデバッグでjava.lang.UnsupportedOperationException: Session: an attempt was made to open an already opened session.
このAndroidのFacebookのセッション問題

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

どのように私は事前

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); 
      } 
     } 
    } 

答えて

13

でこのissue.Pleaseヘルプme.Thanksを解決することができますように私も同じ問題を抱えていたが、私はこれらの行を解きます。私の知る限りでは、すでに開かれている新しい権限のセッションをリクエストすることはできません。

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

私はセッションが開かれていないにも閉じてもされていない場合は、すでにonActivityResult()

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

ありがとうございます。 – user1767260

+0

権限は何ですか? – Amitsharma

+0

ありがとうございました。しかし、最初の3行をどこに追加していますか? –

3

にラインの下に追加願って、私はそれが

これスニップはSession.openActiveSession()に優れていると思います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); 
    } 
} 

セッション#openActiveSession()は、フードの下にもセッションを作成します。これは問題ありません。 https://developers.facebook.com/docs/technical-guides/iossdk/session/#lifecycle

セッションは1回だけ開くことができます。セッションが終了すると、 を再度開くことはできません。代わりに、新しいセッションを作成する必要があります。典型的なアプリケーション は、いつでも1つのアクティブなセッションしか必要としません。 Facebook SDK は、新しい セッションインスタンスを開く世話をする静的アクティブセッションメソッドを提供します。