You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI+Firebase:Firestore新增文档时如何用Swift发送全量推送通知

完全可以实现,不需要Node.js开发经验,有两种实现方案可以选,你可以根据自己的应用场景挑:

方案1:直接在客户端add函数中添加推送逻辑(仅适合个人Demo使用)

这种就是你想要的直接修改现有函数的实现方式,逻辑简单,但安全风险很高,绝对不能用于线上生产环境:

  • 你需要先在Firebase控制台获取到你的FCM服务端密钥
  • 所有用户打开应用时自动订阅FCM的all_users主题,后续你只要向该主题发送推送就能覆盖所有安装应用的设备
  • 修改你的add函数,新增文档成功后调用FCM接口发送推送即可

参考实现代码:

import Foundation
import FirebaseMessaging

// 应用启动时调用一次,让当前设备订阅全员推送主题
func subscribeAllUsersTopic() {
    Messaging.messaging().subscribe(toTopic: "all_users") { error in
        if let error = error {
            print("订阅主题失败: \(error.localizedDescription)")
        }
    }
}

func add(_ card: Card) {
    do {
        _ = try store.collection(path).addDocument(from: card)
        // 新增成功后触发全员推送
        sendGlobalPush(title: "新内容更新", body: "有新的卡片发布了,点击查看详情")
    } catch {
        fatalError("Unable to add card: \(error.localizedDescription).")
    }
}

func sendGlobalPush(title: String, body: String) {
    let fcmServerKey = "替换为你自己的FCM服务端密钥"
    guard let url = URL(string: "https://fcm.googleapis.com/fcm/send") else { return }
    
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("key=\(fcmServerKey)", forHTTPHeaderField: "Authorization")
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    
    let payload: [String: Any] = [
        "to": "/topics/all_users",
        "notification": [
            "title": title,
            "body": body,
            "sound": "default"
        ],
        "data": ["type": "new_card"]
    ]
    
    guard let httpBody = try? JSONSerialization.data(withJSONObject: payload) else { return }
    request.httpBody = httpBody
    
    URLSession.shared.dataTask(with: request) { _, _, error in
        if let error = error {
            print("推送发送失败: \(error.localizedDescription)")
            return
        }
        print("推送已触发")
    }.resume()
}

注意:这个方案需要把FCM服务端密钥硬编码在客户端代码中,应用一旦被反编译密钥就会泄露,恶意人员可以随意向你的所有用户发送推送,仅适合自己测试使用。


方案2:用Swift编写Firebase云函数(生产环境推荐)

现在Firebase云函数已经支持Swift运行时,你完全不需要写Node.js,用你熟悉的Swift语法写服务端逻辑即可,这是正式上线应用的标准实现:

  1. 配置好Firebase CLI,初始化云函数时选择Swift作为开发语言
  2. 编写云函数监听你卡片存储集合的onCreate事件,事件触发时调用FCM向all_users主题发送推送
  3. 将云函数部署到Firebase服务器,后续所有新增文档的操作都会自动触发云函数发送推送,不需要修改你现有客户端的任何代码

该方案所有逻辑跑在Firebase的服务端,不会泄露任何密钥,安全性有保障,也不受客户端运行状态的影响,就算用户添加卡片后立刻退出应用,推送也能正常发送。


内容的提问来源于stack exchange,提问作者benpomeroy9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:48:03