私は実際に Facebook SDK サンプルの SessionLoginFragment.java の例に従っています。
私が本当に理解していないのはこれです:
私が作るとき
session.openForRead(new Session.OpenRequest(fragment).setCallback(statusCallback));
ユーザーを Facebook にログインさせ、基本的な読み取り許可を求める (統合をテストするためだけに) だけでは機能しません。
デバッガーで少し掘り下げて、パスをたどりました。セッションの OpenRequest に requestCode を指定しない場合は、ランダムな値になります (これで問題ありません)。
openForRead (私の実際のセッションは CREATED ステータスです) は、権限ダイアログを作成します。「OK」ボタンを押すと、
request.getStartActivityDelegate().startActivityForResult(intent, request.getRequestCode());
fb sdk ソース コードからコードを確認できます。requestCode はセッションと同じです (これで問題ありません)。
fb がシステムにログインすると、彼の facebook.LoginActivity が終了し、アクティビティで onActivityResult がコールバックされます。問題は、ここで requestCode がリクエストのものと異なることです。そして、それがなぜ、どこから来るのかわかりません!
fb アカウントにアクセスすると、アプリケーションがそこにあるので、適切な認証フローを完了したことを意味します。しかし、この問題のため、アプリから正しく認証されません。
なぜ、どうすれば解決できるか知っていますか?
ありがとう。
フローの詳細を更新:
これは実際のフローです ( fragmentから):
session.openForRead(new Session.OpenRequest(fragment).setCallback(statusCallback));
作成後、リクエストコードは(常に) 64206になりました openForRead フローが呼び出されます (最終部分)
request.getStartActivityDelegate().startActivityForResult(intent, request.getRequestCode());
Facebook SDK から LoginActivity を呼び出し、クライアント/サーバーの検証/oauth を実行します。
現在、私のアクティビティは onActivityResult と呼ばれています(フラグメントではなく、アクティビティ部分で)
そしてここで私は電話します
Session.getActiveSession().onActivityResult(activity, requestCode, resultCode, data);
ここで requestCode は requestCode 129742 です
それはどのように可能ですか?すでに述べたように、このすべてのフローの問題は、onActivityResult に返される requestCode が pendingRequest の requestCode とは異なり、このブレーク (コードを実行せずに getActiveSession().onActivityResult が返される) がログイン クライアント部分であるということです。