1

我一直在尝试从https://github.com/smstuebe/xamarin-fingerprint实现指纹插件

这个想法是我希望用户在签署他所做的一些工作时能够使用他的指纹而不是输入代码。

它适用于 iOS 设备,但是当我在 Android 设备上尝试时,“CrossFingerprint.Current.IsAvailable”总是返回 false。有谁知道可能出了什么问题?

这是一些代码:

    public class FingerprintAuthentication : IFingerprintAuthentication
    {
        public FingerprintAuthentication()
        {
        }

        public bool IsFingerprintIdentificationAvailable()
        {
            return CrossFingerprint.Current.IsAvailable; //this works directly when using an iOS device, but always returns false when using an Android device
        }
    }

我也尝试过实现 DependencyService 并处理 Android 项目中的方法,但它返回相同的结果:

[assembly: Xamarin.Forms.Dependency(typeof(FingerprintAuthentication))]
namespace AVMobile.Droid.NativeImpl
{
    class FingerprintAuthentication : IFingerprintAuthentication
    {
        public async Task<FingerprintAuthenticationResult> AuthenticateFingerprint(string reason)
        {
            var result = await CrossFingerprint.Current.AuthenticateAsync(reason);
            return result;
        }

        public void DisableFingerprintIdentification()
        {
            Core.Settings.Settings.IsUsingFingerprintIdentification = false;
        }

        public void EnableFingerprintIdentification()
        {
            Core.Settings.Settings.IsUsingFingerprintIdentification = true;
        }

        public bool IsFingerprintIdentificationAvailable()
        {
            var result = CrossFingerprint.Current.IsAvailable;
            //return result;
        }
    }
}

有谁知道可能出了什么问题?由于它适用于没有任何 DependencyService 等的 iOS 设备,我只能想象它与 Android 有关。

4

1 回答 1

3

我假设您使用的是 <= 1.2,因为IsAvailable在新版本中不可用。

您的版本不可用的原因可能是:

  1. API 不支持访问指纹传感器(三星设备或 Android < 6)
  2. 未授予访问指纹传感器的权限
  3. 设备没有传感器
  4. 指纹尚未注册

我已经发布了支持三星设备的更新版本。

它还为您提供有关不可用原因的更多信息。

更新包到1.3!

检查可用性

if(await CrossFingerprint.Current.IsAvailableAsync()){
    // ...
}

或者

var avail = await CrossFingerprint.Current.GetAvailabilityAsync();
// avail contains the availability

请参阅:http ://smstuebe.de/2016/10/13/fingerprintv1.3/段落更改 -> 打破以获取更多信息。

顺便说一句:您不需要特定于平台的实现。该插件自己处理它。您可以CrossFingerprint.Current直接在您的核心代码中访问。

BTW2:您可能必须将 IDE 和 NuGet 更新到最新版本,因为我已经切换到 .netstandard :)

于 2016-11-03T14:19:19.543 回答