Hololens - UserConsentVerifier 不适用于 Hololens 第一代

Posted

技术标签:

【中文标题】Hololens - UserConsentVerifier 不适用于 Hololens 第一代【英文标题】:Hololens - UserConsentVerifier not working on Hololens 1st Generation 【发布时间】:2021-05-22 20:26:19 【问题描述】:

我目前正在开发一个 Hololens 应用程序,该应用程序应该适用于 Hololens 1st gen 和 2。 我们的安全要求之一是在应用加载之前请求用户同意(使用 windows hello)。

我已经实现了与链接here 中描述的以下内容非常相似的方法。

private async System.Threading.Tasks.Task<string> RequestConsent(string userMessage)

    string returnMessage;

    if (String.IsNullOrEmpty(userMessage))
    
        userMessage = "Please provide fingerprint verification.";
    

    try
    
        // Request the logged on user's consent via fingerprint swipe.
        var consentResult = await Windows.Security.Credentials.UI.UserConsentVerifier.RequestVerificationAsync(userMessage);

        switch (consentResult)
        
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.Verified:
                returnMessage = "Fingerprint verified.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceBusy:
                returnMessage = "Biometric device is busy.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceNotPresent:
                returnMessage = "No biometric device found.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.DisabledByPolicy:
                returnMessage = "Biometric verification is disabled by policy.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.NotConfiguredForUser:
                returnMessage = "The user has no fingerprints registered. Please add a fingerprint to the " +
                                "fingerprint database and try again.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.RetriesExhausted:
                returnMessage = "There have been too many failed attempts. Fingerprint authentication canceled.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.Canceled:
                returnMessage = "Fingerprint authentication canceled.";
                break;
            default:
                returnMessage = "Fingerprint authentication is currently unavailable.";
                break;
        
    
    catch (Exception ex)
    
        returnMessage = "Fingerprint authentication failed: " + ex.ToString();
    

    return returnMessage;

Everithin 在 Hololens 2 上运行良好,尽管在 Hololens 1 上没有明确的原因我在这一行得到以下异常:

var consentResult = await Windows.Security.Credentials.UI.UserConsentVerifier.RequestVerificationAsync(userMessage);

“没有更多数据可用。(HRESULT 异常:0x8009002A)”

我想知道是我做错了什么,还是这个 API 根本不支持 Hololens 第一代。虽然类描述说它支持所有类型的验证:

检查验证设备(例如 Microsoft Passport PIN、Windows Hello 生物识别或指纹读取器)和 执行验证。

【问题讨论】:

感谢您将此问题报告为在第一代 HoloLens 上调用 UserConsentVerifier.RequestVerificationAsync 时出现意外 0x8009002A 错误的失败。我们正在尝试与相应的团队取得联系,并稍后为您提供更新。谢谢! 【参考方案1】:

由于未实现的底层依赖,UserConsentVerifier 似乎总是会在 HoloLens(第一代)上返回 NTE_NO_MORE_ITEMS (0x8009002A)。这在 HoloLens 2 上已修复。

【讨论】:

以上是关于Hololens - UserConsentVerifier 不适用于 Hololens 第一代的主要内容,如果未能解决你的问题,请参考以下文章

HoloLens外包团队:HoloLens有一个严重缺陷,但微软并不想改

微软将不推出二代HoloLens,直接在2019年推出第三代HoloLens

Unity开发Hololens2—交互发布配置

吊打Magic Leap,微软HoloLens 2不只为炫技

Hololens2 开发(仿真器)配置

HoloLens开发与性能优化实践