現在、ユーザーがアプリケーションの設定ビューコントローラー内から Facebook アカウントを接続/切断できるようにする iOS アプリケーションを作成しています。Facebook の SDK 開発者向けドキュメントでは、FBSession.activeSession クラスで「closeAndClearTokenInformation」メソッドを呼び出すことを推奨しています。このメソッドは、ドキュメントによると、「メモリ内セッションを閉じ、セッションに関連する永続的なキャッシュをすべてクリアします」。
この問題を調査したところ、複数の人が Facebook の SDK で同じ不一致を経験していることに気付きました。具体的には、activeSession を「閉じてクリア」した後、新しいセッションを開くと、アプリケーションは iphone のブラウザー (高速切り替え) にジャンプしますが、ユーザーに Facebook の資格情報でログインするように求めません。代わりに、「ユーザーはこのアプリケーションで既に承認されており、続行するには [OK] を押す必要がある」という通知がユーザーに表示されます。
以前のセッションからセッション情報を消去したため、Facebook の SDK がユーザーにメール/電話番号とパスワードをもう一度入力するように求めることを期待していました。また、これで問題が解決することを期待して、セッションを「クリアして閉じる」と同時に、ユーザー デフォルトからすべてのトークン情報を削除しましたが、この問題は解決しません。
Facebookセッション情報をクリアしようとしている方法は次のとおりです。
[[FBSession activeSession] closeAndClearTokenInformation];
[[FBSession activeSession] close];
[FBSession setActiveSession:nil];
NSLog(@"The active facebook session: %@", [[FBSession activeSession] description]);
これは、出力コンソールに表示されるものです。
2013-04-01 17:07:11.759 RoyalCourt Debug[4728:c07] The active facebook session:
<FBSession: 0xb86e060, state: FBSessionStateCreated, loginHandler: 0x0, appID:
164860420329245, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy:
0xb864650>, expirationDate: (null), refreshDate: (null),
attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:()>
私が知りたいのですが:
- 以前のセッション情報はどこに保存されていますか? また、それを削除するにはどうすればよいですか?
- [[FBSession activeSession] closeAndClearTokenInformation] メソッドを呼び出した後、SDK がキャッシュされたすべてのセッション データを実際に消去しないのはなぜですか? 以前の Facebook セッション情報をすべて完全に削除するために必要な追加の手順はありますか?