1

我最近在我的应用程序中添加了 Facebook 集成,除了用户重新启动应用程序外,一切正常。每次重新启动应用程序时,Facebook 都必须返回其授权过程。这涉及将应用程序切换到 Safari/Facebook,然后再切换回我的应用程序。我怎样才能让 Facebook 保存信息,或者能够获得我的应用程序的一揽子权限,这样我就不会经常重新授权?

这是我的applicationDidFinishLaunchingWithOptions:方法代码:

facebook = [[Facebook alloc] initWithAppId:@"203604286395694" 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]) {
    [facebook authorize:nil];
}

相关 Facebook 委托方法:

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

}

- (void) requestDialogButtonClicked {
    NSMutableDictionary* params = 
    [NSMutableDictionary dictionaryWithObjectsAndKeys:
     @"invites you to check out cool stuff",  @"message",
     @"Check this out", @"notification_text",
     nil];  
    [facebook dialog:@"apprequests"
           andParams:params
         andDelegate:self];
}

- (void)dialogDidComplete:(FBDialog *)dialog {
    NSLog(@"dialog completed successfully");
}
4

2 回答 2

0

您是在调用 Facebook 授权:某处吗?这就是触发 fbDidLogin 的方式。假设您是,该行为表明令牌或日期(或两者)为零,或者日期已过期(不太可能)。

在写入和读取用户默认值时记录值。我的猜测是授权要么没有被调用,要么失败(由于应用程序密钥或代码中未显示的其他问题),导致 fbDidLogin 方法未调用或保存 nil 值。

于 2012-04-14T19:10:47.940 回答
0

那是因为您在授权应用程序时没有请求权限..“offline_access”提供长期访问令牌,因此您无需在每次用户想要使用 Facebook 时获取新的访问令牌..所以您需要什么像这样授权您的应用

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

编辑: 请在您的实施中检查以下内容:

1.您需要在您的应用程序委托中添加以下功能(这里的Facebook对象是您的FaceBook Class的实例值)。

// Pre 4.2 support
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{
   return [facebook handleOpenURL:url]; 
}

// For 4.2+ support
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
   return [facebook handleOpenURL:url]; 
}

2.在您的 info.plist 添加到 URL 类型 > URL 方案 > 您的 Facebook 应用程序 ID 和 fb 前缀(最后您的值将是这样的,例如 fb313714***)。

于 2012-04-14T20:55:23.303 回答