2

ドキュメント、ソース コード、およびその他の関連する質問をここで読みましたが、Facebook SDK 3 for Android を使用してアプリを承認/ログインする際にまだ問題があります。

提供されている「ログイン」ボタンを使用したくありません。

関連するコードは次のとおりです。

Activity.onCreate でセッションを開始します。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Session session = Session.getActiveSession();
    mPrefs = getSharedPreferences("facebook_storage", MODE_PRIVATE);
    String access_token = mPrefs.getString("access_token", null);
    long expires = mPrefs.getLong("access_expires", 0);

    if (session == null) {
        if (access_token != null) {
            SharedPreferences.Editor editor = mPrefs.edit();
            editor.putString("access_token", null);
            editor.commit();
            AccessToken accessToken = AccessToken.createFromExistingAccessToken(access_token, null, null, null, null); 
            session.open(accessToken, this);

        } else {
            session = new Session(getApplicationContext());
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
            session.openForRead(new Session.OpenRequest(this).setCallback(this));
        } else if (session.getState().equals(SessionState.CREATED)) {
            System.out.println("Session created, no token. I guess");
            session.openForRead(new Session.OpenRequest(this).setCallback(this));
        }
    }

これにより、次がトリガーされます。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    }

次に、次のブロックをトリガーし、 at に入りif (session.isOpened())ます:

public void call(Session session, SessionState state, Exception exception) {
    // TODO Auto-generated method stub
    if (session == null) {
        MmfLogger.error("FacebookLogin session == null in call()");
    } else if (session.isOpened()) {
        System.out.println("Session.StatusCallback success: " + session.getState());
        Request request = new Request(session, REQUEST_FIELDS, null, null, this);
        request.executeAsync();
    }   
    if (!session.isOpened()) {
        System.out.println("session failed to open");
    }
    if (session.isOpened() && session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
        Request request = new Request(session, REQUEST_FIELDS, null, null, this);
        request.executeAsync();
    } else if (session.isOpened() && session.getState().equals(SessionState.CREATED)) {
        System.out.println("session isOpened and state is created");
    }

}

ここから、アクティブなトークンが必要であるというエラーが表示されます。ただし、リクエストが行われる前に、トークンを確認できます。セッションには 1 つがあります。どこが間違っていますか?

お時間をいただきありがとうございます。

4

0 に答える 0