3

ユーザーが Android で許可要求ダイアログをキャンセルしたことを検出する方法がわかりません。

これを確認するためにどの関数を呼び出す必要があるか知っている人はいますか?

4

2 に答える 2

2

まず最初に: 質問は少し古いため、この回答は、より新しいバージョンを使用していることを前提としています (私は現在 3.7 を使用しています)。SDK の 3.0 バージョンを使用してこれを行うことは可能かもしれませんが、プロジェクトで使用している Facebook SDK を新しいバージョンに更新してみてください。これは、3.0 以降、かなり多くの機能と修正が追加されているためです。

を使用してライフサイクルの変更Session.StatusCallbackをリッスンし、アクティビティの更新を提供する に登録します。SessionUiLifecycleHelper

ユーザーがアクセス許可ダイアログとのUiLifecycleHelper対話を終了すると、更新が発生し、登録されたインスタンスでSession.StatusCallback.call(Session, SessionState, Exception)メソッドが呼び出されます。Session.StatusCallbackユーザーが許可要求をキャンセルしたことを検出するために、Exceptionこのメソッドに渡されている を処理できます。

私のコードでは、投稿時に次のようにしていますが、読み取り許可要求は似ているはずです:

@Override
public void call(Session session, SessionState state,Exception exception) 
{
    if(exception != null)
    {
        if(exception instanceof FacebookOperationCanceledException)
        {
            //make sure we don't continue posting
            posting = false;
            //the user cancelled it, no need to show a message or do anything
            return;
        }
        else if(exception instanceof FacebookAuthorizationException)
        {
            Toast.makeText(FacebookActivity.this, "Failed to obtain Facebook permission to post on your behalf", Toast.LENGTH_LONG).show();
            //don't continue posting, let the user retry it if he/she wants to
            posting = false;
            return;
        }
    }

    //continue with checking that all permissions have been granted and post the action
}

この質問への回答で情報を見つけましたが、別の方法で処理していFacebookAuthorizationExceptionます。

Sessionまた、投稿または別の拡張アクセス許可を使用するときに復元する場合は、ユーザーが Facebook Web サイトなどの別の場所からアクセス許可をキャンセルした可能性があるため、SDK によって提供される結果を確認すると便利です。後者が発生した場合Session、アプリでオブジェクトを作成すると、アプリがまだアクセス許可 ( などpublish_actions) を保持していることを示しますが、実際にはそのアクセス許可はもうありません。これは、Sessionオブジェクトがキャッシュされていて、その中のデータが最新でない場合に発生します。

これは、アクセス許可が失われていないことを確認するために行っていることです (つまり、アプリからではなく、別の場所から削除されています)。

//note:
//I'm returning null further down the line because
//this code is run in an AsyncTask<Void,Void,Void>

Request request = new Request(
    session,
    graphPath,
    params,
    HttpMethod.POST);
Response response = request.executeAndWait();
GraphObject responseObject = response.getGraphObject();

if(responseObject == null)
{
    FacebookRequestError fbre = response.getError();
    if((fbre!=null) && (fbre.getCategory() == Category.PERMISSION))
    {
        requestFacebookPermissions(session);
        return null;
    }
    else
    {
        postFailed();
        return null;
    }
}
于 2014-03-13T13:53:26.417 に答える
0

Facebook のアクセス許可ダイアログがキャンセルされたときに処理するために、Facebook のソースに何らかのコールバックをマージした方がよいでしょう。

ここで最新のソースを取得できます。

https://github.com/facebook/facebook-android-sdk/tree/master/facebook

于 2013-03-18T23:47:52.893 に答える