Iphone facebook的有效期始终为“否”
您好,我将最新的facebook api与SSO结合使用,并在我的viewController中实现如下内容(如果有任何区别,请不要在示例中的appDelegate中实现): 在我的.h文件中Iphone facebook的有效期始终为“否”,iphone,objective-c,facebook-graph-api,single-sign-on,Iphone,Objective C,Facebook Graph Api,Single Sign On,您好,我将最新的facebook api与SSO结合使用,并在我的viewController中实现如下内容(如果有任何区别,请不要在示例中的appDelegate中实现): 在我的.h文件中 Facebook *facebook; @property (nonatomic,retain) Facebook *facebook; 在我的.m文件中,我在viewDidLoad中执行以下操作 self.facebook = [[Facebook alloc] initWithAppId:@"mya
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];
}
但似乎永远都不是
我不知道为什么!
有人知道为什么吗?
哦,而且expirationDate和accessTokken为零我昨天遇到了完全相同的问题,似乎您必须自己坚持并恢复访问令牌/过期日期 在您的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。我昨天遇到了完全相同的问题,似乎您必须自己坚持并恢复访问令牌/过期日期
[[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];
在您的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。好的,这是我问题的答案。
[[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];
正如我在评论中所说,应用程序:handleOpenURL:从未被调用!
因为我在我的ViewController中有这个方法,显然它必须在appDelegate中
因此,在基于Navigationbar的应用程序中,我在appDelegate中执行了以下操作:
在.h文件中:
ViewController *viewController;
@property (nonatomic, retain) IBOutlet ViewController *viewController;
在.m文件中:
@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提到的所有事情(谢谢你)
一切都像一个符咒。
希望这对每个有同样问题的人都有帮助。好的,这是我问题的答案。 正如我在评论中所说,应用程序:handleOpenURL:从未被调用! 因为我在我的ViewController中有这个方法,显然它必须在appDelegate中 因此,在基于Navigationbar的应用程序中,我在appDelegate中执行了以下操作: 在.h文件中:
ViewController *viewController;
@property (nonatomic, retain) IBOutlet ViewController *viewController;
在.m文件中:
@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提到的所有事情(谢谢你)
一切都像一个符咒。
希望这能帮助每个有同样问题的人。谢谢你的提示。听起来很合理。但我的-(void)fbdilogin似乎永远不会因为任何原因被调用!我没有在我的appdelegate中实现所有这些,而是在我的mainViewController中实现了。这是一个问题吗?如果SSO没有重定向到你的应用并调用fbDidLogin委托,听起来你没有正确设置URLScheme。看一看“iPhone/iPad的iOS”部分。我是用这个文档做的。我已经定好了。看起来完全一样,除了我有一个URL标识符在那里,但示例应用程序有完全一样的我做。我现在有相同的方式,但它不工作。。。。我还发现在我的viewController类中实现的-(BOOL)application:(UIApplication*)application handleopeanurl:(NSURL*)url{return[facebook handleopeanurl:url];}从未被调用。我知道了。我把你的答案投了赞成票,因为这是答案的一部分,但对我来说并没有起到作用。但是有了我的答案和你的答案,一切都像一种魅力。非常感谢你的提示。听起来很合理。但我的-(void)fbdilogin似乎永远不会因为任何原因被调用!我没有在我的appdelegate中实现所有这些,而是在我的mainViewController中实现了。这是一个问题吗?如果SSO没有重定向到你的应用并调用fbDidLogin委托,听起来你没有正确设置URLScheme。看一看“iPhone/iPad的iOS”部分。我是用这个文档做的。我已经定好了。看起来完全一样,除了我有一个URL标识符在那里,但示例应用程序有完全一样的我做。我现在有相同的方式,但它不工作。。。。我还发现在我的viewController类中实现的-(BOOL)application:(UIApplication*)application handleopeanurl:(NSURL*)url{return[facebook handleopeanurl:url];}从未被调用。我知道了。我把你的答案投了赞成票,因为这是答案的一部分,但对我来说并没有起到作用。但是有了我的答案和你的答案,一切都像一种魅力。多谢各位