让现有的带有指纹认证的应用程序与 iPhone X FaceId 一起使用

Getting existing app with fingerprint authentication to work with iPhone X FaceId

我已经开发了一个应用程序并在商店上架。它运作良好,并实施了指纹认证。既然 Apple 已强制要求提供 iPhone X 支持,我将发布该应用程序的另一个更新。

但是,我想知道如果在 iPhone X.. 上安装已经提交的应用程序版本会发生什么?

我读过-

  1. 应用程序将提供一个兼容性警告说 This app was designed to use Touch ID and may not fully support FaceID,但是如果我们在 plist 中插入一个键 NSFaceIDUsageDescription 它就会消失。

  2. 我还了解到,如果使用 iOS 11 SDK(plist 中没有密钥 NSFaceIDUsageDescription)构建应用程序将会崩溃。

这是我的问题 - 如果应用程序是使用 iOS 8 构建并安装在 iOS 11 中,它还会崩溃吗?如果不是,确切的行为将如何..?我已经在模拟器中进行了测试,应用程序没有崩溃,但我手头没有 iPhone X,无法在实际设备上进行交叉检查。

注意 - 这种崩溃更多地发生在设备上而不是模拟器上。

  1. 在 iPhone X 上的应用程序 运行 中使用 FaceId 这个词有多重要。如果我使用 "Biometric authentication" 这样的通用术语代替触摸 ID 和面部识别码。该应用程序仍然可以正常使用并且最终不会被拒绝吗?

任何帮助或线索将不胜感激!

我用它来处理 faceID 或 touchID

if (@available(iOS 11.0, *)) {
            if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {
                if (myContext.biometryType == LABiometryTypeTouchID) {
                    SwitchItem *touchIdItem = [[SwitchItem alloc] init];
                    touchIdItem.name = NSLocalizedString(@"PROFILE_SETTINGS_TOUCHID", nil);
                    touchIdItem.active = [[[Global instance] objectInKey:KEY_TOUCHID_ENABLED] boolValue];
                    [self.dataSource addObject:touchIdItem];
                } else if (myContext.biometryType == LABiometryTypeFaceID) {
                    SwitchItem *faceIdItem = [[SwitchItem alloc] init];
                    faceIdItem.name = NSLocalizedString(@"PROFILE_SETTINGS_FACEID", nil);
                    faceIdItem.active = [[[Global instance] objectInKey:KEY_FACEID_ENABLED] boolValue];
                    [self.dataSource addObject:faceIdItem];
                }
            }
        } else {
            if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {
                SwitchItem *touchIdItem = [[SwitchItem alloc] init];
                touchIdItem.name = NSLocalizedString(@"PROFILE_SETTINGS_TOUCHID", nil);
                touchIdItem.active = [[[Global instance] objectInKey:KEY_TOUCHID_ENABLED] boolValue];
                [self.dataSource addObject:touchIdItem];
            }
        }

您必须评估 iOS 版本,然后您可以假设该小工具是否具有 touchID 或 faceID

您说得对,您的 plist 中需要 NSFaceIDUsageDescription 密钥才能正确支持面容 ID。

如果您使用 Xcode 9 针对 iOS 11 SDK 构建应用程序,即使您将目标设置为 iOS 8,您也需要包含该密钥以支持 iPhone X.

就是说,我不明白这可能会导致崩溃。您用于 Touch ID 的相同代码也支持 Face ID。