【问题标题】:Clear Shared Preferences When the App is Uninstalled?卸载应用程序时清除共享首选项?
【发布时间】:2020-09-22 11:59:43
【问题描述】:

我正在使用共享首选项来存储当前用户的姓名、头像以及用户是否登录的布尔值。卸载应用程序似乎会导致重新安装时出现问题。它似乎与shared preferences 有关,因为当我注销并重新登录时,问题就消失了。我怀疑共享首选项文件以某种方式损坏,这会在我的应用程序中引发问题。

那么有没有办法在卸载时清除或删除共享首选项文件?

如果有帮助,这里是退出的代码;

Future<void> logOutSocial() async {
    try {
      socState();
      await socialLogin.logOutFacebook();
      await socialLogin.logOutGoogle();
      await socialLogin.logOutTwitter();

      currentname = "Anonymous";
      currentavatar = "https://example.com/default.jpg";
      currentlogged = false;
      currentuserid = "0";

      await savePreferences(
        currentname: "Anonymous",
        currentavatar: "https://example.com/default.jpg",
        currentlogged: false,
      );

      notifyListeners();
    } catch (e) {
      print(e);
    }
  }

【问题讨论】:

    标签: flutter dart sharedpreferences


    【解决方案1】:

    安卓

    有两种选择:

    1. 禁用自动备份

    从 API 级别 23 (Android 6) 开始,自动备份默认设置为 true。您需要编辑AndroidManifest.xml 文件并设置android:allowBackup 的布尔值。在您的情况下,它应该类似于:

     <manifest ...>
            ...
            <application android:allowBackup = "false">
            </application>
        </manifest>
    

    More info about AutoBackup

    1. 声明要存储的内容

    the documentation 中的所有内容都描述得很清楚。

    iOS

    签出this

    【讨论】:

    • 禁用allowBackup有什么缺点吗?我会失去什么?
    • 您拥有documentation 中的所有内容。简而言之:如果您禁用此选项,您的应用数据(但仅限于本地存储的数据)将无法在属于同一 Google 帐户的设备之间同步,并且用户在卸载后无法恢复应用的本地数据。跨度>
    • 我只是按照您的建议尝试禁用它,然后卸载并重新安装了几次,但损坏的文件仍然存在。
    • 您是否正确编辑了AndroidManifest.xml?应该是YOUR_PACKAGE_NAME/android/app/src/main/AndroidManifest.xml。此外,您的应用程序的所有数据都存储在/data/data/YOUR_PACKAGE_NAME/,因此请确保您在开发过程中没有更改包名称。您也可以尝试手动删除应用的所有数据,然后尝试使用修改后的AndroidManifest 文件测试所有内容。
    • 因为我不热衷于取消 allowBackups,所以我直接插入 Hive 以替换共享首选项,现在看起来还可以。但是感谢您的帮助,了解它的工作原理很有用。
    【解决方案2】:

    Owczar 建议我在开发过程中更改包名称似乎是我的问题。但我决定使用 Hive 作为替代共享首选项的插槽,这解决了问题,因为不再需要共享首选项文件。

    【讨论】:

    • 如果您选择使用 Hive,请记住使用加密框来存储敏感数据。加密密钥应存储在 flutter_secure_storage 或类似的包中。来源:docs.hivedb.dev/#/advanced/encrypted_box
    • 感谢您的提醒!
    猜你喜欢
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 2020-11-28
    • 2021-09-12
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多