存储facebook令牌以进行离线访问

时间:2011-03-07 19:59:26

标签: iphone objective-c facebook

我正在寻找一种方法来保存访问令牌,以允许用户在Facebook上发布而无需登录每次调用图API:

我需要一个offline_access令牌,我将它存储在NSUserDefaults中,但当我再次尝试使用它时,我得到一个FacebookErrDomain错误10000

这就是我的所作所为:

在fbDidLogin中我获取access_token并将其保存在用户默认值

- (void)fbDidLogin {
    NSString *token = self.facebook.accessToken;
    [[NSUserDefaults standardUserDefaults] setObject:token forKey:@"facebookToken"];

}

之后当我再次运行应用程序时,我只是从用户默认值中获取令牌,并将它们分配给facebook对象:

NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@"facebookToken"];
[_facebook setAccessToken:token];

但它不起作用..

有谁知道我可能做错了什么?

谢谢, 文森特。

编辑: 如果我在[[NSUserDefaults standardUserDefaults] objectForKey:@"facebookToken"];之后做了一个NSlog,我可以看到该令牌已被保存。

3 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,我发现问题是你没有存储过期日期。

如果你这样做,它将允许你重新处理好。

示例代码:

 [[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"fb_access_token"];
 [[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"fb_exp_date"];

检索是相同的,只需设置_facebook.expirationDate

答案 1 :(得分:3)

好吧,好像它是facebook iOS SDK,它是错误的。

使用存储在用户默认值中的令牌,我可以使用curl在我的墙上执行帖子:

curl -F 'access_token=br69pK_lh0Xbj....plDRUdG97a55KIHzlaiw' \
     -F 'message=TEST API.' \
     https://graph.facebook.com/ME/feed

所以我只是执行一个HTTPS POST,所以使用ASIHTTPRequest这个代码就像一个魅力:

NSURL* faceboobUrl = [NSURL URLWithString:@"https://graph.facebook.com/ME/feed"];
self.request = [ASIFormDataRequest requestWithURL:faceboobUrl];
[request setRequestMethod:@"POST"];
[request setPostValue:token forKey:@"access_token"];
[request setPostValue:msg forKey:@"message"];
[request setDelegate:self];
[request setTimeOutSeconds:TIMEOUT];
[request startAsynchronous];

不,谢谢facebook;)

文森特

答案 2 :(得分:2)

请务必致电:

[[NSUserDefaults standardUserDefaults] synchronize];

这会将您的偏好“保存”到磁盘/闪存。

在保存令牌之前,还要对令牌执行NSLog,以确保它不是零。