[英]sending an alert messages from server to client automatically without postbacks
[英]Sending messages from NodeJS server to Web client
我正在尝试将邮件从服务器发送到客户端,但无法完全正常工作(从不调用onMessage
处理程序)。
每当我运行服务器代码时,在chrome://gcm-internals/
标签中,我都可以看到传入的消息。这意味着服务器与浏览器之间的连接正常。 问题必须在客户端代码中。
一般流程如下:
客户端代码(伪代码)连接到firebase
,获取token
,订阅onMessage
事件。
服务器代码(伪代码)连接到firebase
使用客户端的令牌向客户端发送payload
客户代码:
import firebase from 'firebase/app'
require('firebase/messaging')
import { serviceWorkerRegistration } from './worker.service'
const config = {
apiKey: <...>,
authDomain: <...>,
databaseURL: <...>,
projectId: <...>,
storageBucket: <...>,
messagingSenderId: <...>
}
const app = firebase.initializeApp(config)
const messaging = firebase.messaging()
messaging.useServiceWorker(serviceWorkerRegistration)
messaging.getToken()
.then(token => console.log(token)
.catch(error => console.log(error))
messaging.onMessage(function (payload) {
console.log('Message received:', payload)
})
服务器代码:
const admin = require('firebase-admin')
const config = require('./config')
const signature = require('./signature.json')
admin.initializeApp({
credential: admin.credential.cert(signature),
databaseURL: config.databaseURL
})
const messaging = admin.messaging()
const token = <...>
const payload = {
data: {
text: "Hello from server"
}
}
admin.messaging().sendToDevice(token, payload)
.then(function(response) {
console.log('response:',response)
console.log('response.results:',response.results)
})
.catch(function(error) {
console.log("Error sending message:", error)
})
据我从文档中了解到,此设置可以在app处于foreground
时处理传入消息,但由于某些原因它无法正常工作。 我想念什么?
显然,要使通知和消息正常工作,有必要在service worker
文件中启动messaging
。
service-worker.js(代码段)
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js')
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js')
firebase.initializeApp({ messagingSenderId: <...> })
const messaging = firebase.messaging()
messaging.setBackgroundMessageHandler(function (payload) {
console.log(payload)
const title = payload.data.title
const options = {
body: payload.data.title,
icon: '/notification-icon-192.png'
}
return self.registration.showNotification(title, options)
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.