18

Facebook SDK 3.0 を使用して、Android アプリでボタンを押したときにアクセス トークンを取得しようとしています。アクティビティに、次のことを行う汎用ボタンがあります。

Button facebook = (Button)findViewById(R.id.facebookLoginButton);
    facebook.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Session session = new Session(getApplicationContext());
            Session.setActiveSession(session);
            session.openForRead(new Session.OpenRequest(SignInActivity.this).setCallback(statusCallback));
        }
    });

そして、コールバック:

private class FacebookSessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
            String s=session.getAccessToken();
    }
}

ボタンをクリックすると、期待どおりに自分のプロファイルにアクセスする許可を求めるプロンプトが表示されますが、このコールバックは、SessionState が "OPENING" の場合に 1 回だけ呼び出されます。この後、状態は変化しません。

ここで何が欠けていますか?私の最終目標は、アクセストークンを一度取得することだけであり、セッションを永続化することや、それを使用してアプリにログインすることはあまり気にしません。

4

2 に答える 2

69

資格情報が Facebook for Android (またはインライン ログイン) に対してチェックされた後、結果が処理され、セッションが更新されるように、onActivityResult をオーバーライドする必要があります。次のコードを追加します。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession()
        .onActivityResult(this, requestCode, resultCode, data);
}
于 2012-12-15T02:08:55.153 に答える
1

@Lucas Jota: リクエスト コードを変更してみてください。これは私にとってはうまくいきます。session.openForRead(new Session.OpenRequest(LoginActivity.this).setCallback(statusCallback).setRequestCode(urRequestCode)); また、アクティビティに「単一インスタンス」がプロパティとして含まれていないことを確認してください。

于 2014-02-17T14:02:21.890 に答える