4

iPhone 5S の Touch ID は、SDK を介して他のアプリで使用できないことはわかっていますが、アプリが少なくともデバイスで Touch ID が有効になっているかどうかを確認できるかどうかを確認したかったのです。これは、アプリが iPhone 5S で Touch ID が有効になっているかどうかを確認するための追加のセキュリティ要素として機能します。MDM 製品がこれを実行できることは知っていますが、アプリがこの情報を特定するために使用する必要がある特別な API はありますか?

4

4 に答える 4

7

お探しのメソッドはLAContextですcanEvaluatePolicy:error:。次の場合は NO を返します。

  • このデバイスでは Touch ID を使用できません。
  • デバイスにパスコードが設定されていません。
  • Touch ID に指が登録されていません。

詳細はこちら:ローカル認証フレームワークリファレンス

- (BOOL) isTouchIDAvailable {
    LAContext *myContext = [[LAContext alloc] init];
    NSError *authError = nil;

    if (![myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {

        NSLog(@"%@", [authError localizedDescription]);
        return NO;
    }
    return YES;
}
于 2014-07-23T14:25:24.970 に答える
2

TouchID は iPhone 5s にのみ登場するため、次のコードを使用してハードウェア モデルを判別できます。

- (NSString *) checkiPhone5s {
  // Gets a string with the device model
  size_t size;  
  sysctlbyname("hw.machine", NULL, &size, NULL, 0);  
  char *machine = malloc(size);  
  sysctlbyname("hw.machine", machine, &size, NULL, 0);  
  NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];  
  free(machine); 

  if ([platform isEqualToString:@"iPhone6,1"]) {
     // it is iPhone 5s !!!
  }
}

iPhone 5s には新しいモデルが搭載される可能性があるため、プラットフォーム文字列は将来的に "iPhone6,2" 、 "iPhone6,3" になる可能性があることに注意してください。

または、UIDeviceHardwareクラスが iPhone 5s 用に更新されている場合は、有用な情報が提供される場合があります。現在、iPhone 5 の場合は「不明な iPhone」と表示されています。

于 2013-09-21T03:41:44.353 に答える
2

以下の段階でこれを確認します。

  1. iOS < 8.0:

    self.touchIdAvailable = NO;
    
  2. 次に、デバイスが touchId を使用できるかどうかを確認します。

    - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError **)error
    
        if ("canEvaluatePolicy return YES"):{
            self.touchIdAvailable = YES;
            self.osTouchIdStatus = TouchIdSetOK;
        }
    
  3. このデバイスがエラー ブロックで touchID を有効にしていない理由を確認してください

        case LAErrorPasscodeNotSet:
        case LAErrorTouchIDNotEnrolled:
    
            self.touchIdAvailable = YES;
            self.osTouchIdStatus = TouchIdNotSet;
    
        break;
    
        default:
            self.touchIdAvailable = NO;
            self.osTouchIdStatus = TouchIdNotSupported;
        break;
    
于 2014-11-07T07:27:42.193 に答える