2017-10-19 2 views
0

Ich wickle eine bestehende Web-App (Rails) als cordova app in einem Webview ein. Ich öffne die Homepage auf onDeviceReady. Anschließend Registrierung für die Push-Benachrichtigung.Phonegap - Push-Benachrichtigung mit eingebetteter Web-App (InAppBrowser-Fenster)

var ref = cordova.InAppBrowser.open(window.app_url, 
          '_blank', 'location=no,clearsessioncache=no'); 
setupPushNotifications(window.app_url, ref); 

Ich verwende phonegap-plugin-push für Push-Benachrichtigungen.

push.on('registration', function(data) { 
    saveRegistrationId(app_url, data); 
}); 

Ich möchte die Benachrichtigung registrationId im Zusammenhang mit einem angemeldeten Benutzer in der Web App zuordnen.

Dies scheint ohne Probleme zu funktionieren, wenn Sie die phonegap Entwickler-App verwenden. Aber dies ruft nicht die App rails auf, um die Registrierungs-ID zu speichern, wenn ich die android-debug.apk auf meinem Gerät installiere.

Der Gehalt an config.xml

<access origin="*" /> 
<allow-navigation href="http://192.168.1.3:8000" /> 
<allow-intent href="http://*/*" /> 
<allow-intent href="https://*/*" /> 
<allow-intent href="tel:*" /> 
<allow-intent href="sms:*" /> 
<allow-intent href="mailto:*" /> 
<allow-intent href="geo:*" /> 

Ich habe auch versucht _self, in der gleichen webview zu öffnen. SetupPushNotifications wird nicht ausgeführt.

Der Code für die Registrierung der Token

function saveRegistrationId(app_url, data) { 
    // this is our payload for the POST request to server 
    // data = {registrationId: 'XXXXX', registrationType: 'FCM'} 
    const device_data = Object.assign(data, this.device); 

    const url = app_url + "/mobile_devices"; 

    navigator.notification.alert(data.registrationId); 

    navigator.notification.alert(url); 

    var httpRequest = new XMLHttpRequest(); 

    httpRequest.open('POST', url); 

    httpRequest.onreadystatechange = function() { 
     navigator.notification.alert('readyState : ' + httpRequest.readyState); 
     navigator.notification.alert('status : ' + httpRequest.status); 
     if (httpRequest.readyState>3 && httpRequest.status==200) { console.log(httpRequest.responseText); } 
    }; 

    httpRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
    httpRequest.setRequestHeader('Content-Type', 'application/json'); 
    httpRequest.send(JSON.stringify({device: device_data})); 
} 
+0

Haben Sie Ihre 'cordova-plugin-whitelist' konfiguriert? Probieren Sie auch die Chrome-Entwicklungstools aus, um die App auf JS/Netzwerkfehler zu überprüfen, wenn sie auf dem tatsächlichen Gerät ausgeführt werden. – wildabeast

+0

Ich habe die Frage mit den Einstellungen in der Datei config.xml aktualisiert. – naruvimama

+0

Sind JS-Fehler/Netzwerkfehler in der Javascript-Konsole zu sehen? – wildabeast

Antwort

0

Das Problem war mit der content-security-policy in index.html.

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:; connect-src 'self' http://192.168.1.3:8000;"> 

Der Schlüssel war der letzte Abschnitt

connect-src 'self' http://192.168.1.3:8000; 

Das AJAX-Anfragen können an die Web-App vorgenommen werden.