私は現在、ユーザーが TouchID を使用してアプリにログインできるようにする iOS アプリを開発していますが、最初にアプリ内でパスワードを設定する必要があります。問題は、TouchID ログインを有効にするセットアップ パスワード オプションを表示するには、iOS デバイスが TouchID をサポートしているかどうかを検出する必要があることです。
LAContext と canEvaluatePolicy を使用して (ここのIf Device Supports Touch IDの回答のように)、ユーザーが iOS デバイスでパスコードを設定している場合、現在のデバイスが TouchID をサポートしているかどうかを判断できます。これが私のコードスニペットです(私はXamarinを使用しているので、C#にあります):
static bool DeviceSupportsTouchID ()
{
if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
{
var context = new LAContext();
NSError authError;
bool touchIDSetOnDevice = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out authError);
return (touchIDSetOnDevice || (LAStatus) Convert.ToInt16(authError.Code) != LAStatus.TouchIDNotAvailable);
}
return false;
}
ユーザーがデバイスのパスコードを設定していない場合、デバイスが実際に TouchID をサポートしているかどうかに関係なく、authError は「PasscodeNotSet 」エラーを返します。
ユーザーのデバイスが TouchID をサポートしている場合、ユーザーがデバイスでパスコードを設定しているかどうかに関係なく、常にアプリに TouchID オプションを表示したいと考えています (最初にデバイスでパスコードを設定するようにユーザーに警告します)。逆に、ユーザーのデバイスが TouchID をサポートしていない場合、アプリに TouchID オプションを表示したくないことは明らかです。
私の質問は、ユーザーがデバイスにパスコードを設定しているかどうかに関係なく、iOS デバイスが TouchID をサポートしているかどうかを一貫して判断する良い方法はありますか?
TouchID は 64 ビット アーキテクチャのデバイスでのみサポートされているため、考えられる唯一の回避策は、デバイスのアーキテクチャを特定することです ( iOS デバイスが 32 ビットか 64 ビットかを判断するで回答されています)。しかし、これを行うためのより良い方法があるかどうかを探しています。