1

XMPP を使用して Facebook チャットに接続する Facebook アプリを作成しました。そして、それはうまくいきました。しかし、最近、承認しようとしているアカウントでは、正しい権限が要求されず、アプリが機能しなくなりました。以下は、私のアプリが Facebook から取得しているアクセス許可の 2 つのスクリーンショットです。一方は明らかに他方よりも多くの許可を示しています。許可を要求するための私のコードは変更されていません:

Session session = Session.getActiveSession();

        if (session == null) {
            if (savedInstanceState != null) {
                session = Session.restoreSession(this, null, statusCallback,
                        savedInstanceState);
            }
            if (session == null) {
                session = new Session(this);
            }
            Session.setActiveSession(session);
            if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
                session.openForRead(new Session.OpenRequest(this)
                        .setPermissions(
                                Arrays.asList("xmpp_login",
                                        "user_online_presence",
                                        "friends_online_presence",
                                        "read_mailbox", "read_friendlists"))
                        .setCallback(statusCallback));
            }
        }

正しい権限: ここに画像の説明を入力

正しくない:

ここに画像の説明を入力

4

1 に答える 1

2

何に対処すべきかを突き刺す(ドキュメントを読む)-しかし、コメントするには長すぎます。

違いは、最初のユーザーが以前にアプリを認証したことです。「最後のアクセス」が「基本情報」であることを確認できます。この場合、ユーザーは「SessionState.CREATED_TOKEN_LOADED」を持っている可能性がありますが、以前にキャッシュされたトークンがなかったため、他のユーザーは「SessionState.CREATED」を持っている可能性があります。「openForRead」を呼び出す前に両方の状態を確認するとどうなりますか? これが失敗した場合におそらく一掃される別の「オープン」がありますか?他の人は許可を求めないかもしれません。

ドキュメントに基づく別のコメントは、「Session.setActiveSession(session);」への呼び出しです。まだ開いていないセッションでこれを呼び出すことはできません。したがって、おそらくそれを「openForRead」呼び出しの後に移動する必要があります。そうしないと、例外がスローされ、別の open() リクエストが余波を一掃する可能性があります。

于 2013-10-16T05:09:00.517 に答える