このテキストはコメントに収まらないため、@OwenHartnettの回答について詳しく説明します。これが私がFacebookのSDKが機能するのを見た方法です。Facebook iOS SDKを唯一のログインメカニズムとして使用するアプリを作成する場合、その動作は次のようになります。
私のアプリデリゲートのdidFinishLaunchingWithOptions
方法では、最初に「すでにファイルにある」アクセストークンをチェックしますNSUserDefaults
。見つからない場合は、取得する必要があるため、アプリデリゲートにモーダルログインフローをすぐに起動させます。このフローは、有効なアクセストークンで終了し、NSUserDefaults
次のアプリを開くときに使用するために保存されます。
にファイルにアクセストークンが既にある場合はdidFinishLaunchingWithOptions
、ハッピーパスを想定し、アプリを開いたときにファイルにあるアクセストークンを使用して、非同期で「ログインユーザーセッション」を開きます。セッションを開くためにファイルにあるアクセストークンが正当なものである場合、UXは表示されません。私がファイルに持っているアクセストークンが不正なアクセストークンである場合(たとえば、サーバーが古すぎると言っている場合)、アプリデリゲートのopen sessionメソッドは、これを見つけると、適切なモーダルログインフローを表示します。
このopenSessionメソッドは非同期で実行されるため、ログインしているユーザーを必要とするルートビューコントローラーがその間にどのように機能するのか疑問に思われるかもしれません。
答えは、ログインしているユーザーがいるかのように書く必要があるということです。想定する必要があります。有効なアクセストークンがないために実行できない、または正常に実行を終了できないコードを実行した場合、そのコードがまだ表示されていない場合は、そのコードがログインUIをトリガーする必要があります(つまり、この時点でアプリが開いているときにアクセストークンをチェックします) 、すでにモーダルログインUIをユーザーに提示しています)。
最後に、これはFacebookSDKログインフローの翻訳版です。たとえば、SDKのみを使用する場合、NSUserDefaults
私が提案するようにインターフェースをとることはありません。それらのフローを、リモートAPIにログインする「カスタム実装」に変換しました。