7

私は実際に 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 が返される) がログイン クライアント部分であるということです。

4

2 に答える 2