web-dev-qa-db-ja.com

iOS11のLABiometryTypeは常にNoneを返します

enter image description here

デバイスのパスコードおよびtouchId設定で構成されている設定に関係なく、LAContextは常にnoneを返します。例外ではなく、警告を投げているだけです。

提案されているように、iOS11.1ベータ版のXCode 9.1ベータ版でのみ動作します:(

20
guhan0

私は問題を理解しました! canEvaluatePolicyを正しく設定するには、biometryTypeを呼び出す必要があります。

例:

func isFaceIdSupported() -> Bool {
    if #available(iOS 11.0, *){
        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
            return context.biometryType == LABiometryType.typeFaceID
        }
    }

    return false
}

Apple docs biometryTypeの場合:

「このプロパティは、生体認証ポリシーのcanEvaluatePolicy(_:error :)が成功した場合にのみ設定されます。デフォルト値はnoneです。」

23
Ermish

ここで同じ問題を取得し、次のコードで修正しました。ただし、Xcode 9.1 Beta(およびシミュレーターのiOS 11.1 beta)でのみ機能します。

if (laContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: nil)) {

            if #available(iOS 11.0, *) {
                if (laContext.biometryType == LABiometryType.faceID) {
                    print("FaceId support")
                } else if (laContext.biometryType == LABiometryType.touchID) {
                    print("TouchId support")
                } else {
                    print("No Biometric support")
                }
            } else {
                // Fallback on earlier versions
            }
}
4
NBoymanns

@Ermishのコードを使用する場合、デバイスに登録済みの顔がない場合、isFaceIdSupported()はfalseを返します。 iOS SDK 11.1での最新のテストによると、laContext.canEvaluatePolicy関数を呼び出して結果を気にせずに、laContext.biometryTypeの内容を確認するだけです。

登録された顔がない場合、canEvaluatePolicyは失敗しますが、デバイスはFace IDをサポートします。

3
Lee-der

Xamarin.iOSでは、次の前にポリシーを評価する必要があります。

   NSError error;
   bool success = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out error);
   if (context.BiometryType == LABiometryType.TouchId)
   {
       //Do Something
   }
0
El0din