不幸的是,Facebook SDK 没有自动为我们处理它。除了自己将其构建到 SDK 中之外,最简单的方法是:
每次分配 _facebook:
_facebook = [[Facebook alloc] initWithAppId:@"SuperDuperAppID"];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *accessToken = [prefs stringForKey:@"facebook-accessToken"];
NSString *expirationDate = [prefs stringForKey:@"facebook-expirationDate"];
_facebook.accessToken = accessToken;
_facebook.expirationDate = expirationDate;
如果您从未在 NSUserDefaults 中保存过任何内容,则将设置 nil 值。什么都没发生。否则,将设置真值,并[_facebook isSessionValid];
应返回 TRUE,表示良好的值。继续进行 Facebook SDK 调用,就好像它们已登录(它们是)一样。如果为假,则调用
[facebook authorize:permissions delegate:self];
照常。
然后确保支持以下 Facebook 委托方法:
- (void)fbDidLogin {
NSString *accessToken = _facebook.accessToken;
NSString *expirationDate = _facebook.expirationDate;
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:accessToken forKey:@"facebook-accessToken"];
[prefs expirationDate forKey:@"facebook-expirationDate"];
[prefs synchronize];
}
我在我的应用程序中使用此代码,它运行良好。我是凭记忆做到的,所以如果它不适用于复制和粘贴,我深表歉意。某处可能存在输入错误,以及内存管理不当。不要忘记访问令牌会过期,除非您获得离线许可。无论如何,上面的代码处理一切。