ユーザーが Android で許可要求ダイアログをキャンセルしたことを検出する方法がわかりません。
これを確認するためにどの関数を呼び出す必要があるか知っている人はいますか?
ユーザーが Android で許可要求ダイアログをキャンセルしたことを検出する方法がわかりません。
これを確認するためにどの関数を呼び出す必要があるか知っている人はいますか?
まず最初に: 質問は少し古いため、この回答は、より新しいバージョンを使用していることを前提としています (私は現在 3.7 を使用しています)。SDK の 3.0 バージョンを使用してこれを行うことは可能かもしれませんが、プロジェクトで使用している Facebook SDK を新しいバージョンに更新してみてください。これは、3.0 以降、かなり多くの機能と修正が追加されているためです。
を使用してライフサイクルの変更Session.StatusCallback
をリッスンし、アクティビティの更新を提供する に登録します。Session
UiLifecycleHelper
ユーザーがアクセス許可ダイアログとの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;
}
}
Facebook のアクセス許可ダイアログがキャンセルされたときに処理するために、Facebook のソースに何らかのコールバックをマージした方がよいでしょう。
ここで最新のソースを取得できます。
https://github.com/facebook/facebook-android-sdk/tree/master/facebook