わかりました。私のアプリの多くのユーザーが経験しているように見えるこの問題が発生していないため、これをデバッグするのは困難でした。自分で試してみたい場合は、iTunes で「syncquik」を検索してアプリをダウンロードできます。
問題:ユーザーが Facebook のログイン ボタンを使用してアプリにログインしようとすると、アクティブな FB セッションを開く最初の試みが失敗することがよくあります。最初は、iPhone の一般設定でアプリの Facebook プライバシー設定をオンにする必要があるためだと思いました。しかし、非常に多くの人が同じ問題を抱えているため、コードのエラーが原因なのか疑問に思い始めています (以下を参照)。デモの例と Facebook の指示に従いましたが、何か見落としていたのではないでしょうか? あなたが提供できる助けを前もってありがとう!
コード:
(ViewController で FB ボタンを押した状態):
- (IBAction)fbSignIn:(id)sender
{
AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate openSession];
}
(AppDelegate.m 内):
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
NSLog(@"FB Session State Changed");
switch (state) {
case FBSessionStateOpen: {
NSLog(@"FBSessionStateOpen");
if (fbButtonPushed && FBSession.activeSession.isOpen) {
[self sendUserFbInfo];
fbButtonPushed = NO;
}
}
break;
case FBSessionStateClosed:
NSLog(@"FBSessionStateClosed");
break;
case FBSessionStateClosedLoginFailed:
NSLog(@"FBSessionStateClosedLoginFailed");
[FBSession.activeSession closeAndClearTokenInformation];
[self showLoginView];
break;
default:
break;
}
if (error) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Please Try Again" message:@"If second attempt is unsuccessful, then set SyncQuik to ON in Settings > Facebook." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[[NSNotificationCenter defaultCenter] postNotificationName:@"com.syncquik.connectionrequest.complete" object:nil];
}
}
- (void)openSession
{
NSLog(@"Opening a User's FB Session");
fbButtonPushed = YES;
NSArray *permissons = [[NSArray alloc] initWithObjects:@"email", nil];
[FBSession openActiveSessionWithReadPermissions:permissons
allowLoginUI:YES
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
return [FBSession.activeSession handleOpenURL:url];
}
- (void)showLoginView
{
NSLog(@"Show Login View");
//Anything else need to be placed here?
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[FBSession.activeSession handleDidBecomeActive];
if (fbButtonPushed && FBSession.activeSession.isOpen) {
[self sendUserFbInfo];
fbButtonPushed = NO;
}
}