gpt4 book ai didi

iOS 扩展在从应用商店更新后添加新的 NSUserDefaults 问题

转载 作者:行者123 更新时间:2023-11-29 02:04:09 26 4
gpt4 key购买 nike

我的应用程序已获得授权。作为返回,如果我登录,我会收到一个存储在 NSUserDefaults 中的 token 。

当前应用程序的工作原理:当我按下登录按钮时,应用程序将用户名和登录信息发送到服务器,作为返回,如果成功,应用程序将获得一个 token 。

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

- (void)saveUserWithInfo...{

...

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

使用应用程序中的 token ,此阶段一切都很完美。

对于 iOS 扩展,我想使用此 token 来检查用户是否登录。我已将下一行添加到上面的保存用户方法中:

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mayapp"];

[sharedDefaults setObject:token
forKey:kUserToken];

如您所见,我还将 token 保存到共享用户默认值,并且我可以简单地从这个新存储请求 token 。

问题:

当我第一次测试它时,在将其上传到商店之前它会按需要工作。我在 App Store 上有一个版本,它不包含 iOS 扩展和新的共享存储 NSUserDefaults,它应该包含 token 。

在我将版本更新到新版本并下载后,我打开了第一个扩展,但它向我显示错误,该用户尚未登录,这似乎是正确的,因为共享 NSUserDefaults 存储确实没有 token 。在我当前的工作流程中,按下登录按钮后可以保存 token 。但是从没有扩展的版本更新到有 App Store 扩展的版本后,我的用户当然仍然登录该应用程序,因为原始 NSuserDefaults 包含 token ,但新共享 NSUserDefaults 仍然没有获得 token ,因为我们需要注销然后登录才能工作。

我的问题是如何将 token 设置为新的共享NSUserDefaults而无需注销然后重新登录。当然,当我登录时,它开始从更新中调用所有新行,并且有我为 iOS 扩展添加的新 shared NSUserDefaults。因此,在新登录后它将包含 token ,如果打开扩展它会工作,但首先在 App Store 更新版本后立即启动显示用户未登录的错误 - 这是正确的,因为新添加的 shared NSUserDeafults

最佳答案

你真的应该使用钥匙串(keychain)。

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

关于iOS 扩展在从应用商店更新后添加新的 NSUserDefaults 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29984700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com