- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用调用 Firebase 云函数的 iOS 应用程序来存储 FCM token ,供以后发送通知时使用。问题是它不起作用。
我正在使用 Cloud Firestore 数据库。
当函数被调用时,这就是我想要发生的事情。该函数根据数据库检查参数。如果提供的参数中的数据已在数据库中找到,则什么也不会发生。如果找不到,则应将其添加到数据库中。
我的云函数代码如下。如果有人能帮我找到确切的问题,我会很高兴。
exports.addNewElement = functions.https.onCall((data, context) => {
console.log('--addNewElement-- has been called with:\n' + data.fcmToken + '\n!!');
var collectionRef = db.collection("THE_COLLECTION");
// Create a query against the collection.
var query = collectionRef.where("fcmToken", "==", data.fcmToken);
query.get().then(function(doc) {
if (doc.exists) { // We should do nothing.
console.log("Document data:", doc.data());
} else { // We should add the new element.
// doc.data() will be undefined in this case
console.log("No such document!");
collectionRef.add({"fcmToken": fcmToken})
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
});
我可以想象其他方向来处理 FCM 代币。有什么推荐的方法可以用作最佳实践吗?
最佳答案
我采取了一些不同的方法。我有一个 ionic 应用程序,在应用程序向 FCM 注册后(我们有 FCM token ),我将 token 直接从应用程序添加到“设备”集合中。这样,用户可以登录到多个设备,我们将拥有每个设备的 token ,使我们能够将消息发送到每个设备。如果您想向用户发送消息,您可以查询该 uid 的设备集合以获取该用户的所有 token
保存 token :
private saveTokenToFirestore(person: Person, token) {
if (!token) return;
const devicesRef = this.afs.collection('devices')
const docData = {
token,
userId: person.id,
}
return devicesRef.doc(token).set(docData)
}
其中 person.id 是 firebase uid。
然后我使用 firebase 函数来监控一些节点以确定何时发送 FCM 消息。
例如我们有以个人为成员的团队,他们可以互相聊天。当一个人向团队发送消息时,每个团队成员(发送者本人除外)都需要收到通知。
向除发送者本人以外的所有成员发送通知:
exports.chatMessageOnCreateSendFcm = functions.firestore
.document('chatGroups/{teamId}/messages/{messageId}')
.onCreate(async (snap, context) => {
const data = snap.data();
const teamId = context.params.teamId;
const name = data.pName;
const message = data.msg;
const userId = data.pId;
// Notification content
const payload = {
notification: {
title: name,
body: message,
}
}
const db = admin.firestore();
// get the team (chatGroup)
const teamRef = db.collection('teams').doc(teamId);
const teamSnapshot = await teamRef.get();
const team = teamSnapshot.data();
const devicesRef = db.collection('devices');
const queries: Promise<FirebaseFirestore.QuerySnapshot>[] = team.members
.filter(f => f.id !== userId)
.map(member => {
return devicesRef.where('userId', '==', member.id).get();
});
return Promise.all(queries)
.then((querySnapshots) => {
const tokens = [];
querySnapshots.forEach(snapShot => {
if (snapShot) {
snapShot.docs.forEach(doc => {
if (doc) {
const token = doc.data().token;
if (token) {
tokens.push(token);
}
}
})
}
});
if (tokens.length === 0) {
return Promise.resolve(null);
} else {
return admin.messaging().sendToDevice(tokens, payload);
}
})
.catch(err => {
console.error(err);
return Promise.resolve(null);
});
});
您可以修改以上内容以满足您的需要。希望对你有帮助
关于javascript - 在线存储 FCM 代币,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53588736/
我正在尝试使用 Firebase 云消息传递。我将通知从 Node.js 服务器发送到我注册到通知系统的应用程序。 我的问题是,在 Android 5.1 上,即使我在 nofitification
根据FCM documentation如果 FCM 服务器检测到高优先级消息不会导致用户交互的模式,则高优先级消息可能会被取消优先级。该机制的细节未指定。问题: 这究竟是如何工作的? 检测算法如何收集
更新到最新的 Firebase 后,无法获取所选 的 FCM 注册 token fcmSenderId : FirebaseInstanceId .getInstance()
我想在单个 fcm 请求中向多个设备发送通知。我的通知文本对于所有设备都是相同的。我必须同时向所有用户发送超过 10000 条通知,并且文本是相同的,所以我想以最小的 fcm 请求发送所有通知。我正在
// body 就像这样 { "to": "/topics/NEWS" , "data":{ "extra_information": "This is
当我在浏览器中生成 FCM token 时,我还将其发送到我的服务器,服务器使用 firebase 管理模块将其订阅到主题,如下所示: messaging.subscribeToTopic(token
我正在开发一个应用程序,我想通过 php 实现 FCM 推送通知。 所以我制作了两个java文件:1.FirebaseInstanceID(工作正常并在数据库中正确获取 token )2.Fireba
我正在尝试使用 cordova-plugin-firebasex 向我的cordova 应用程序上的特定用户发送通知这是 cordova-plugin-firebase 的一个 fork 修复和改进。
我正在尝试使用以下方法从我的 iOS-Objective-C 应用发送消息: NSInteger iTime = [NSDate timeIntervalSinceReferenceDate]
我正在尝试为 FCM 实现服务器以向 android/iOS 设备发送通知。 我需要向 android 和 iOS 发送纯数据通知,但 iOS 的后台通知似乎非常不稳定。 (即使该应用程序在前台,我也
我对向手机发送通知的选项感到困惑。我在 Azure 上部署了在 .Net core 中创建的后端。现在,当管理员推出新优惠时,必须将推送通知发送到移动设备。我找到了 3 个很好的替代品。所有人都以自己
我用 POST 设置了一个 REST 客户端 --> https://fcm.googleapis.com/fcm/send 内容类型:应用程序/json 授权: key = JSON 正文: {
我在 Flutter 应用程序中使用 firebase_messaging v9.0.1。关于基于 https://pub.dev/packages/firebase_messaging/exampl
当我使用 Firebase 控制台时,通过激活“高级选项”下的“声音”一切都是完美的,正如 Mouad Abdelghafour AitAli 在接受的答案中所解释的那样 Firebase Push
我已经尝试在 Curl 中使用以下命令使用 Firebase REST Api 发送通知并且它有效: curl -X POST --header "Authorization: key=AIza...
即使 ios 也可以从 fcm 控制台获得通知。 Controller 功能 : public function push(Request $request) { $validator = V
对于通过 XMMP 支持上行和下行消息的服务器端实现,我使用 org.jivesoftware.smack.tcp.XMPPTCPConnection。我从 GCM 迁移到 FCM,现在我的应用服务器
这是我的代码: function sendToken(token) { $.ajax({ url: 'https://iid.googleapis.com/iid/v1/' + token
这是我第一次使用 Flutter 测试 FCM。我检查了一些来自 GitHub 的 SO 问题和文档。 我能够发送通知,当应用程序未运行时它们会被发送。 如果应用程序正在运行或在后台,则消息不可见。
我正在尝试在未接收但他们在调试 apk 中发送/接收很好的发布应用程序中发送 FCM 通知(在用户之间发送消息、好友请求等),我有对此进行了搜索,发现一些对我不起作用的解决方案 像这样,我把它放在 p
我是一名优秀的程序员,十分优秀!