2

Facebook SDKを使用してユーザーをログインさせています。

Facebook のログインのみを行う作成したアクティビティを呼び出し、元のアクティビティに結果を返す必要があります。

これを呼び出す方法は次のとおりです(カスタムコンポーネントの内部からのものであるため、getContext()が使用されます):

Intent intent = new Intent(getContext(), FacebookAuthenticationActivity.class);
Log.d(TAG, "Starting facebook authentication for result");
((Activity)getContext()).startActivityForResult(intent, REQUEST_FACEBOOK);

そして、ここで私は応答が欲しい:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    Log.d(TAG, "Result from something!");
    if(requestCode == LoginWidget.REQUEST_FACEBOOK) {
        if(resultCode == RESULT_OK && intent != null) {
            Log.d(TAG, "Result from facebook received!");
            mLoginWidget.onFacebookLoginSucceeded(intent);
        }
    }
    super.onActivityResult(requestCode, resultCode, intent);
}

Facebook のアクティビティでは、Facebook 開発者ページのコードです。そのコードにはエラーはありません... 何らかの奇妙な理由で、アクティビティは でonActivityResultを呼び出す前に を呼び出しonCreateますFacebookAuthActivity

私が書いたコードは、ユーザーをログインさせ、情報を取得し、最後に呼び出すことです:

Intent intent = new Intent();
intent.putExtra("user_json", response);

Log.d(TAG, "Setting result to: " + intent);
setResult(RESULT_OK, intent);
finish();

ここでログを確認した後、私が得たものは次のとおりです。

07-11 16:34:27.992: D/LoginWidget(6863): Starting facebook authentication for result
07-11 16:34:27.992: D/ProgramActivity(6863): I am starting an activity to get a result!
07-11 16:34:28.101: D/ProgramActivity(6863): Result from something!
07-11 16:34:40.875: D/Facebook-authorize(6863): Login Success! access_token=xxx expires=1347195352881
07-11 16:34:40.875: D/FacebookAuthentication(6863): User accepted our app in facebook!
07-11 16:34:42.351: D/FacebookAuthentication(6863): Setting result to: Intent { (has extras) }

だから私はアイデアがありません...何らかの理由で、このアクティビティを呼び出すとonActivityResult、結果なしですぐに親を呼び出し、その後、ログインし、実際の結果を設定し、終了を呼び出しonActivityResult、実際の応答で呼び出すことはありません.

ここで何か不足していますか?結果を正しく返すには、このアクティビティに特定のフラグを設定する必要がありますか?

これは、一連の非同期Facebook呼び出しを使用した単純なアクティビティであり、結果を返します...

アップデート

明確にするために、このコードからエラーは発生しません。問題は、ログイン後に結果を設定すると、元のアクティビティが結果を受け取らないことです。

4

2 に答える 2

6

答えはここにあります。singleInstaceこの「機能」では、結果のアクティビティを呼び出すために使用して開始されたアクティビティは許可されません。

アクティビティをに変更したところ、正常にsingleTop動作するようになりました。

于 2012-07-12T12:02:51.647 に答える
0

あなたの例から判断すると、その意図の Action/Uri もパッケージ コンテキスト/クラスも設定されていません。

http://developer.android.com/reference/android/content/Intent.html#Intent ()

これら 2 つのいずれかを設定する必要があります。つまり、

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("xxx://someUri");

また

Intent intent = new Intent(this, MyActivity.class);

MyActivity.class何かを処理して結果を返すアクティビティの名前/タイプはどこにありますか。

于 2012-07-11T20:05:38.447 に答える