facebook sdk ios到期日

时间:2011-04-03 07:44:17

标签: iphone facebook ios

我正在尝试记录facebook的令牌和截止日期,因为每次都没有授权用户。但今晚我收到此错误的错误如:{"error":{"type":"OAuthException"。 首先让我解释一下如何以及何时记录到期日期和令牌:

DidLogin

-(void)fbDidLogin{
[[NSUserDefaults standardUserDefaults]setValue:facebook.accessToken            forKey:@"fb_access_token"];
[[NSUserDefaults standardUserDefaults]setObject:facebook.expirationDate forKey:@"fb_expiration_date"];

登录时:

facebook.accessToken    = [[NSUserDefaults standardUserDefaults] stringForKey:@"fb_access_token"];
facebook.expirationDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"fb_expiration_date"];

if (![facebook isSessionValid]) {
    NSLog(@"session not valid authorize again"); 
    [facebook authorize:_permissions delegate:self];
}   
else
{
    if([delegate respondsToSelector:@selector(didFB_login)])[delegate didFB_login];
    self.loggedin=TRUE;
}

经过一些NSLog我明白了这个问题:

我的失效日期是

exp date:4001-01-01 00:00:00 +0000

因此,为了确保我没有犯错,我修改了facebook.m

//FBLoginDialogDelegate

/**
* Set the authToken and expirationDate after login succeed
*/
- (void)fbDialogLogin:(NSString *)token expirationDate:(NSDate *)expirationDate {
self.accessToken = token;
self.expirationDate = expirationDate;
NSLog(@"self.expirationDate:%@",self.expirationDate);
if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogin)]) {
[_sessionDelegate fbDidLogin];
}

}

然后强制进行新的授权调用,但结果仍然是:

self.expirationDate:4001-01-01 00:00:00 +0000

现在的问题是:Facebook OAuth中是否存在错误?我怎样才能确定问题不在我的保存日期代码中?

2 个答案:

答案 0 :(得分:2)

FB正在弃用长期会话中“offline_access”的使用。有关详细信息,请参阅https://developers.facebook.com/docs/offline-access-deprecation/

在这里:https://developers.facebook.com/docs/mobile/ios/build/#extend_token如果您正在iOS中开发。

干杯!

答案 1 :(得分:0)

经过一些调试我发现了该死的 handleOpenURL 查询:=的access_token&accesstokenstring放大器; expires_in = 0

为什么OAuth会回答我expires_in 0?当场日期是4001因为

// We have an access token, so parse the expiration date.
NSString *expTime = [params valueForKey:@"expires_in"];
NSLog(@"expTime:%@",expTime);
NSDate *expirationDate = [NSDate distantFuture];
if (expTime != nil) {
int expVal = [expTime intValue];
if (expVal != 0) {
  expirationDate = [NSDate dateWithTimeIntervalSinceNow:expVal];

expVal为0,因此失效日期为remoteFuture。 但令牌已经过期,当我尝试用该令牌查询时,我得到了oauth预期。 所以?有人有想法吗?

解决了..如果有人想知道为什么会发生这种情况,这就是答案:由于offline_access权限,expires_in为0 ..由于facebook密码更改,Burt令牌已到期服务器端。要解决此问题,只需添加

即可
  - (void)request:(FBRequest *)request didFailWithError:(NSError *)error{

NSLog(@"didFailWithError : %@",[error description]);

NSDictionary* userinfo=[error userInfo];
// NSLog(@"userinfo:%@",userinfo);
NSString *type=[[userinfo valueForKey:@"error"]valueForKey:@"type"];
// NSLog(@"type:%@",type);
if([type isEqualToString:@"OAuthException"]){
    NSLog(@"Exception from oauth let's take new token");
[facebook authorize:_permissions delegate:self];

}