私が見る限り、あなたはこれを実際に意図されているよりもはるかに複雑にしています。Facebook iOS SDKを活用すると、アプリ内でのユーザーの認証に伴う手間のかかる作業はすべてFacebookSDKによって処理されます。Facebook SDK全体の利便性がなければ、サインインシートを個別に提供したり、アプリのローカルストレージとFacebookのサーバー間のアクセストークン交換を管理したりする必要はありません。
このリンクは、iOSアプリ内でSSOをネイティブに実装する方法を示しています。とても簡単です。
http://developers.facebook.com/docs/mobile/ios/build/#implementsso
次に、認証情報または中央ユーザーデータベース情報を外部サーバーに保持していることを理解しました。FBクライアントと独自のサーバー間で情報を同期する最良の方法は、受信後にFBSDKからサーバーに返されたログイン情報を確認することです。
簡単な内訳は次のとおりです。
Facebookの標準SDKを使用してユーザーをログインします(上記のリンクを参照)。
この-didLogin
方法(またはAdobe AIR環境にある同等の方法)で、FBから返されたアクセストークンをサーバーで確認します。使用しているサーバーアーキテクチャはわかりませんが、これはFBSDKの外部で行われると言っても過言ではありません。また、ユーザーが次回ログインする必要がないように、アクセストークンをアプリのユーザーデフォルトに保存します。このプロセス全体は、思ったよりもはるかに速く感じるはずです(そして本質的にそうなるでしょう)。
サーバーでのチェックが正常に戻った場合は、ログインが成功したことをユーザーに通知します。そうでない場合は、ユーザーが拒否された/ログインされなかった理由を説明するエラービューを表示します。
なぜこのようにするのですか?理由はかなり単純です。ユーザーがFacebook経由でアプリにログインする理由は、ユーザーのFacebook情報(フィード、写真、いいね、コメントなど)をリクエストできるようにするためであると考えて間違いありません。これを行う最も簡単な(そして最良の)方法は、FBSDK自体を使用することです。SDKは、時間の経過に伴うアクセストークンの検証、トークンの有効期間の延長、トークンの有効性など、バックグラウンドで多くの処理を行います。このように、変更が行われたときにサーバー情報とリアルタイムクライアント情報を同期することについてほとんど心配する必要はありません。FB iOS SDKを介して認証し、その後、残りの独自の処理を実行するだけです。
明確にしなければならないことがある場合、または質問の要点を完全に見逃した場合でも、以下にコメントしてください。私はロールに乗る傾向があり、要点から外れる可能性があります。:)
乾杯!クラーケン