使用 clear() 不工作删除 EncryptedSharedPreferences

Delete EncryptedSharedPreferences with clear() not working

我使用 androidx.security:security-crypto:1.0.0-alpha02 库中的 EncryptedSharedPreferences 来存储一些令牌。如果我使用 prefs.edit().remove("token")).apply()prefs.edit().remove("token")).commit() 令牌将被删除。但是,如果我尝试使用 clear() 方法立即清除首选项,则不会发生任何事情。

本次调用:prefs.edit().clear().commit()偶returnsfalse

我使用此方法获取 EncryptedSharedPreferences:

    private fun getPrefs(): SharedPreferences {

    val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
    return EncryptedSharedPreferences.create(
            "myPrefs",
            masterKeyAlias,
            context,
            EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
            EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM

    )
}

我是否必须以其他方式清除 EncryptedSharedPreferences?

文档说 (https://developer.android.com/reference/androidx/security/crypto/EncryptedSharedPreferences) :

// use the shared preferences and editor as you normally would SharedPreferences.Editor editor = sharedPreferences.edit();

更新 07.02.2020 我在 google bugtracker (https://issuetracker.google.com/issues/138314232) 中创建了一个错误票,但他们不会修复它...

暂时使用 Remove 方法:

public void clear(){
SharedPreferences.Editor editor = prefs.edit();
 Map<String, ?> allEntr = prefs.getAll();
        for (String entry : allEntr.keySet()) {
            editor.remove(entry);
        }
        prefs.editor.clear();
        prefs.editor.apply();
 }

更新:正如 Jeevanandham 指出的那样,此问题已得到解决。 现在有一个稳定的版本。 https://developer.android.com/jetpack/androidx/releases/security#version_100_3


原回答:

一种解决方案是使用标准的非安全首选项管理器清除首选项。

PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply();

这将清除所有偏好设置。

也适用于不同 activity!

SharedPreference preference

...

preference.getSharedPreferences("myPrefs",0).edit().clear().apply();

此问题已从版本 1.0.0-rc03 中修复。 Clear 现在工作正常。享受吧!

参考发行说明: https://developer.android.com/jetpack/androidx/releases/security#security-crypto-1.0.0-rc03