0

以前のAndroidSDKでは、電話で新しい許可を求めFacebook.authorize()たところ、承認画面が表示されていました。しかし、SDK 3.0では、を呼び出すとFacebookActivity.openSessionForPublish()、ダイアログに常にログインフォームが表示されます。承認許可画面を表示するにはどうすればよいですか?

トークンと有効期限を持つセッションを設定しました。そのSessionStateはCREATED_TOKEN_LOADEDです。

許可ダイアログを表示するための要件はありますか、それともFacebook.authorize()常にログインフォームを表示しますか?それでは、そのための正しい方法を教えてください。

私のコードは以下のようなものです

 public class FbConn extends FacebookActivity {
    public void onCreate(Bundle savedInstanceState) {
       ...
       if( savedInstanceState == null ) {
          Session savedSession = CommonUtil.getFbSession(CustomSessionStore.getFbInfo(getApplicationContext())); //get access token and expiration date from session store and set up new session.
          Session.setActiveSession(savedSession); 
          setSession(savedSession);
       }

    }

    protected void onStart() {
       super.onStart();
       openSessionForPublish(EpisodeApplication.config.getSelectedServer().fbAppId, Constants.FB_PERMISSIONS);
    }

 }

アップデート

これらの行をコメントアウトすると、許可要求画面が正常に表示されました。しかし、これが正しい方法かどうかはわかりません。

62com.facebook.LoginActivity行目で、

Utility.clearFacebookCookies(this);

com.facebook.Session1202行目、

Utility.clearFacebookCookies(getStaticContext());
4

1 に答える 1

6

以前の認証フローからの有効なセッションが既にある場合、新しいアクセス許可を要求する場合は、Session.ReauthorizeRequest クラスを使用します。

Session.ReauthorizeRequest reauthRequest = new Session
                .ReauthorizeRequest(this, Constants.FB_PERMISSIONS);
session.reauthorizeForPublish(reauthRequest);

これにより、ログイン フォームの代わりに、求めている新しいアクセス許可のアクセス許可画面が表示されます。

ただし、ロジックを見ると、初回ログインをどこで処理しているかが明確ではありません。このクラスでそれを処理することを期待している場合は、次を使用することをお勧めします。

Session.openActiveSession(this, true);

キャッシュされたトークンがない場合は、ログイン フォームが開きます。キャッシュされたトークンがある場合、新しいセッションが作成され、アクティブになります。これにより、基本的なアクセス許可でセッションが開かれるか (ユーザーがログインする必要がある場合)、取得されたキャッシュされたトークンに基づくアクセス許可でセッションが開かれます。その後、再認証メソッドを呼び出して、公開権限を要求できます。状況に応じてそれを行いたいと思うでしょう。通常、認証関数を連続して呼び出すことは望ましくありません。つまり、ユーザーをログインさせてから、すぐに公開権限を要求します。

于 2012-11-07T19:04:01.083 に答える