iOS在整个应用程序中存储'access_token'

时间:2014-11-21 11:07:53

标签: ios objective-c

我正在尝试确定使用iOS应用程序存储和访问Access令牌的最佳方式。
我对自己熟悉核心数据,虽然这已经证明对应用程序数据的某些部分有益,但我不确定核心数据最适合我需要的令牌。

大多数视图依赖于对我们的API的一些简单的网络请求。访问令牌与这些请求一起使用,以验证和授权所请求的数据内容。
为了更好地解释这里,如何使用它的例子是AppDelegate.m。在applicaion:hasFinishedLoadingWithOptions上我执行简单检查以使用API​​确认令牌,成功后视图更改为“主菜单”,并且在失败时,视图将更改为登录视图。

需要在大多数视图中访问此令牌,因为API会使令牌无效,用户必须重新登录才能获得新令牌(不定期)。

我的初步想法是要求token.h我可以在需要的ViewControllers中调用它,但是因为这是我的第一个大型iOS应用程序,我会感觉更好,有一些建设性的批评,提示或提示如何最好地访问这个标记,'全局',好像它是一个静态值

3 个答案:

答案 0 :(得分:2)

您可以将它存储在这样的钥匙串中 Apple编写了一个Objective-C包装器,您可以使用它来简化键盘链的使用,包装器中的文件是KeychainItemWrapper.h和KeychainItemWrapper.m,它们都包含在附加的Xcode项目中。

UITextField *accesstoken = [[UITextField alloc] initWithFrame:CGRectMake(40, 30, 240, 30)];
[accesstoken setBorderStyle:UITextBorderStyleRoundedRect];

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"TestAppLoginData" accessGroup:nil];

写入钥匙串 -

//将AcessToken存储到钥匙串

Nsstring *strAcessToken=@"abcd" 
[keychain setObject:strAcessToken forKey:(id)kSecAttrAccount];

从钥匙串阅读 -

//从钥匙串获取AcessToken(如果存在)

[accesstoken setText:[keychain objectForKey:(id)kSecAttrAccount]];

注意:

Writing and retrieving values from the keychain doesn’t seem to work in the simulator.
Uninstalling an application will not remove the items from the keychain. If you run the demo application on your device, and uninstall the app, the username and password will remain in the keychain (a firmware reset will, of course, remove the keychain values). 

答案 1 :(得分:0)

虽然我很高兴只提出自以为是的答案,但我会就这个问题提出自己的看法。

您需要一个包含访问令牌的API客户端,每次创建新的视图控制器时,它都应该获得对此API客户端的引用。或者,如果您不习惯每次都可以将API客户端实现为单例。

所有服务器API类都应该通过此API客户端,该客户端应该处理网络和API调用。 AFNetworking是如何做到这一点的一个很好的例子。

它自己的访问令牌应存储在keychain中,因为这是存储这类内容的地方。

答案 2 :(得分:-3)

您可以将令牌存储在NSUserDefaults

+(void)saveToken:(NSString *)token{
  [[NSUserDefaults standardUserDefaults] setObject:token forKey:@"token"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

+(NSString *)getToken{
  return [[NSUserDefaults standardUserDefaults] objectForKey:@"token"];
}