11

Ho problemi a chiamare correttamente la funzione di scansione Pdf417 phonegap/cordova plugin in modalità demo all'interno di un'applicazione Ionic. Sto testando il plugin con Ionic View su iOS.Chiamare Pdf417 plug-in per phonegap/cordova in Ionico

Here is a linked Github repository contenente una versione semplificata dell'applicazione con un solo stato e controller.

Purtroppo sono completamente confuso sul motivo per cui questo non funziona quando lo provo. Viene visualizzato un errore che dice "Cordova non è definito" nel browser, cosa che mi aspetterei perché i plug-in Cordova dovrebbero essere 404 nel browser, ma non funziona nemmeno in Ionic View.

Ho installato il plugin con successo con 'plug-in cordova add (posizione di pdf417 git repo') prima di provare a farlo funzionare.

Qualsiasi aiuto sarebbe molto apprezzato. Non ho molta esperienza quindi potrei essere sulla strada sbagliata in generale, e mi dispiace in anticipo se lo sono. Qualsiasi guida sarebbe utile. Se non sono chiaro con qualsiasi cosa, sarò lieto di elaborare. Sono sicuro che potrei aver perso alcune informazioni necessarie.

Ecco il mio app.js dall'applicazione:

angular.module('app', ['ionic']) 
/** 
* RUN 
*/ 

.run(function($ionicPlatform) { 
    $ionicPlatform.ready(function() { 
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard 
    // for form inputs) 
    if(window.cordova && window.cordova.plugins.Keyboard) { 
     cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
    } 
    if(window.StatusBar) { 
     StatusBar.styleDefault(); 
    } 

    }); 
}) 

/** 
* CONTROLLERS 
*/ 
//Workflow Controller 
.controller('workflowCtrl', ['$scope', '$ionicPlatform', '$ionicPopup', 
function($scope, $ionicPlatform, $ionicPopup) { 
    $ionicPlatform.ready(function() { 
    //***PDF417 SCANNER*** 
    function hex2a(hex) { 
     var str = ''; 
     for (var i = 0; i < hex.length; i += 2) { 
      str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); 
     } 
     return str; 
    } 
    var types = ["PDF417", "QR Code"]; 
    var options = { 
     beep : true, // Beep on 
     noDialog : true, 
     uncertain : false, //Recommended 
     quietZone : false, //Recommended 
     highRes : false, //Recommended 
     inverseScanning: false, 
     frontFace : false 
    }; 
    var licenseiOs = null; 
    var licenseAndroid = null; 
    $scope.barcodeResult; 
    $scope.fields; 
    $scope.scan = function() { 
     $ionicPopup.alert({ 
     title:'Scan Button Clicks', 
     }); 
     console.log('Scan Button Clicks'); 
     cordova.plugins.pdf417Scanner.scan(
     // Register the callback handler 
     function callback(scanningResult) { 
      // handle cancelled scanning 
      if (scanningResult.cancelled == true) { 
      console.log('Scanner cancelled'); 
      $scope.warnings = "Cancelled"; 
      return; 
      } 
      // Obtain list of recognizer results 
      var resultList = scanningResult.resultList; 
      // Iterate through all results 
      for (var i = 0; i < resultList.length; i++) { 
      // Get individual resilt 
      var recognizerResult = resultList[i]; 
      if (recognizerResult.resultType == "Barcode result") { 
       // handle Barcode scanning result 
       if (typeof(recognizerResult.raw) != "undefined" && recognizerResult.raw != null) { 
       var raw = hex2a(recognizerResult.raw); 
       } 
       $scope.barcodeResult = { 
       "Data": recognizerResult.data, 
       "Raw": raw, 
       "Type": recognizerResult.type 
       }; 
      } else if (recognizerResult.resultType == "USDL result") { 
       // handle USDL parsing result 
       var fields = recognizerResult.fields; 
       $scope.fields = { 
       /** Personal information */ 
       "USDL version": fields[kPPAamvaVersionNumber], 
       "Family name": fields[kPPCustomerFamilyName], 
       "First name": fields[kPPCustomerFirstName], 
       "Date of birth": fields[kPPDateOfBirth], 
       "Sex": fields[kPPSex], 
       "Eye color": fields[kPPEyeColor], 
       "Height": fields[kPPHeight], 
       "Street": fields[kPPAddressStreet], 
       "City": fields[kPPAddressCity], 
       "Jurisdiction": fields[kPPAddressJurisdictionCode], 
       "Postal code": fields[kPPAddressPostalCode], 
       /** License information */ 
       "Issue date": fields[kPPDocumentIssueDate], 
       "Expiration date": fields[kPPDocumentExpirationDate], 
       "Issuer ID": fields[kPPIssuerIdentificationNumber], 
       "Jurisdiction version": fields[kPPJurisdictionVersionNumber], 
       "Vehicle class": fields[kPPJurisdictionVehicleClass], 
       "Restrictions": fields[kPPJurisdictionRestrictionCodes], 
       "Endorsments": fields[kPPJurisdictionEndorsementCodes], 
       "Customer ID": fields[kPPCustomerIdNumber] 
       }; 
      } 
      } 
     }, 
     // Register the error callback 
     function errorHandler(err) { 
      console.log("error: " + err); 
      $scope.warnings = err; 
     }, 
     types, options, licenseiOs, licenseAndroid 
    ); 
    }; 
    //***END PDF417 SCANNER*** 
    }); 
}]) 

/** 
* ROUTING 
*/ 
.config(function($ionicConfigProvider, $stateProvider, $urlRouterProvider) 
{ 

    $ionicConfigProvider.tabs.position('bottom'); 
    $ionicConfigProvider.tabs.style('striped'); 
    $ionicConfigProvider.navBar.alignTitle('center'); 

    $urlRouterProvider.otherwise('/tab/workflow'); 

    $stateProvider 
    // setup an abstract state for the tabs directive 
    .state('tab', { 
     url: '/tab', 
     abstract: true, 
     templateUrl: 'partials/tab.html' 
    }) 
    // Each tab has its own nav history stack: 
    .state('tab.workflow', { 
     url: '/workflow', 
     views: { 
     'tab-workflow': { 
      templateUrl: 'partials/tab-workflow.html', 
      controller: 'workflowCtrl' 
     } 
     } 
    }) 
}); 

Inoltre, qui è il mio registro di sistema quando si fa clic sul pulsante per avviare PDF417 con 'emulare ios ionica' per eseguire il simulatore.

THREAD WARNING: [‘Pdf416Scanner’] took ’12.760742’ ms. 
Plugin should use a background thread. 

UPDATE: Questo errore è previsto come periferica non è disponibile nell'emulatore, anche se ho ancora alcuna funzione quando il test in vista ionico (attualmente con IOS).

+1

Ho appena provato ad usarlo e non ho avuto problemi. Quando usi Cordova nuda, usi i comandi Cordova ma se vuoi usare Ionic, è meglio usare solo comandi ionici per evitare comportamenti imprevisti. Anche questo plugin è stranamente strutturato (un plugin all'interno di un esempio, questo è il primo!). –

+0

Grazie per il check-out. Dovrei provare a testare con Xcode piuttosto che testare in vista ionica? Fino ad ora non è completamente reattivo al vew ionico. Inoltre, so che è abbastanza strano mettere il plugin nel controller. Dovrebbe davvero essere in un servizio, ma volevo minimizzare le variabili nel mio numero perché sono già confuso sul motivo per cui il plugin non risponde per me. – Johnnie

+0

Non stavo parlando del tuo codice ma del plugin pdf417;) Normalmente ciò che è all'interno della directory Pdf417 dovrebbe essere alla radice del plugin, quindi permetterebbe di installarlo tramite un semplice 'plugin cordova | ionic aggiungere https:// github.com/PDF417/PDF417-phonegap'. Ad ogni modo, non ci sono regole generali su dove iniettare i tuoi servizi di plugin. Dipende davvero da cosa fanno questi servizi. Effettivamente sotto iOS vale sempre la pena provare a costruire sotto Xcode quando non funziona. Questo è almeno come funziona sotto Cordova da solo. Hai provato a farlo senza questo plugin? –

risposta

1

La risposta a voi il vostro problema è molto semplice: Ionic View supporta solo un numero limitato di plugin (al momento) e il vostro non è nella lista.

Ha iniziato a supportare anche meno, ma altri sono stati aggiunti.

Ecco un link rilevante: http://docs.ionic.io/v1.0/docs/view-usage

Vorrei suggerire la distribuzione a un dispositivo tramite USB.

Problemi correlati