使用 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
我使用 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