【问题标题】:Storing facebook token for offline access存储 facebook 令牌以供离线访问
【发布时间】:2011-07-10 14:56:01
【问题描述】:

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

我需要一个离线访问令牌,我将它存储在 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,我可以看到令牌已保存。

【问题讨论】:

    标签: iphone objective-c facebook


    【解决方案1】:

    请务必致电:

    [[NSUserDefaults standardUserDefaults] synchronize];
    

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

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

    【讨论】:

    • 嗨,我确信令牌已保存,因为当我从用户默认设置取回令牌时,我可以看到它。我注意到的另一件事是每次我登录并询问权限时令牌都是不同的,不知道它是否有帮助。我用这些信息更新了我的问题
    【解决方案2】:

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

    不,谢谢脸书;)

    文森特

    【讨论】:

      【解决方案3】:

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

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

      示例代码:

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

      检索也是一样,设置_facebook.expirationDate即可。

      【讨论】:

        猜你喜欢
        • 2011-12-19
        • 2011-06-23
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        • 2011-09-06
        • 2012-07-06
        • 2013-02-17
        相关资源
        最近更新 更多