sjhoeksma / cordova-plugin-keychain-touch-id

Touch ID plugin with saving password in keychain for IOS and android
87 stars 160 forks source link

window.plugins.touchid.isAvailable never returns on android device #21

Open kevinswartz opened 7 years ago

kevinswartz commented 7 years ago

Thanks for this awesome plugin!

I'm having an issue calling isAvailable() for a certain android device. Neither of the callbacks ever get fired, so my app just hangs while waiting for it.

The device is a Samsung Galaxy 4 mini. Here's the device info (as reported by ionic.Platform.device() {"available":true,"platform":"Android","version":"4.4.2","uuid":"{...omitted...}","cordova":"6.1.2","model":"SAMSUNG-SGH-I257","manufacturer":"samsung","isVirtual":false,"serial":"{...omitted...}"}

Here's the code I'm using to make this call

      var checkSupport = function () {
        var defer = $q.defer();
        if (window.plugins) {
          window.plugins.touchid.isAvailable(function () {
            defer.resolve(true);
          }, function (msg) {
            defer.resolve(false);
          });
        }
        else {
          defer.resolve(false);
        }
        return defer.promise;
      }

Here's what comes back from ionic info Cordova CLI: 6.5.0 Ionic CLI Version: 2.2.2 Ionic App Lib Version: 2.1.7 ios-deploy version: 1.9.1 ios-sim version: 5.0.4 OS: macOS Sierra Node Version: v4.2.3 Xcode version: Xcode 8.3.3 Build version 8E3004b

It seems to work on all my ios devices, and some other android devices I've tried, just not this one. Thanks again for your help!

github-vipera commented 7 years ago

Hi Kevin, thanks for your attention. We have opened a bug on the project and we will investigate it as soon as possible.

Marco Bonati


Marco Bonati Product & Project Manager

Vipera Plc - Mobile Data Solutions Via Palermo, 8 - 20121 Milano Tel: +39 02 86882037 Mail: marco.bonati@vipera.com mailto:lelia.sale@vipera.com www.vipera.com http://www.vipera.com/

On 13 Jul 2017, at 03:20, Kevin Swartz notifications@github.com wrote:

Thanks for this awesome plugin!

I'm having an issue calling isAvailable() for a certain android device. It's a Samsung Galaxy 4 mini. Here's the device info (as reported by ionic.Platform.device() {"available":true,"platform":"Android","version":"4.4.2","uuid":"{...omitted...}","cordova":"6.1.2","model":"SAMSUNG-SGH-I257","manufacturer":"samsung","isVirtual":false,"serial":"{...omitted...}"}

Here's the code I'm using to make this call

  var checkSupport = function () {
    var defer = $q.defer();
    if (window.plugins) {
      window.plugins.touchid.isAvailable(function () {
        defer.resolve(true);
      }, function (msg) {
        defer.resolve(false);
      });
    }
    else {
      defer.resolve(false);
    }
    return defer.promise;
  }

Here's what comes back from ionic info Cordova CLI: 6.5.0 Ionic CLI Version: 2.2.2 Ionic App Lib Version: 2.1.7 ios-deploy version: 1.9.1 ios-sim version: 5.0.4 OS: macOS Sierra Node Version: v4.2.3 Xcode version: Xcode 8.3.3 Build version 8E3004b

It seems to work on all my ios devices, and some other android devices I've tried, just not this one. Thanks again for your help!

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/sjhoeksma/cordova-plugin-keychain-touch-id/issues/21, or mute the thread https://github.com/notifications/unsubscribe-auth/AWaOQf0lgXwdrlDz3O-dDmTdr98TvMP5ks5sNXDJgaJpZM4OWZD8.

kevinswartz commented 7 years ago

Thanks Marco, please let me know if you need anything else.

kevinswartz commented 7 years ago

Hi Guys, Any word here? Thanks!

kevinswartz commented 7 years ago

Hi guys, Here's my current workaround to this. There are some obvious issues here. Any word on a fix? Thanks!

     var checkSupportAndroid = function(){
        var defer = $q.defer();
        if (window.plugins) {
          var timer = $timeout(function(){
            defer.resolve(false)
          }, 200)
          window.plugins.touchid.isAvailable(function () {
            $timeout.cancel(timer);
            defer.resolve(true);
          }, function (msg) {
            $timeout.cancel(timer);
            defer.resolve(false);
          });
        }
        else {
          defer.resolve(false);
        }
        return defer.promise;
      }