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登录问题的主要内容,如果未能解决你的问题,请参考以下文章