11

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、有効性に関する信頼できないデータ ポイントになる可能性があるため、これは信頼できません。

4

2 に答える 2

16

概要

Facebook が達成しようとしていることの根本は、アプリがユーザーのアカウントに永続的にアクセスできないようにすることだと私は信じています。そのため、新しい移行では、ユーザーが再度サインインしない限り、アプリは 60 日間しかアカウントにアクセスできません。

私は Facebook で働いていませんが、Facebook グラフ API をいじってみた結果を以下に示します。

一般的な解決策

  1. ユーザーがサインインするたびに、アクセストークンを取得し、すぐに拡張/更新して保存します
  2. アクセストークンの有効期限を記録する
  3. アクセス トークンの有効期限が切れた場合 (記録された日付から、またはそのように通知する Graph API 例外から)、アクセス権がないことをユーザーに通知し、再度サインインするように依頼します。

回答

A. 最新の Facebook iOS SDK を介して認証する場合、取得するアクセス トークンのデフォルトの有効期間はどれくらいですか? このドキュメントには、拡張トークン リクエストにより 60 日間有効なトークンが提供されると記載されています。この他のドキュメントでは、最初のアクセス トークン リクエストについて説明し、さまざまな有効性について言及していますが、明確ではなく、特定の有効期間について説明しています。

仕組みは次のとおりです。

  1. 最初のサインインでは、約 2 時間使用できます
  2. アクセス トークンを更新することで、最大 60 日間取得できます
  3. ユーザーが 60 日間サインインしない場合、サインインせずにそれ以上アクセスする方法はありません。
  4. ユーザーがアプリの認証を解除すると、その 60 日間のウィンドウはすぐに終了し、アクセスできなくなります。

B. クライアントにとっては、アクセス トークンが必ずしも長寿命であるとは限らないため、これが適切なアプローチです。FB を介してログインを使用し、アクセス トークンの有効期限が切れるたびに検出します。そうであれば、FB iOS SDK を呼び出して再認証/再承認しますか? (これにより、ユーザーは FB iOS アプリにバウンスするだけで、ほとんどの場合、新しいアクセス トークンを使用してすぐにアプリに戻ります)。

ユーザーのアクセストークンの有効期限が切れている場合、唯一のオプションは、話しているようにログインループを通過させることです。

C. 私が見つけたこのブログ投稿によると、アクセス トークンを拡張できるのは 1 回だけです。クライアントでは、質問 B で述べたように、再認証/再承認を促すことでこれを処理できます。しかし、これは私たちのサーバーでは機能しません。サーバーに 1 回から 60 日に更新させることもできますが、61 日目にはどうなるでしょうか。サーバーが友達のリストを同期できなくなっただけですか?

アクセス トークンを拡張できるのは 1 回だけです。61日目、あなたは不運です。ユーザーに通知し、サインインしないと何もできないことを知らせてください。

D. アプリが起動するたび、またはスリープから再水和するたびに、FB アクセス トークンの有効性を確認することは理にかなっているように思われます。iOS アプリがこれを確認する最善の方法は何ですか? トークンを検証するために呼び出す推奨エンドポイントはありますか? https://graph.facebook.com/meを呼び出してアクセス トークンを渡し、応答を確認するだけでよいのでしょうか。

Debug Consoleに相当する API が見つかりません。この FB ブログ記事では、無効化されたアクセス トークンについて説明していますが、特に API をテストするための API メソッドについては言及していません。

ヒットするというあなたの提案はhttps://graph.facebook.com/me うまくいきますが、まさに彼らの例で推奨されているものです。実際、アクセス トークンをチェックするプロアクティブな方法として、このアプローチをアプリで使用することがあります。

Tid Bits

  • アクセス トークンを「更新」すると、新しいアクセス トークンが返されます。応答は次のようになります。access_token=TOKEN&expires=5183912
  • アクセス トークンを「更新」できるのは 1 回だけです。以前の呼び出しから返された有効期間の長いトークンを "更新" しようとすると、同じトークンが返されますが、トークンの有効期限が切れていない限り、例外はスローされません。(つまり、安全にトークンの更新を試みることができます)
  • デフォルトのアクセス トークンの長さは約 2 時間のようです
  • アクセス トークンを「更新」すると、その新しいアクセス トークンは、後で facebook API から取得するものと思われます (元の短命のアクセス トークンを返すのではなく)。

また、試してみたい場合は、これらのツールを使用すると、コードに埋め込む前にブラウザーでユース ケースを簡単にテストできます。

于 2012-04-15T00:15:03.330 に答える
0

素晴らしい答えです。重要な追加事項が 1 つあります。デフォルトのトークンは 1 時間から 2 時間持続します。ユーザーがサインアップした残りの 1 時間に加えて、1 時間分を取得します。たとえば、ユーザーが午後 3 時 45 分にサインアップした場合、アクセス トークンは午後 5 時に期限切れになります。安全を期すために、開発者は 1 時間しか続かないと想定する必要があります。

于 2012-04-30T17:53:10.813 に答える