我正在构建一个Flutter应用程序。我在europe-central2中有一个名为"signals"的Firestore集合。我在应用程序中设置了Cloud Messaging,当应用程序在后台时,它就可以工作。现在我想让它在我的"signals"集合中每次创建新文档时都会发出通知。我已经尝试了以下Cloud Functions**:
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
var serviceAccount = require("../../serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
//databaseURL: "https://com-rescuer-com-rescuer.europe-central2.firebasedatabase.app"
});
const token = "<the-token-I-got-from-the-emulator-and-works-for-cloud-messaing>";
exports.pushNotifications = functions
.region('europe-central2')
.firestore.document("signals/{docId}").onCreate(
(snapshot) => {
return admin.messaging().sendToDevice(
token,
{
notification: {
title: "A New Notification",
body: "Hello world!",
}
}
);
}
);
但是,它不起作用。使用凭据和/或databaseURL参数,它会在部署时抛出错误,如果没有它们,当调用函数时(当我看到云函数日志时),我会收到"拒绝访问"消息。我已经调用了firebase init
并全局安装了firebase工具。
在Flutter方面,我是这样做的:
final FirebaseMessaging firebaseMessaging = FirebaseMessaging.instance;
final token = await firebaseMessaging.getToken();
print('token $token'); // this is how I get the token for now
firebaseMessaging.requestPermission(
provisional: true,
);
firebaseMessaging.setForegroundNotificationPresentationOptions(
alert: true,
badge: true,
sound: true,
);
我想:
- 无论应用程序是前台、后台还是已停止,都能够显示通知。
- 额外的好处是某种定位。例如,我有一堆区域,我想向关注这些区域的用户发送有关新信号的通知
- 通知将是关于信号列表中的一个信号。我想传递某种密钥来打开前端上特定的新创建的信号。
2条答案
按热度按时间c9x0cxw01#
如果您在应用程序处于暂停状态或关闭状态时收到通知,这意味着您也将在应用程序处于打开状态时收到通知。
您唯一需要做的就是处理从打开状态的通知中获得的数据,因为它不会像我们在关闭状态中获得的那样显示弹出窗口。
为了向处于打开状态的用户显示通知,请使用本地通知技术。
你需要在初始化Firebase云消息的flutter应用程序中正确处理这个问题。
mm9b1k5b2#
这是我使用
Cloud Functions
发送通知的代码可以使用通配符模式
{}
在代码的第3行中设置首选文档的路径要在应用程序中打开新屏幕的通知,请参阅this video
要向特定区域的人发送通知,如果您使用的是
Cloud Messaging
,则可以针对特定区域创建一个新的通知活动。否则,您最好的选择是为每个区域创建单独的集合。默认情况下,
Firebase Messaging
会在您的应用处于后台或终止时显示通知。如果您的应用在通知到达时正在运行,则不会弹出通知。因此,只有在此情况下,您才可以使用this package来弹出通知。快乐编码!