2016-11-02 16 views
0

アプリの起動時に有効なFingerPrintを確認する次のコードがあります。私はXamarin.Formsを使用しています。私は別のページに移動する必要がreplyHandlerに基づいてメソッドを終了する前にコールバックの結果を待つ

PlatformSpecific(Xamarin.iOS)

public bool IsValidTouchID() 
     { 

    var replyHandler = new LAContextReplyHandler((success, er) => 
          { 

           if (success) 
           { 
            isSuccess = true; 

           } 
           else 
           { 
            isSuccess = false; 
           } 

          }); 
    context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, "Enter Touch ID", replyHandler); 

    return isSuccess; 

} 

。最初にコールバック関数であるため、メソッドを返してからreplyHandlerを呼び出します。したがって、常にFalseが返されます。

私は非同期を試みましたが、私はそれを達成できませんでした。

答えて

2

あなたはTaskCompletionSource使用することができます方法は今の非同期なので、呼び出し側はそれを待たなければならないこと

public Task<bool> IsValidTouchIDAsync() 
{ 
    var tcs = new TaskCompletionSource<bool>(); 

    var replyHandler = new LAContextReplyHandler((success, er) => tcs.SetResult(success); 

    context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, "Enter Touch ID", replyHandler); 

    return tcs.Task; 
} 

注意を。

+0

ありがとうございました。しかし、上記のコードでは、指紋入力を取得するためのTouchID警告画面は表示されません。だから今でも常にFalseが返されます – Subha

+0

@Subha TouchIDアラート画面を表示している元のコードですか?私はこの部分を変更していないので... –

+0

元のコードは警告を表示していても検証されていますが、上記のコードでは警告は表示されず、FingerPrintの入力がなくても常にfalseになります。 – Subha

関連する問題