iOS扩展程序在从应用商店

时间:2015-05-01 09:49:44

标签: ios nsuserdefaults ios-extensions

我的申请有授权。作为回报,如果我登录,我收到一个令牌,我存储在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

1 个答案:

答案 0 :(得分:1)

你应该真的使用钥匙串。

无论如何,也就是说,你应该在你的app委托中有一个“升级”逻辑(或从那里触发),每次启动应用程序时都会运行该逻辑并验证情况。在当前情况下,逻辑是检查登录密钥的共享默认值,并检查密钥的非共享。如果密钥存在于一个而不是另一个中,则将其复制并保存。