標準チュートリアルの例で説明されているように、Facebook SSO を使用する Android アプリを作成しています: https://developers.facebook.com/docs/mobile/android/build/。
具体的には、ユーザーが次のようなボタンを押した後、私のコードは facebook.authorize() を呼び出します。
View.OnClickListener handler = new View.OnClickListener() {
public void onClick(View v) {
if (v == btnFB) {
if(!facebook.isSessionValid()) {
facebook.authorize(this, new String[] {}, new DialogListener() {
@Override
public void onComplete(Bundle values) {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", facebook.getAccessToken());
editor.putLong("access_expires", facebook.getAccessExpires());
editor.commit();
}
@Override
public void onFacebookError(FacebookError error) {}
@Override
public void onError(DialogError e) {}
@Override
public void onCancel() {}
});
}
else {
// already have a valid access token, so use it
String status = "FB access token is: " + facebook.getAccessToken();
Log.i(status);
// and fire off an intent service to do something on my server ...
}
}
}
コールバックは次のように定義されます。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
// fire off the same intent as above ...
}
Facebook アプリがデバイスにインストールされている場合、facebook.authorize() の呼び出しは正常に機能し、onActivityResult() コールバックも機能します。ただし、Facebook アプリがデバイスにインストールされていない場合、この例では、Web ビューから必要なコールバックをセットアップする方法が示されていません (ただし、承認呼び出しによって最終的にアクセス トークンが設定されます)。
Facebook のチュートリアルでは、「Facebook アプリがハンドセットにインストールされていない場合、SSO は webview ベースの oauth ダイヤルにフォールバックします」とありますが、この場合のコールバックの設定方法がわかりません。
私のアプリの結果、ユーザーはボタンを 2 回押す必要があります。最初の呼び出しで、有効なセッションが承認され、作成されます。しかし、コールバックがないため、アプリケーションが有効なアクセス キーを使用して処理を続行するには、ユーザーがもう一度ボタンを押す必要があります。これは明らかに良いエクスペリエンスではありません。
Facebookアプリがデバイスにインストールされていない場合など、上記のケースをどのように処理すればよいかについての提案や洞察をいただければ幸いです。どうもありがとう!