我有一个大学项目,我正在开发一个应用,当在Firebase集合“ ocorrencia”上创建新文档时,该应用需要接收推送通知。
我已经尝试过执行此Firebase云功能,但是没有运气,它不起作用,我不知道如何从“管理员”集合中的每个用户读取属性令牌(我的应用程序发送实际的设备令牌)并将其添加到一个数组中,以将该值发送到所有设备。
我也尝试过使用本教程,但是也没有用: https://angularfirebase.com/lessons/ionic-native-with-firebase-fcm-push-notifications-ios-android/
这是我的index.js函数:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.notificacao = functions.firestore
.document('ocorrencia/{ocorrenciaId}')
.onCreate((snap,context) => {
const data = snap.data();
const idAdmin = data.idAdmin
const payload = {
notification: {
title:'Nova Ocorrência',
body:'Uma nova Ocorrência foi registrada'
}
}
var pushToken = "";
return functions
.firestore
.collection("admin/idAdmin")
.get()
.then((doc) => {
pushToken = doc.data().token;
return admin.messaging().sendTodevice(pushToken, payload)
});
})
这是我的应用程序函数,用于将令牌发送到服务器(在用户登录后触发):
async getDeviceToken(){
let token;
token = await this.fcm.getToken();
console.log(this.adminUid);
return this.sendFirestoreToken(token);
}
getAdminUid(){
this.afAuth.authState.subscribe(auth => {
this.adminUid = auth.uid;
})
}
sendFirestoreToken(token){
const adminRef = this.afs.collection('admin')
return adminRef.doc(this.adminUid).update({idAdmin: this.adminUid, token: token});
}
在github上还有我的应用程序仓库: https://github.com/gianveloxbr/MacacoIrmaoADM/tree/master/macacoIrmao
该功能需要在每次将新注册表添加到“ ocorrencia”时触发,并且需要将其发送到具有属性令牌的“ admin”集合中的每个用户。
编辑: 我已经尝试过此代码,但不知道如何通过其ID恢复所有文档
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.notificacao = functions.firestore
.document('ocorrencia/{ocorrenciaId}')
.onCreate((snap,context) => {
const data = snap.data();
const idAdmin = data.context.idAdmin
const db = admin.firestore()
// send a notification to each device token
return Promise.all([admin.database().ref('admin/${}/token').once('value')]).then(
// Don't know how to get every document using ${}
results => {
const token = results[1];
if(!token.hasChildren()) return null;
let payload = {
notification: {
title:'Nova Ocorrência',
body:'Uma nova Ocorrência foi registrada'
}
}
const tokens = Object.keys(token.val());
return admin.messaging().sendToDevice(tokens,payload);
}
)
})
答案 0 :(得分:0)
通过将令牌从主题更改为主题来自己解决问题:
以下是任何人想要实现的代码:
index.js
exports.notificacao = functions.firestore
.document('ocorrencia/{ocorrenciaId}')
.onCreate((snap,context) => {
let payload = {
notification: {
title: 'Nova ocorrência',
body: 'Uma nova ocorrência foi registrada.',
click_action: 'FCM_PLUGIN_ACTIVITY'
}
}
return admin.messaging().sendToTopic("admin",payload).then(response => {
console.log('Notificação enviada com sucesso.', response);
}).catch(error => {
console.log('Erro:', error);
})
}
)
要在用户登录后订阅主题,您需要在app.component.ts上实现该主题
import { FCM } from '@ionic-native/fcm/ngx';
constructor(private fcm:FCM) { }
this.fcm.subscribeToTopic('admin');