我的申请有授权。作为回报,如果我登录,我收到一个令牌,我存储在NSUserDefaults
。
当前应用的工作原理: 当我按下登录按钮时,应用程序会向服务器发送用户名和登录信息,作为回报,如果成功,app会获得一个令牌。
我有一个带有令牌的保存用户和其他收到的信息方法,其中包含:
- (void)saveUserWithInfo...{
...
[[NSUserDefaults standardUserDefaults] setObject:token
forKey:kUserToken];
这个阶段的所有功能都在应用中使用令牌完美。
对于iOS扩展,我想使用此令牌来检查用户是否登录。我在上面的save用户方法中添加了下一行:
NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mayapp"];
[sharedDefaults setObject:token
forKey:kUserToken];
正如您所看到的,我还将令牌保存到共享用户默认值,我可以从这个新存储中简单地请求令牌。
问题:
当我第一次测试时,它会根据需要进行测试,然后再将其上传到商店。我在App Store上有一个版本,它不包含iOS扩展和新的共享存储NSUserDefaults
,它应该包含令牌。
我将版本更新到新版本并下载后,我在第一次扩展时打开,但它显示错误,该用户尚未登录,这似乎是正确的,因为共享NSUserDefaults
存储没有令牌。在我当前的工作流程中,按下登录按钮后可以保存令牌。但是从没有扩展程序的版本更新到带有App Store扩展的版本后,我的用户仍然登录了应用程序,因为原始NSuserDefaults
包含令牌,但新的共享NSUserDefaults
仍未获得令牌因为我们需要注销然后登录才能使其正常工作。
我的问题是如何在不注销的情况下将令牌设置为新的共享 NSUserDefaults
,然后重新登录。当然,当我登录时,它会从更新中调出所有新行,并且我为iOS扩展添加了新的共享 NSUserDefaults
。因此,在新登录后它将包含令牌,如果打开扩展它可以工作,但首先在App Store的更新版本显示用户未登录的错误后立即启动 - 这是正确的,因为新添加了共享 NSUserDeafults
答案 0 :(得分:1)
你应该真的使用钥匙串。
无论如何,也就是说,你应该在你的app委托中有一个“升级”逻辑(或从那里触发),每次启动应用程序时都会运行该逻辑并验证情况。在当前情况下,逻辑是检查登录密钥的共享默认值,并检查密钥的非共享。如果密钥存在于一个而不是另一个中,则将其复制并保存。