Xamarin SecureStorage调用未抛出缺失权限异常问题咨询
问题原因
你在OnAppearing中执行校验时,给SecureStorage.SetAsync传入了空字符串作为存储值。Xamarin.Essentials的SecureStorage内部实现中,会直接忽略null或空字符串的写入请求,不会执行底层的存储操作,因此完全不会触发Entitlements权限校验,自然不会抛出异常。
另外你之前尝试用随机guid调用GetAsync做校验的方案也不可行:读取SecureStorage中不存在的key时,框架只会直接返回null,同样不会触发底层的权限校验逻辑。
而你后续调用TrySetAsync时传入的是实际业务的非空值,会走完整的底层存储流程,会触发权限校验,因此会抛出预期的异常。
解决方案
修改校验逻辑,写入非空的测试值触发实际存储流程即可,修改后的代码如下:
protected override async void OnAppearing() { try { // 生成随机测试用key string tempKey = System.Guid.NewGuid().ToString(); // 传入非空值触发实际存储逻辑,触发权限校验 await Xamarin.Essentials.SecureStorage .SetAsync(tempKey, "secure_storage_check_value"); // 清理测试数据 Xamarin.Essentials.SecureStorage .Remove(tempKey); } catch { await App.Current.MainPage.DisplayAlert( "设备不兼容", "当前设备不支持应用运行所需的安全存储能力。", "确定"); App.Terminate(); } base.OnAppearing(); }
注意事项
- 禁止使用空字符串、null作为校验写入值,会被框架跳过执行
- 禁止通过读取不存在key的方式做校验,不会触发权限校验逻辑
内容的提问来源于stack exchange,提问作者Jeff Nama
相关产品推荐
相关产品推荐

