2017-08-03 4 views
0

Ich benutze Cordova-Firebase-Plugin, eine der Anforderungen auf iOS für Push-Benachrichtigungen ist, Berechtigungen zu erteilen, ist das Problem, dass Cordova-Firebase-Plugin grantPermission hat nicht ein ordnungsgemäßer Rückruf für Erfolg/Fehler - wenn also grantPermission aufgerufen wird, wird die Berechtigungsanfrage an den Benutzer gesendet, aber im Hintergrund wird die App weiter geladen.cordova angularjs Kraft app auf Benutzer-Erlaubnis zu warten pausieren

Der Plugin Erlaubnis Aufruf ist eine Grundfunktion ohne Rückrufe:

window.FirebasePlugin.grantPermission(); 

Ich brauche den App Laden pausieren und nur dann weiter, nachdem der Benutzer Genehmigung erteilt/lehnte die Berechtigungen Anfrage. Unten ist mein Versuch, dies in der App init Abschnitt meiner App zu tun:

function iosPush() { 
    var q = $q.defer() ; 
    if (/(iPad|iPhone|iPod)/i.test(navigator.userAgent)) { 
     window.FirebasePlugin.grantPermission(function(status) { 
     q.resolve(status) ; 
     },function(err) {errMgmt("ctrl/init",35,"iOS Push ask Permission error: "+err) });) ; 
    } else { 
     q.resolve("Android") ; 
    } 
    return q.promise ; 
    } 

    iosPush().then(function(status) { 
     return getLocationAuth() 
    }).then(function(status) { 
     ...do other stuff... 
    }) ; 

mein Versuch, obwohl die App zu pausieren nicht funktioniert. Kann jemand helfen oder darauf hinweisen, wie ich die App init pause erreichen kann, wenn ich die iOS-Erlaubnis ersuche?

Schließlich, egal, was der Benutzer auswählt, gewährt oder verweigert Erlaubnis, status ist immer null

Antwort

0

ich hatte das gleiche Problem.

Ich endete mit https://github.com/dpa99c/cordova-diagnostic-plugin, um den Berechtigungsstatus zu überprüfen. Öffnet ein Popup mit einem Knopf. Wenn der Benutzer den Berechtigungsdialog ablehnt, muss er das Popup durch Klicken auf die Schaltfläche schließen. Dann überprüfe ich den Berechtigungsstatus erneut. Es ist keine Lösung, es ist nur ein Workaround. Ein bisschen hässlich, aber funktioniert.

Haben Sie selbst eine Lösung gefunden?

0

Ich war in der Nähe in meiner ursprünglichen Frage ... hatte es die folgenden zu ändern: als grantPermission Erfolg/

function iosPush() { 
    var q = $q.defer() ; 
    if (/(iPad|iPhone|iPod)/i.test(navigator.userAgent)) { // 1st hasPerm 
     window.FirebasePlugin.hasPermission(function(data){ 
     if (data.isEnabled == false) { 
      window.FirebasePlugin.grantPermission(function(status) { // if no, grant 
      // Permission Granted or notGranted...need to check again. 
      window.FirebasePlugin.hasPermission(function(data){ 
      // 2nd hasPerm, if changed, set internal db 
       var oldPushEnabled = getDB('dev_pushEnabled') ; 
       if (data.isEnabled == true) { 
       var pushIsEnabled = 1 ; 
       } else { 
       var pushIsEnabled = 0 ; 
       } 
       if (oldPushEnabled != pushIsEnabled) { 
       setDB('dev_pushEnabled',pushIsEnabled) ; // set local app db value 
       q.resolve("PushStatusNotChanged") ; // push enable status has changed 
       } else { 
       q.resolve("PushStatusChanged") ; // push enable status has not changed 
       } 
      }) ; // close 1st hasPermission 
      },function(error) { 
      // Permission NOT GRANTED 
      q.resolve("PushNotGranted") ; 
      }) ; // grantPermission 
     } else { 
      q.resolve("PushGranted") ; // authorization was previously granted 
     } 
     }) ; // close 2nd hasPermission 
    } else { 
     q.resolve("Android") ; 
    } 
    return q.promise ; 
    } 

    iosPush().then(function(status) { 
    return getLocationAuth() 
    }).then(function(status) { 
    ...do other stuff... 
    }) ; 

In der Funktion die Doppel hasPermission wirkt Aufruf fehl zurück. Ein bisschen Klud, aber es funktioniert wie Charme.

Verwandte Themen