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呼び出しを使用した単純なアクティビティであり、結果を返します...
アップデート
明確にするために、このコードからエラーは発生しません。問題は、ログイン後に結果を設定すると、元のアクティビティが結果を受け取らないことです。