场景非常简单:有一个使用Cordova编写的旧应用程序,必须使用React Native从头编写的新应用程序进行更新。
我不是使用Cordova编写的应用程序的开发者和维护者,但我可以动手使用它的源代码。我必须重写该应用程序并进行“无提示”更新,即新应用程序不得“重置”存储在KeyStore(Android)和Keychain(iOS)上的数据,并且它必须重新使用这些数据。
[当我在测试设备上“更新”应用程序时,我尝试使用以下方法访问由旧应用程序生成的数据:
并尝试获取数据,但没有成功。问题在iOS和Android上都是相同的。
目前在iOS上,我使用Xcode来构建这两个应用程序。首先,我构建旧版本的应用程序,生成数据并将其存储在钥匙串上。然后,我构建了新的App版本,以取代前一个版本。我已经确保在Xcode上,两个版本的Bundle Identifier和Signing Certificate是相同的。但是从新版本的应用程序中,我仍然无法访问钥匙串。要进行测试,请执行以下操作:我降级应用再次构建了旧版本,因此旧应用替换了新版本,在这种情况下,我可以从旧应用中访问钥匙串数据。
我怀疑,即使Bundle Identifier,两个应用程序也在使用两个不同的钥匙串zones。因此,为了能够从新应用访问旧应用存储的数据,我必须做什么?
我的想法是,用户不应受到应用程序更新的影响,因此旧应用程序的钥匙串(和密钥库)必须由新应用程序重复使用。
注意:我看到在旧版App上,用于在Keychain / KeyStore中存储数据的函数是:
var ss = new cordova.plugins.SecureStorage(callback)
注意:我已经读过this from Apple Developer website,但我想可能不是我的情况,因为我不能在旧版App上设置钥匙串共享,因为我们不允许发布Cordova-base的更新应用程式但是,但是,我们尝试内部使用共享访问没有成功。