Iphone 存储facebook令牌以进行脱机访问

Iphone 存储facebook令牌以进行脱机访问,iphone,objective-c,facebook,Iphone,Objective C,Facebook,我正在寻找一种保存访问令牌的方法,以允许用户在facebook上发布,而无需每次调用graph API都登录: 我需要一个离线访问令牌,我将其存储在NSUserDefaults中,但当我再次尝试使用它时,会出现FacebookErrDomain错误10000 以下是我的工作: 在fbDidLogin中,我获取访问令牌并将其保存在用户默认值中 - (void)fbDidLogin { NSString *token = self.facebook.accessToken; [[NS

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

我需要一个离线访问令牌,我将其存储在NSUserDefaults中,但当我再次尝试使用它时,会出现FacebookErrDomain错误10000

以下是我的工作:

在fbDidLogin中,我获取访问令牌并将其保存在用户默认值中

- (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我可以看到令牌已保存。

请确保调用:

[[NSUserDefaults standardUserDefaults] synchronize];
这将“保存”您的首选项到磁盘/闪存

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

确保调用:

[[NSUserDefaults standardUserDefaults] synchronize];
这将“保存”您的首选项到磁盘/闪存


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

好的,似乎是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];
不,谢谢


Vincent

好吧,看来是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];
不,谢谢


Vincent

我也遇到了同样的问题,我发现问题在于您没有存储过期日期

如果您这样做,它将允许您重新登录

示例代码:

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

检索也是一样的,只需设置facebook.expirationDate

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

如果您这样做,它将允许您重新登录

示例代码:

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

检索也一样,只需设置
\u facebook.expirationDate

嗨,我确信令牌已保存,因为当我从用户默认设置中获取它时,我可以看到它。我注意到的另一件事是,每次我登录并询问权限时,令牌都是不同的,不知道它是否有用。我用这些信息更新了我的问题。我确信令牌已被保存,因为当我从用户默认设置中获取它时,我可以看到它。我注意到的另一件事是,每次我登录并询问权限时,令牌都是不同的,不知道它是否有用。我用这些信息更新了我的问题