FB Service-Mitarbeiter nicht gefunden, während mit GWT (404-Fehler)
Ich würde gerne die FB-cloud-messaging-Dienst in meiner GWT-Webanwendung, aber ich bin stecken mit einigen Problemen.
Die Anwendung sollte in der Lage sein zu registrieren, die FB-service-Arbeiter und eine Verbindung zu dem Dienst mit bestimmten token. Dieses token, die empfangenen Nachrichten und das Ereignis, wenn ein token änderungen sollten zugänglich sein in meinem GWT Java-code.
Tritt der Fehler auf wenn ich versuche zu erstellen, die token mit Griff.getToken().
Ich bekomme diese Fehlermeldung:
Ein bad HTTP-response-code (404) empfangen wurde, wenn das abrufen des Skripts. Failed to load resource: net::ERR_INVALID_RESPONSE browserErrorMessage: "Fehler beim registrieren einer ServiceWorker: Eine ungültige HTTP-Antwort-code (404) empfangen wurde, wenn das abrufen der Schrift." code: "messaging/nicht-serviceworker-Registrierung" Meldung: "die Messaging: Wir sind nicht in der Lage zu registrieren, die Standard-service-Arbeiter. Fehler beim registrieren einer ServiceWorker: Eine ungültige HTTP-Antwort-code (404) empfangen wurde, wenn das abrufen des Skripts. (Mitteilungen/nicht-serviceworker-Registrierung)." stack: "FirebaseError: Messaging: Wir sind nicht in der Lage zu registrieren, die Standard-service-Arbeiter. Fehler beim registrieren einer ServiceWorker: Eine ungültige HTTP-Antwort-code (404) empfangen wurde, wenn das abrufen des Skripts. (Mitteilungen/nicht-serviceworker-Registrierung).↵ bei https://www.gstatic.com/firebasejs/3.5.2/firebase-messaging.js:41:225"__proto__: Fehler
Der URL, der es versucht, Zugriff auf register der service-Mitarbeiter ist:
http://127.0.0.1:11111/firebase-messaging-sw.js
Also es ist offensichtlich das problem ist, es versucht auf das javascript von meinem lokalen host-Adresse verwenden, anstatt den Speicherort, wo die anderen FB JS-Dateien sind. Also meine Frage ist wie kann ich das ändern, so lädt es die Datei aus der richtigen Quelle?
Diese Skripte sind in meiner HTML-Datei:
<script src="https://www.gstatic.com/firebasejs/3.6.1/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.2/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.2/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.2/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.2/firebase-messaging.js"></script>
<script>
//Initialize Firebase
var config = {
apiKey: "AIzaSyBxdZNXHiLR1IC8Wrw3Y6q_5DFoN8hn_UY",
authDomain: "fir-test-848de.firebaseapp.com",
databaseURL: "https://fir-test-848de.firebaseio.com",
storageBucket: "fir-test-848de.appspot.com",
messagingSenderId: "974661154941"
};
firebase.initializeApp(config);
</script>
Dies ist mein Java code:
public class FB { private JavaScriptObject _messagingHandle; private String _token; öffentliche FB() { _messagingHandle = createMessagingHandle(); requestPermission(_messagingHandle, this); } private native JavaScriptObject createMessagingHandle() /*-{ return $wnd.FB.messaging(); }-*/; private native void listenTokenRefresh(final JavaScriptObject Griff) /*-{ Griff.onTokenRefresh(function() { [email protected]::onTokenRefresh()(); }); }-*/; private void onTokenRefresh() { getToken(_messagingHandle, this); } private native void requestPermission(final JavaScriptObject Griff, final Object-Instanz) /*-{ Griff.requestPermission().dann(function() { $wnd.console.log('Notification-Berechtigung erteilt.'); [email protected]::onPermission(Z)(true); }) }-*/; private void onPermission(final boolean gewährt) { wenn (erteilt) { getToken(_messagingHandle, this); } } private native void getToken(final JavaScriptObject Griff, final Object-Instanz) /*-{ Griff.getToken().dann(function(currentToken) { wenn (currentToken) { [email protected]::onTokenReceived(Ljava/lang/String;)(currentToken); } sonst { //Anzeigen der Berechtigung verlangen. $wnd.console.log('Keine Instanz-ID-token zur Verfügung. Die Erlaubnis zu erzeugen.'); [email protected]::onTokenReceived(Ljava/lang/String;)(null); } }) }-*/; private void onTokenReceived(final String token) { if (token != null) { GWT.log("Empfangene Token:" + token); if (!token.equals(_token)) { //Senden/Update-Tokens an server } } } }
InformationsquelleAutor Roman | 2016-11-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das FB SDK zu registrieren versucht die service-Arbeiter an einem bestimmten Ort.
Die Lage ist + /firebase-messaging-sw.js. Es gibt zwei Optionen:
1.) Stellen + /firebase-messaging-sw.js arbeiten im browser (D. H. stellen Sie sicher, es gibt eine gültige Antwort) und dann versuchen mit der SDK wieder (es sollte funktionieren, wenn der browser auf die Datei zugreifen kann).
2.) Verwenden Sie die
useServiceworker(<service worker registration>)
Methode übergeben Sie einen benutzerdefinierten service-Arbeiter. Das wird noch erfordert, dass Sie eine gültige service-worker-URL.Gesicht, können Sie einen Blick auf diesen thread: stackoverflow.com/questions/42626375/... ich habe versucht, es zu lösen, indem Sie nach Ihren Anweisungen, aber ich weiß nicht wirklich verstehen, warum es funktionieren sollte da "firebase-messaging-sw.js" ist eine hohle Schale.
Es müssen noch die firebase-messaging-sw.js Datei zu registrieren, die Nutzung für den push, aber wenn es nichts wird Hinzugefügt, die Datei dann erhalten die Benutzer eine Benachrichtigung von Chrome sagt "Diese app im hintergrund aktualisiert".
InformationsquelleAutor Matt Gaunt
Erstellen Sie einfach eine leere Datei im root Ordner firebase-messaging-sw.js
Es hat geklappt! Es soll gemeldet werden, weil ein Fehler.
InformationsquelleAutor Rodrigo Asensio
Überprüfen Sie Ihre eckige cli-Datei ...
hinzufügen
"firebase-messaging-sw.js",
"manifest.json"
"assets": [
"assets",
"app/main/content/components/eckig-material",
"favicon.ico",
"firebase-messaging-sw.js",
"manifest.json"
],
InformationsquelleAutor PRATHYUSH P