1

中央ユーザーと多くのゲストユーザーがいるiOSアプリでの作業。ゲストユーザーが中央ユーザーからログアウトせずにアプリでFacebookアカウントにログインできるようにしたいと思います。FBSessionLoginBehaviorForcingWebViewを使用して新しいFBSessionを設定し、独自のトークンキャッシュ戦略(トークンは実際にはまったくキャッシュされない)を設定しようとしましたが、デフォルトのアプリユーザーの資格情報を使用し、ログインWebを表示しませんビューウィンドウ。

FB iOS sdkのドキュメントによると、動作をFBSessionLoginBehaviorForcingWebViewに設定すると、ユーザーが資格情報を入力する必要がある場所をWebビューに強制的に表示することになっていますが、私のアプリでは、現在ログインしている中央ユーザーを自動承認するだけです。

FBが提供するSwitchUsersサンプルからこのコードの多くをコピーしましたが、ゲストユーザーの数に上限があるため、「スロット」を削除しただけです。これは問題の一部ですか?

FBSessionLoginBehavior behavior = FBSessionLoginBehaviorForcingWebView;
FacebookCustomerTokenCachingStrategy *tokenCachingStrategy = [[FacebookCustomerTokenCachingStrategy alloc] init];
self.session = [[FBSession alloc] initWithAppID:nil
                                    permissions:nil
                                urlSchemeSuffix:nil
                             tokenCacheStrategy:tokenCachingStrategy];

[self.session openWithBehavior:behavior
             completionHandler:^(FBSession *session,
                                 FBSessionState status,
                                 NSError *error) {                     
                 //do whatever                   
             }];
4

2 に答える 2

1

解決策を見つけました。基本的に、次のように呼び出します。

[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:nil];

ローカル FB セッション情報のみをクリアし、Safari Cookie はクリアしません。そのため、ユーザーにログインした後、Safari の Cookie をクリアします。

NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) {
    [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];

あまりエレガントではありませんが、機能します。これで、次のユーザーがログインしようとすると、資格情報の入力が強制されます。

于 2013-01-30T05:31:57.607 に答える
0

登録したFacebookアカウントのアカウント設定をクリックしてから、アプリをクリックして、承認されたアプリケーションを削除してみましたか?

編集

私もこれを行ういくつかのアプリを知っていますが、個人的にはそれを行う方法がわかりません. 私の意見では、アプリは Facebook セッションにアプリの自動ログアウトを強制する必要があると思います。ユーザーのFacebookアカウントがログインしているかどうかを検出する方法があるので、逆の方法もあるはずだと思います、申し訳ありません

于 2013-01-25T16:23:44.660 に答える