私はデスクトップWebサイトとネイティブiOSアプリケーションの両方を持つ製品を開発中です。私たちは、両方の状況において、ユーザーのログインオプションとしてFacebook Connectを提供しています。なぜiOSアプリフィードダイアログにサーバー側のフローoauthトークンを使用できないのですか?
私の意図は、両方のコンテキストで使用するために、安全なJSON APIを使用して同じFacebookトークンを共有することでした。ユーザーがWebにサインインすると、トークンがバックエンドに格納され、モバイルクライアントが次に実行されるときトークンをダウンロードして使用することもできますし、逆も同様です。 (*私は、質問の最後に説明し、このアプローチのための詳細な理由は、との質問には必須ではありません。)
問題:iOSのクライアントは、そのトークンがある場合は、feed dialogをプリセットするトークンを使用する場合、 server-side flowを使用してWebで生成され、ダイアログのWebViewがエラーをレンダリング:
「エラーは、後ほど再度お試しください{私のアプリ名}で発生しました。」
これは確実に再現性がある:
- は、サーバー側のフローを使用して新しいアクセストークンを生成します。フィードダイアログを使用しているので、publish_actions権限をリクエストしてください。シークレットブラウザウィンドウを使用して
- (空のクッキージャーを取得する)、iOSのフィードダイアログがWebViewのでレンダリングすることをm.facebook.comページビュー:あなたができる#2にhttps://m.facebook.com/dialog/feed?access_token=SERVER_SIDE_FLOW_ACCESS_TOKEN&app_id=YOUR_APP_ID&redirect_uri=fbconnect%3A%2F%2Fsuccess&sdk=2&display=touchまた
をFacebook SDKを使ってダミーのiOSアプリを作成し、それを正しくインスタンス化してダイアログを表示するという作業(私がすでに行った作業)エラーを再現する目的で、m.facebook.comのフィードURLに直接進む方が簡単です。
サーバー側の認証フローではなく、ネイティブのFacebook iOS SDKによって開始された認証フローによってトークンが生成された場合、上記のフィードURLは正常に動作します。
さらに、トークン(モバイルまたはサーバー生成)は、グラフAPI経由でフィード項目を直接ポストするために問題なく動作します。問題は実際にはモバイルフィードのダイアログだけです。
Facebookは意図的にサーバー側で生成されたトークンがモバイルフィードのダイアログコンテキストで動作しないようにしていますか?
これはm.facebook.comのフィードダイアログエンドポイントのバグですか?
または、うまくいけば何か間違っていますか?
なぜトークンを共有したいですか?
- オフラインアクセス許可が削除されているため、各クライアント(Web対モバイル)は、ユーザーがアクティブなときに他のクライアントに同じトークンをリフレッシュさせることでメリットを得ることができます。これにより、トークンの有効期限のインスタンスが少なくなるため、ユーザーがゼロから再認証する必要が少なくなります。
- 同様に、各クライアントはもう一方の許可の恩恵を受けることができるので、ユーザーはあまり頻繁に追加の許可を承認する必要はありません。
「原点」の違いをデバッガで指摘してくれてありがとう。私たちはまた、この古いFBバグレポートを「設計通りに」解決しました。https://developers.facebook.com/bugs/237660982956939 – Yetanotherjosh
私が言ったように、クライアント用のサーバー用に2つの異なるトークンを使用します。サーバとウェブ/アンドロイドのクライアントと同じです。サーバー/クライアント間でトークンを同期させる必要がないため、作業が簡単になります。 –