Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone facebook的有效期始终为“否”_Iphone_Objective C_Facebook Graph Api_Single Sign On - Fatal编程技术网

Iphone facebook的有效期始终为“否”

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 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];
}
但似乎永远都不是 我不知道为什么! 有人知道为什么吗?
哦,而且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];}从未被调用。我知道了。我把你的答案投了赞成票,因为这是答案的一部分,但对我来说并没有起到作用。但是有了我的答案和你的答案,一切都像一种魅力。多谢各位