我正在尝试将数据永久存储在适用于Android和iOS的Cordova上。永久地说,我的意思是,即使用户卸载了该移动应用程序,该应用程序仍保留在其中,因此,如果他们再次安装它,我将能够重用它。
我依赖于此插件https://github.com/Crypho/cordova-plugin-secure-storage
,该插件在iOS上使用keychain
,在Android上使用SharedPreferences
。
iOS正常运行,我可以删除并安装应用,然后查看我的数据是否仍然存在。
在Android中,卸载后,数据将立即清除。 (Android设备是安全的,这意味着它具有锁定屏幕,我可以通过使用stetho
查看它来确认它已写入SharedPreferences)
我一直在考虑删除它,因为allowbackup默认值可能是false,但是即使将其设置为True,它仍然无法正常工作。
<platform name="android">
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:allowBackup="true" />
</edit-config>
</platform>
感谢您的帮助...
(我添加了Android标签,因为可能有些android开发人员知道SharedPreference数据被删除的原因...)
答案 0 :(得分:1)
在卸载应用程序时,SharedPreference的数据也被删除,因为它位于此应用程序的位置,以确保在设置模式为私有时其他应用程序可以获取您的数据。如果您需要一些数据,则存储状态将被忽略,即您的应用已卸载,则应在sdcard或外部存储目录上写入文件。但仅在android-Q之前可用。
答案 1 :(得分:1)
对于少量键/值数据(例如,应用程序设置),您可以使用cordova-plugin-cloud-settings。
将其安装到您的项目中
cordova plugin add cordova-plugin-cloud-settings --variable ANDROID_BACKUP_SERVICE_KEY="<API_KEY>"
保存一些数据,这些数据将备份到平台的云存储中。
cordova.plugin.cloudsettings.save({
user: {
id: 1678,
name: 'Fred',
preferences: {
mute: true,
locale: 'en_GB'
}
}
});
即使重新安装应用程序之后,您也可以加载数据:
cordova.plugin.cloudsettings.load(function(settings){
console.log("Successfully loaded settings");
console.dir(settings);
});
答案 2 :(得分:0)
就我而言,我使用了插件cordova-custom-config
cordova plugin add cordova-custom-config
问题已经解决。
在config.xml中进行聚合
<platform name="android">
...
<custom-preference name="android-manifest/application/@android:allowBackup" value="true" />
...
</platform>
在cordova-custom-config-example
中的示例中查看插件的更多详细信息和guide中的andoid文档