【发布时间】:2020-02-10 13:54:58
【问题描述】:
场景非常简单:有一个使用 Cordova 编写的旧应用程序,必须使用一个使用 React Native 从头开始编写的新应用程序进行更新。
我不是使用 Cordova 编写的应用程序的开发人员和维护人员,但我可以接触到它的源代码。我必须重写应用程序并进行“静默”更新,即新应用程序不得“重置”存储在 KeyStore (Android) 和 Keychain (iOS) 上的数据,并且必须重用这些数据。
当我在测试设备上“更新”应用程序时,我尝试使用以下方法访问旧应用程序生成的数据:
并尝试获取数据,但没有成功。问题在 iOS 和 Android 上是一样的。
目前专注于 iOS,我使用 Xcode 来构建这两个应用程序。首先,我构建了旧版本的应用程序,生成数据并将它们存储在钥匙串上。然后,我构建了新的 App 版本,取代了之前的版本。我已确保在 Xcode 上,Bundle Identifier 和 Signing Certificate 对于两个版本都是相同的。但是从新版本的应用程序我仍然无法访问钥匙串。进行试金石测试:我降级应用程序再次重新构建旧版本,因此旧应用程序替换新应用程序,在这种情况下,我可以从旧应用程序访问钥匙串数据.
我怀疑,即使 Bundle Identifier,这两个应用程序正在使用两个不同的 Keychain zones。那么,我必须做些什么才能从新应用访问旧应用存储的数据?
我的想法是用户不应该受到应用程序更新的影响,所以旧应用程序的钥匙串(和KeyStore)必须被新应用程序重新使用。
注意:我看到在旧App上,Keychain/KeyStore中用来存储数据的函数是:
var ss = new cordova.plugins.SecureStorage(callback)
注意:我已经阅读了this from Apple Developer website,但我想这可能不是我的情况,因为我无法在旧应用程序上设置钥匙串共享,因为我们不允许发布 Cordova 的更新-基础应用程序。但是,我们在内部尝试使用共享访问但没有成功。
【问题讨论】:
标签: react-native cordova migration keystore keychain