1

我已按照说明从我的应用程序实现登录到 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 文件:

在此处输入图像描述

谢谢

4

3 回答 3

1

您是否在info.plistiOS 应用程序的文件中设置了您的 Facebook 应用程序 ID?

类似的案例在这个链接这个链接。希望这对您有所帮助。

于 2012-07-02T11:24:46.800 回答
1

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

    // 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];并读取它的内容。您应该会看到为什么登录失败的错误消息。

于 2012-07-02T12:36:58.393 回答
0

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

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

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

于 2012-07-02T12:15:30.577 回答