Facebook SDK IOS登录问题

Posted

技术标签:

【中文标题】Facebook SDK IOS登录问题【英文标题】:Facebook SDK IOS login issue 【发布时间】:2012-07-02 11:07:14 【问题描述】:

我已按照说明从我的应用程序实现登录 Facebook 的流程:

https://developers.facebook.com/docs/mobile/ios/build/#implementsso

这是我的代码:

- (IBAction)facebookButton:(id)sender 

    facebook = [[Facebook alloc] initWithAppId:@"383032031757454" andDelegate:self];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
        && [defaults objectForKey:@"FBExpirationDateKey"]) 
        facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
    

    if (![facebook isSessionValid]) 
        NSArray *permissions = [[NSArray alloc] initWithObjects:
                                @"user_likes", 
                                @"read_stream",
                                nil];
        [facebook authorize:permissions];
        permissions=nil;
        


- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
    return [facebook handleOpenURL:url]; 


- (void)fbDidLogin 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];


登录并允许应用程序权限后,Safari 仍处于打开状态,我必须手动返回我的应用程序,但 SDK 提供的示例应用程序“Hackbook”在接受权限并在 Safari 中登录后,它会关闭 Safari 并返回回到应用程序。我也想这样做,但没有成功。

这是 .plist 文件:

谢谢

【问题讨论】:

【参考方案1】:

您是否在 iOS 应用的 info.plist 文件中设置了您的 Facebook 应用 ID?

this link 和 this link 也有类似情况。 希望对您有所帮助。

【讨论】:

谢谢!我修改了 .plist 文件,但 Safari 返回相同的错误。我已上传 .plist 文件值。 再次尝试删除应用并清理构建。【参考方案2】:

您可以通过深入了解Facebook.m 轻松确定为什么它不起作用。检查Facebook.m中的方法handleOpenURL:

    // Facebook.m
- (BOOL)handleOpenURL:(NSURL *)url 
    // If the URL's structure doesn't match the structure used for Facebook authorization, abort.
    if (![[url absoluteString] hasPrefix:[self getOwnBaseUrl]]) 
        return NO;
    

    NSString *query = [url fragment];

    // Version 3.2.3 of the Facebook app encodes the parameters in the query but
    // version 3.3 and above encode the parameters in the fragment. To support
    // both versions of the Facebook app, we try to parse the query if
    // the fragment is missing.
    if (!query) 
        query = [url query];
    

    NSDictionary *params = [self parseURLParams:query];

NSDictionary *params = [self parseURLParams:query];下方设置断点并读取其内容。您应该会看到为什么登录失败的错误消息。

【讨论】:

您好,按照说明编译 ARC 版本的库后,生成的文件夹仅包含 .h 文件,我有点不知道 .m 文件在哪里。谢谢。【参考方案3】:

在应用 Facebook 页面上,您是否为 iOS SSO 配置了应用?

您使用的是什么操作系统?您的代码仅适用于 4.2+

您没有完全按照说明进行操作,您的 plist 文件略有错误(我认为这不是问题)。

【讨论】:

我用的是5.0,所以我觉得应该没问题。我以前的 plist 版本与 Facebook 指示的完全相同,但它也不起作用。谢谢。

以上是关于Facebook SDK IOS登录问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS:通过自动登录获取 Facebook 访问令牌

Facebook 登录“异常抛出”错误通过 iOS 上的 React Native

Facebook SDK IOS登录问题

iOS Facebook SDK:哪个登录系统更好?

Facebook SDK for iOS 处理登录

Facebook iOS SDK 登录原生和 UIWebView 登录