我最近在我的应用程序中添加了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");
}
答案 0 :(得分:0)
在写入和读取用户默认值时记录值。我的猜测是授权要么未被调用,要么失败(由于app键或代码中未显示的其他问题),使得fbDidLogin方法无法调用或保存nil值。
答案 1 :(得分: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类的实例值)。
// 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中添加网址类型>网址方案>你的Facebook应用程序ID带有fb前缀(最后你的值将是这样的,例如fb313714 ***)。