0

我的申请已获得授权。作为回报,如果我登录,我会收到一个存储在NSUserDefaults.

当前应用程序如何工作:当我按下登录按钮时,应用程序将用户名和登录信息发送到服务器,如果成功,应用程序将获得一个令牌。

我有一个带有令牌和其他接收到的信息方法的保存用户,其中包含:

- (void)saveUserWithInfo...{

...

[[NSUserDefaults standardUserDefaults] setObject:token
                                          forKey:kUserToken];

应用程序中的令牌在此阶段一切正常。

对于 iOS 扩展,我想使用这个令牌来检查用户是否登录。我在上面的保存用户方法中添加了下一行:

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

4

1 回答 1

1

你真的应该使用钥匙串。

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

于 2015-05-01T10:06:50.137 回答