私のアプリは複数のユーザーによって使用されます。
サファリがユーザーの資格情報を保存せず、誰かがログインしようとするたびにログインページをスローしないように、Facebook を統合するにはどうすればよいですか。
私はすでに FBSessionLoginBehaviorForcingWebView を使用してアプリ内で Web ビューのログインを強制しましたが、最初のユーザーがアプリ内に表示されたビューを介して fb にログインしようとすると、コントロールは認証のためにサファリに移動し、資格情報を保存するだけです。
そのため、他のユーザーがログインを試み、アプリのローカル UIWebView に資格情報を入力すると、コントロールは再びサファリに移動します。これには、以前の資格情報が既に保存されており、新しいユーザーは認証できません。
したがって、基本的に最初のユーザーは永続的にログインします。Web ビューの Cookie をクリアしても機能しません。サファリのためにそれらをクリアできません。
事前に感謝します。
これは私がやっていることです
if([FBSession activeSession].isOpen)
{
[[FBSession activeSession] closeAndClearTokenInformation];//Also, clearing all the local cookies
}
else
{
AppDelegate *delegate = [UIApplication sharedApplication].delegate;
delegate.session = [[FBSession alloc] init];
[FBSession setActiveSession:delegate.session];
[delegate.session openWithBehavior:FBSessionLoginBehaviorForcingWebView completionHandler:^(FBSession *session1, FBSessionState status, NSError *error) {
if (!error) {
[self openSession]; // your method
}
}];
}
- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error{
switch (state) {
case FBSessionStateOpen:
{
[FBRequestConnection startForPostStatusUpdate:@"Some message"completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (!error) {
//logout again
NSLog(@"startForPostStatusUpdate SUCESS");
}
else {
//logout again
NSLog(@"startForPostStatusUpdate FAIL");
}
}];
}
break;
case FBSessionStateClosed:
{
NSLog(@"FBSessionStateClosed");
}
break;
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
if (error) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}
}
また、アプリのデリゲートをメソッドで変更しました。