2016-11-02 5 views
0

У меня есть следующий код, чтобы проверить действительный FingerPrint при запуске приложения. Я использую Xamarin.Forms.Дождитесь результата обратного вызова до выхода из метода

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 я должен перейти на другую страницу. Так как это функция обратного вызова, она возвращает метод, а затем вызывает 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

Да, мой оригинальный код показывал предупреждение и даже проверял также, но над кодом не показывал никакого предупреждения и всегда давал false, не получая вход FingerPrint. – Subha

Смежные вопросы