ios 当尝试获取在Xamarin Forms应用程序中设置的kev/值时,MAUI应用程序中的SecureStorage.GetAsync返回null

jrcvhitl  于 2023-06-07  发布在  iOS
关注(0)|答案(1)|浏览(188)

我们刚刚将我们的Xamarin Forms应用程序迁移到MAUI,我们正在进行一些测试,以确保一旦我们在商店中发布新的MAUI版本,升级过程对我们的用户来说将是免费的。
我们的Xamarin Forms应用程序在SecureStorage中维护一些值(例如SetAsync和GetAsync)。现在,由于我们已经迁移到MAUI,我们的用户将从Xamarin Forms应用程序升级到MAUI应用程序。当我们测试这个过程时,我们注意到在我们的MAUI应用程序中,当试图检索Xamarin Forms应用程序设置的值时,GetAsync总是返回null。Xamarin Forms和MAUI应用程序具有相同的应用程序ID,因此我们假设不应该有任何问题。
我们遗漏了什么
附加信息:在iOS中,当将Xamarin Forms应用程序部署到我们的测试设备上,然后部署MAUI应用程序来覆盖应用程序时,这工作得很好。然而,这在我们的TestFlight版本中不起作用,所以我们最终使用了适用于iOS的NSUserDefaults.StandardUserDefaults.SetString和NSUserDefaults.StandardUserDefaults.StringForKey。但是,我们希望SecureStorage能够在Android上工作,如果可能的话,如果我们缺少一些东西,也可以在iOS上工作。

dnph8jn4

dnph8jn41#

关于xamarin中的SecureStorage的官方文档说:
Android KeyStore用于存储加密密钥,该加密密钥用于在将值保存到共享首选项(文件名为[YOUR-APP-PACKAGE-ID]. xamarinessentials)之前对其进行加密。共享首选项文件中使用的密钥(不是加密密钥,而是值的密钥)是传递到SecureStorage API中的密钥的MD5哈希。
关于毛伊岛SecureStorage的官方文件说:
SecureStorage使用Preferences API并遵循Preferences文档中概述的相同数据持久性,文件名为[YOUR-APP-PACKAGE-ID]. microsoft. maui. essentials. preferences。但是,数据是使用Android Security库中的Android EncryptedSharedPreferences类加密的,该类 Package SharedPreferences类,并使用两种方案方法自动加密密钥和值:
密钥被确定性地加密,使得密钥可以被加密并被正确地查找。使用AES-256 GCM对值进行非确定性加密。有关Android安全库的详细信息,请参阅developer.android.com上的更安全地使用数据。
首先,存储在不同文件中的值:一个是xamarinessentials,另一个是microsoft.maui.essentials.preferences。此外,maui使用了一种新的方法来加密密钥,这与Xamarin不同。这就是为什么当你把xamarin更新到maui时,不能得到存储中的旧值。
你可以尝试使用the code in my old answer about getting the value in the securestorage来获取旧值,然后将其存储在maui手册中。或者你也可以在github上发布一个新的问题。

相关问题