アプリに Facebook を統合したいと考えています。この時点で、ログイン、フレンド ウォールへの投稿、フレンド リストの取得などを行うことができました。1 つのことを除いてすべて問題ありません...
ユーザーがFacebook 設定/アプリケーションからアプリを削除してから iOS アプリに入ると、コードは Facebook アプリがユーザー設定から削除されたことを認識せず、ログインしていると想定します (これは問題です。ユーザーが友達のウォールに投稿しようとしても、アプリは何もしません)。
その後、ユーザーは iOS アプリを閉じて再起動します。この再起動により、iOS アプリは「修正」され、ユーザーがログインしていないことが検出されます。
ログインフローをユーザーにもたらすために、ユーザーがFacebookアプリを設定から削除した直後の瞬間を検出することができません...
これが私のコードです:
アプリの最初のシーンで...
if([FBSession activeSession].state == FBSessionStateCreatedTokenLoaded)
{
NSLog(@"Logged in to Facebook");
[self openFacebookSession];
UIAlertView *alertDialog;
alertDialog = [[UIAlertView alloc] initWithTitle:@"Facebook" message:@"You're already logged in to Facebook" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alertDialog show];
[alertDialog release];
return YES;
}
else{
NSLog(@"Not logged in to Facebook"); //Show the login flow
return NO;
}
openFacebookSession のコードは次のとおりです。
-(void)openFacebookSession
{
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"publish_stream",
nil];
[FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
[self sessionStateChanged:session state:status error:error];
}];
}
sessionStateChanged のコード...
-(void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen: {
NSLog(@"Session opened");
}
break;
case FBSessionStateClosed:
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];
}
}
どうもありがとうございました!