You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 01:09:03