iPhone 4 和模拟器上的 Facebook 登录失败

Posted

技术标签:

【中文标题】iPhone 4 和模拟器上的 Facebook 登录失败【英文标题】:Facebook login fails on iPhone 4 and Emulator 【发布时间】:2013-05-27 20:06:35 【问题描述】:

我使用 Facebook SDK 3.5.1 将 facebook 集成到我的 ios 应用程序中。

当我在 iPhone 5(iOS 6.1.2 没有越狱)上运行它时,一切正常。

当我在我父亲的 iPhone 4(iOS 6.1.4 没有越狱)上运行它时,会出现一些问题。 当我按下登录按钮时,应用程序会显示警报“AppName 想要访问您的基本信息和朋友列表”,当我按下确定时,什么也没有发生(在我的 iPhone 5 上,它在此警报后登录)。当我再次按下登录按钮时,会弹出相同的警报,然后一切重新开始。

在我的模拟器 (iOS 6.1) 中,我遇到了完全相同的问题。如果我在模拟器的设置中禁用 facebook 登录,它会显示一个带有登录字段而不是警报框的弹出窗口。

在这种情况下,我的模拟器会记录以下内容: FBSDKLog: 无法使用 Facebook 应用或 Safari 授权,BLOCKED_OUT 未注册为 URL Scheme

我了解到这可能是因为模拟器上没有安装 facebook 应用程序。但即使使用这种登录方式,它也不起作用。

我在 facebook 上使用了与此页面完全相同的代码: https://developers.facebook.com/ios/login-ui-control/

FBLoginView *loginView = [[FBLoginView alloc] init];

    loginView.delegate = self;
    // Align the button in the center horizontally
    loginView.frame = CGRectMake((self.view.center.x - (loginView.frame.size.width / 2)), 150, loginView.frame.size.width, loginView.frame.size.height);
    [self.view addSubview:loginView];
    [loginView sizeToFit];

谁能帮帮我?

更新:

我实现了以下方法,在我按下登录按钮并授予我的应用访问权限后,它告诉我用户取消登录。

- (void)loginView:(FBLoginView *)loginView 
        handleError:(NSError *)error 
    NSString *alertMessage, *alertTitle;
    if (error.fberrorShouldNotifyUser) 
        // If the SDK has a message for the user, surface it. This conveniently
        // handles cases like password change or iOS6 app slider state.
        alertTitle = @"Facebook Error";
        alertMessage = error.fberrorUserMessage;
     else if (error.fberrorCategory == FBErrorCategoryAuthenticationReopenSession) 
        // It is important to handle session closures since they can happen 
        // outside of the app. You can inspect the error for more context 
        // but this sample generically notifies the user.
        alertTitle = @"Session Error";
        alertMessage = @"Your current session is no longer valid. Please log in again.";
     else if (error.fberrorCategory == FBErrorCategoryUserCancelled) 
        // The user has cancelled a login. You can inspect the error
        // for more context. For this sample, we will simply ignore it.
        NSLog(@"user cancelled login");
     else 
        // For simplicity, this sample treats other errors blindly.
        alertTitle  = @"Unknown Error";
        alertMessage = @"Error. Please try again later.";
        NSLog(@"Unexpected error:%@", error);
    

    if (alertMessage) 
        [[[UIAlertView alloc] initWithTitle:alertTitle
                                    message:alertMessage
                                   delegate:nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil] show];
    

【问题讨论】:

【参考方案1】:

除了基本登录之外,您是否还要求其他权限?

我在尝试请求 publish_actions 权限时遇到了类似的问题。一旦我删除了这个权限,它又开始工作了。

此外,在 iPhone 本身上,如果您在 iPhone 上安装了 Facebook 应用程序,请确保您的应用程序允许使用它进行连接。转到设置 > Facebook 并确保您的应用已启用登录。

另外,请确保应用程序未处于“沙盒”模式。如果您处于沙盒模式,请创建一个测试用户帐户来测试应用程序。

【讨论】:

嘿,谢谢你的答案。我没有自己定义权限,因为在我的 iPhone 5 上测试时没有必要。我可以尝试手动定义它们。我使用它的唯一目的是获取朋友列表并登录以接收我自己的用户 ID。 嗨,我尝试手动定义它们,但仍然是同样的问题,有什么想法吗? 如果您在 iPhone 上安装了 Facebook 应用程序,请确保允许您的应用程序使用它进行连接。转到设置 > Facebook 并确保您的应用已启用登录。 我使用不同的 facebook 用户登录,因此我必须授予该用户使用我的应用程序的权限,因为它是一个开发应用程序。 嗨,Jasper,这很有帮助——也许你可以把它作为答案放在某个地方,否则像我这样的人必须通读所有这些 cmets,并且可能会因为问题出现而离开缺少一个成功的答案!

以上是关于iPhone 4 和模拟器上的 Facebook 登录失败的主要内容,如果未能解决你的问题,请参考以下文章

Facebook SDK 3.6 for iOS 设备上的错误 2

facebook url 方案是不是适用于 iPhone 模拟器

facebook 邀请示例可以运行模拟器但不能运行 iPhone 设备

如何生成iPhone模拟器构建或.zip文件,以便在Facebook中提交以供iOS审核

如何在 OS X 上的 iPhone 4 模拟器中测试我的应用程序?

如何在 Facebook 上的 iPhone 应用程序中分享我的页面内容?