0

わかりました。私のアプリの多くのユーザーが経験しているように見えるこの問題が発生していないため、これをデバッグするのは困難でした。自分で試してみたい場合は、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;
    }
}
4

1 に答える 1

0
if (self.session.state != FBSessionStateCreated) {
        // Create a new, logged out session.
        [self openSession];
    }
 else{
    [FBSession setActiveSession:self.session];
    [self sessionStateChanged:session state:state error:error];
 }

openActiveSessionWithReadPermissions ブロックでこのコードを試してください

于 2013-10-18T05:40:58.063 に答える