【问题标题】:Saving Facebook access_token in NSUserDefaults on iOS在 iOS 上的 NSUserDefaults 中保存 Facebook access_token
【发布时间】:2011-08-26 21:07:06
【问题描述】:

iOS 初学者在这里。我正在使用以下代码将我的 facebook accessToken 和 expirationDate 保存在 NSUserDefaults 中:

facebook = [[Facebook alloc] initWithAppId:@"225083222506272"];
    [facebook authorize:nil delegate:self];
    NSString *access=[facebook accessToken];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:access, @"accessToken",[facebook expirationDate], @"expirationDate",nil];
    [defaults registerDefaults:appDefaults];

我正在尝试在以后的调用中检索 accessToken 和 expirationDate:

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *access=[defaults valueForKey:@"accessToken"];
    NSDate *date=[defaults objectForKey:@"expirationDate"];
    [facebook fbDialogLogin:access expirationDate:date];

但访问和日期为空。我做错了什么?

【问题讨论】:

  • NSLog 你的访问 NSString。它是否返回一个值?
  • 为什么返回null?它应该返回一个值...

标签: iphone nsuserdefaults token access-token


【解决方案1】:

这里的代码不是同步的。这意味着它在调用[facebook authorize:nil delegate:self]; 后不会阻塞。您应该改为实现fbDidLogin 委托方法,以便在用户实际成功登录时收到通知。此时,检索访问令牌并将其保存为用户默认值。

这是部分示例:

- (void)userClickedFacebookLogin {
    [facebook authorize:nil delegate:self]; // delegate is self
}

// Delegate method that you should implement to get notified
// when user actualy logs in.
- (void)fbDidLogin {
    // now get the access token and save to user defaults
    NSString *access = [facebook accessToken];
    // ..
}

还要确保具有上述代码的类至少实现FBSessionDelegate 协议。

@interface MyClass <FBSessionDelegate> {

}

@end

查看 DemoApp 示例,特别是 Facebook 中的 DemoAppViewController 类,以获得更好的想法。

【讨论】:

  • 感谢您将其保存到 NSUserDefaults。如果我重新运行项目,它将从头开始,我必须重新登录,对吧?
  • 不确定 - 我认为 Facebook 可能在Documents/ 文件夹中缓存了授权状态,但您可以查看。
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 2013-04-16
  • 1970-01-01
  • 2011-10-02
相关资源
最近更新 更多