嗨,我使用最新的facebook api和SSO,并在我的viewController中实现如下所示(如果有任何区别,不在appDelegate中,如示例中所示): 在我的.h文件中
Facebook *facebook;
@property (nonatomic,retain) Facebook *facebook;
在我的.m文件中,我在viewDidLoad
中执行以下操作self.facebook = [[Facebook alloc] initWithAppId:@"myappID"];
我用另一种方法
if (![facebook isSessionValid]) {
NSArray *permissions = [[NSArray arrayWithObjects:@"publish_stream",nil] retain];
[facebook authorize:permissions delegate:self];
}
但似乎isSessionValid总是没有 我不知道为什么! 有谁知道为什么? 哦,还有expirationDate和accessTokken都是零
答案 0 :(得分:4)
昨天我遇到了同样的问题,看来你必须坚持并自己恢复访问令牌/到期日期。
在viewDidLoad中:
// Restore previously saved Facebook credentials (If any)
facebook.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"FBAccessToken"];
facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"FBExpirationDate"];
// Trigger SSO Facebook authentication if required
if ([facebook isSessionValid] == NO) {
[facebook authorize:nil delegate:self];
} else {
[self fbDidLogin];
}
然后在fbDidLogin委托中:
- (void)fbDidLogin
{ //保存用户访问令牌和到期日期,以便我们以后恢复 //这样我们就可以避免对Facebook进行不必要的身份验证。
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.accessToken forKey:@"FBAccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.expirationDate forKey:@"FBExpirationDate"];
// User has logged in to Facebook, now get their userId from Facebook
[facebook requestWithGraphPath:@"me" andDelegate:self];
}
所以现在用户必须登录/授权您的应用程序,从那时起,他们的会话将一直有效,直到他们退出Facebook。
答案 1 :(得分:4)
好的,这就是我的问题的答案。 正如我在评论中所说的应用程序:handleOpenURL:永远不会被调用! 因为我在我的ViewController中有这个方法,显然它必须在appDelegate!
所以在我的基于导航栏的应用程序中,我在appDelegate中执行了以下操作:
<。>文件中的:
ViewController *viewController;
@property (nonatomic, retain) IBOutlet ViewController *viewController;
<。>文件中的:
@synthesize viewController;
viewController = [[ViewController alloc]init];
[self.navigationController pushViewController:viewController animated:NO];
然后实现了这样的方法:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [viewController.facebook handleOpenURL:url];
}
当然在我的ViewController中我做了@Tyler提到的所有事情(谢谢你) 一切都像魅力一样。 希望这可以帮助每个人解决同样的问题。