Facebook によるパーミッションの廃止は2012 年 5 月に予定されており、ドキュメントにはその処理方法に関する十分な情報がありません。offline_access
iOS アプリとそれに対応するサービスがあり、それを強化し、Facebook と深く統合して、アプリ内でユーザーの友達リストを活用します (したがって、FB の友達もアプリを使用している場合は、より簡単に接続できます)。これは、すべてのソーシャル アプリが機能しているように見えるため、ここでは特別なことはありません。
クライアント
私たちのアプリはFacebook iOS SDKを使用して、ユーザーがログインできるようにしますoffline_access
。トークンは iOS アプリに保存されますが、保存先のサーバーにも送信されます。クライアントは、ユーザーの代わりにユーザーのニュースフィードに更新を投稿します (publish_stream
許可も求めます)。
サーバ
私たちのサーバーは、ユーザーの FB の友達が現在私たちのアプリを使用しているかどうかを定期的にチェックします。次回ユーザーがサインインすると、特定の方法でコンテンツと関係を公開し、そのユーザーの友達を宣伝します。また、サーバーはユーザーに代わってグラフ API に定期的に接続し、ユーザーの現在のフレンド リストを取得します。これは、ユーザーの関係の変化を説明し、アプリに反映させることができるようにするためです。これは、ユーザーが現在アプリを使用していないときに行うため、次に使用するときに最高のエクスペリエンスが得られます。これを有効にするために、iOS アプリはアクセス トークンをサーバーに送信しますoffline_access
。
注:ユーザーがアプリから明示的にサインアウトすると、クライアントとサーバーの両方からアクセス トークンが削除されます。
問題
使用できる永久アクセス トークンがなくなったので、アクセス トークンを処理および拡張する facebook の新しい意図された方法を活用しながら、シナリオを引き続き有効にするためのベスト プラクティスを見つけようとしています。残念ながら、ドキュメントは完全には役に立ちません。
質問
A.最新の Facebook iOS SDK を介して認証する場合、取得するアクセス トークンのデフォルトの有効期間はどれくらいですか? このドキュメントには、拡張トークン リクエストにより 60 日間有効なトークンが提供されると記載されています。この他のドキュメントでは、最初のアクセス トークン リクエストについて説明し、さまざまな有効性について言及していますが、明確ではなく、特定の有効期間について説明しています。
(強調は私です)
Facebook からアクセス トークンを取得すると、すぐに有効になり、Facebook によって定義された一定期間、API へのリクエストで使用できます。その期間が経過すると、アクセス トークンの有効期限が切れたと見なされ、アプリが新しいアクセス トークンを取得するには、ユーザーを再度認証する必要があります。特定のアクセス トークンが有効な期間は、それがどのように生成されたかによって異なります。
また、予想される有効期限の前にアクセス トークンが無効になる可能性があるイベントもあります。このようなイベントには、ユーザーがパスワードを変更したり、アプリケーションが App Secret を更新したりすることが含まれます。さまざまなアクセス トークンの有効期限に対処し、予想される有効期限の前にアクセス トークンが無効になった場合に対処することは、堅牢なソーシャル エクスペリエンスを構築するために不可欠です。
B.クライアントにとって、アクセス トークンが必ずしも長寿命であるとは限らないため、次のことを行うための適切なアプローチは次のとおりです。
FB 経由でログインして、アクセス トークンの有効期限が切れていることを検出します。そうであれば、FB iOS SDK を呼び出して再認証/再承認しますか? (これにより、ユーザーは FB iOS アプリにバウンスするだけで、ほとんどの場合、新しいアクセス トークンを使用してすぐにアプリに戻ります)。
C.私が見つけたこのブログ投稿によると、アクセス トークンを拡張できるのは 1 回だけです。
60 日アクセス トークンを新しい 60 日アクセス トークンに交換できますか?
いいえ、できません。有効な (現在の) ユーザー アクセス トークンのみを拡張トークンと交換できます。すでに拡張されているアクセス トークンを拡張することはできません。
クライアントでは、質問 B で述べたように、再認証/再承認を促すことでこれを処理できます。しかし、これは私たちのサーバーでは機能しません。サーバーに 1 回から 60 日に更新させることもできますが、61 日目にはどうなるでしょうか。サーバーが友達のリストを同期できなくなっただけですか?
D.アプリが起動するたび、またはスリープから再水和するたびに、FB アクセス トークンの有効性を確認することは理にかなっているように思われます。iOS アプリがこれを確認する最善の方法は何ですか? トークンを検証するために呼び出す推奨エンドポイントはありますか? https://graph.facebook.com/me
アクセス トークンを渡して応答を確認するように呼び出す必要がありますか?
注:expires
最初に拡張されたトークンを取得した時刻を確かに記録できますが、ユーザーはアプリの許可をいつでも取り消すことができexpires
、有効性に関する信頼できないデータ ポイントになる可能性があるため、これは信頼できません。