如何在 Vapor 中向 Firebase Cloud Messaging API 发送 POST 请求

2023-11-26

我尝试使用 Vapor 1.5 和 Firebase 旧协议向 Firebase 通知 API 发出 POST 请求,但收到失败响应。

响应是 JSON(node: Node.Node.object(["multicast_id": Node.Node.number(5936281277445399934), "失败": Node.Node.number(0), “canonical_ids”:Node.Node.number(0),“结果”: Node.Node.array([Node.Node.object(["message_id": Node.Node.string("0:1527074314969790%c7ade8b9f9fd7ecd")])]), “成功”:Node.Node.number(1)]))

EDIT通过 POSTMan 发出请求失败,并出现错误“请求缺少身份验证密钥(FCM 令牌)”。

class FirebaseRequester {
 let fcmLegacyServerKey = "AIzaSyDSuXXXXXXkCafTQay5_r8j3snvVos"

 func sendNotification(payLoad: JSON) throws -> Response {

    var response: Response?
    do {
        let responseFCM = try drop.client.post("https://fcm.googleapis.com/fcm/send", 
           headers: ["Content-Type":"application/json","Authorization": "key\(fcmLegacyServerKey)"], 
           query: [:], 
          body: payLoad.makeBody())

        response = responseFCM

    }catch let error {
        let message = error.localizedDescription
        logErr.prints(message: message)
        throw Abort.custom(status: .badRequest, message: message)
    }

    guard let rsp = response?.json else {


        let message = "no json received on line \(#line)"
        drop.log.error(message)
        logErr.prints(message: message)
        throw Abort.custom(status: .badRequest, message: message)
     }
  print("rsp in json format is \(rsp)")
      return response!
 }//end of sendNotification()
}//end of class FirebaseRequester




      //make another class here and initialize it with  FirebaseRequester
      //get data from Client App 
      // validate data 
      // finally, create the payLoad and call sendNotification(:)
     //request should look like 
{
  "aps": {
    "alert": "Breaking News!",
    "sound": "default",
    "link_url": "https://raywenderlich.com"
 }
}

     let fcmKeyToSendTo = "someDeviceTokenKeyReceivedFromClient_biHZNI-e9E53WEkCzrki"

            let data = try Node(node: ["alert": "alert", "sound": "sound", "link_url": "https://www.someWebsite.com"])

     var payLoadObj = try JSON(node: ["aps" : data])
     payLoadObj["to"] = try JSON(node: fcmKeyToSendTo)

            do {
                let _ = try firebaseRequester.sendNotification(payLoad: payLoadObj)
            }catch{
                logErr.prints(message: error.localizedDescription)
            }

            let message = "notification Sent"
            return try JSON(node:["success":message])

enter image description here enter image description here


  1. In sendNotification(payload:)我有一个错字,我错过了=钥匙后。本来应该是"key=\(fcmLegacyServerKey)"
  2. In sendNotification(payload:), payLoad.makeBody不应该被调用,我应该刚刚传递 JSON 对象payLoad作为 .post 请求的参数。
  3. 通知的 JSON 对象从一开始就明显格式错误。我想发送的消息类型是通知,但我传递了一个名为aps。我应该已经传递了钥匙notification如下所示。

.

class FirebaseRequester {

  let fcmLegacyServerKey = "AIzaSy....vVos"

  func sendNotification(payLoad: JSON) throws -> Response {

  var response: Response?
   do {
     let responseFCM = try drop.client.post("https://fcm.googleapis.com/fcm/send", 
       headers: ["Content-Type":"application/json","Authorization": "key=\(fcmLegacyServerKey)"], 
       query: [:], 
      body: payLoad

      response = responseFCM

  }catch let error {
     let message = error.localizedDescription
     logErr.prints(message: message)
     throw Abort.custom(status: .badRequest, message: message)
 }
   guard let rsp = response?.json else {

    let message = "no json received on line \(#line)"
    drop.log.error(message)
    logErr.prints(message: message)
    throw Abort.custom(status: .badRequest, message: message)
   }
    return response!
  }//end of sendNotification()
}//end of class FirebaseRequester



class TestRouteNow {

  let firebaseRequester: FirebaseRequester

  init(firebaseRequester: FirebaseRequester) {
     self.firebaseRequester = firebaseRequester
  }

  func addRoutes(drop: Droplet) {
     drop.post("test", "notif", handler: postNotification)
  }

   func postNotification(request: Request) throws -> ResponseRepresentable {

   let fcmDevice = "someDeviceTokenReceivedFromClientApp"
   let data = try Node(node: ["title": "title","body": "body", "sound": "default", "badge":"60"])

    var payLoadObj = try JSON(node: ["notification": data])
    payLoadObj["to"] = try JSON(node: fcmDevice)

      do {
        let _ = try firebaseRequester.sendNotification(payLoad: payLoadObj)
            }catch{
                logErr.prints(message: error.localizedDescription)
            }

            let message = "notification Sent"
            return try JSON(node:["success":message]) 
     } 
 }//end of class




    // request body
{
  "to" : "cQDtm_someDeviceTokenReceivedFromClient",
  "priority":"high",

 "notification": {
     "title":"Booking Rescheduled",
      "body": "Cancelled Booking 7830593, for Mon, 12 March",
      "sound":"default",
     "badge": "100"
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Vapor 中向 Firebase Cloud Messaging API 发送 POST 请求 的相关文章

  • 如何设置Firestore安全规则? Resource.data:空值错误

    我需要一些帮助来使我的 Firestore 安全规则发挥作用 这些是我的 Firestore 规则 service cloud firestore match databases database documents match order
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 使用时间戳查询 Firebase 数据

    这是我当前在 Firebase 上的数据设计 数据只是 事件 参考中的 json 列表 时间戳 操作和持续时间字段是固定的 以后可能会添加更多可选字段 backend 7f34e events KQ30Lc6lasdfasdfAi1URf
  • NoClassDefFoundError:com.google.firebase.FirebaseOptions

    我继续得到NoClassDefFoundError在我正在使用的其他测试设备 4 4 2 上 但在我的测试设备 Android 5 1 上运行良好 我尝试了用谷歌搜索的解决方案 但似乎没有任何效果 我正在使用 Firebase 实时数据库
  • Firebase commitChangesWithCompletion on ProfileChangeRequest 未触发

    我从 Firebase 参考中获取确切的代码 将其放入方法中 然后完成处理程序 也不是函数 执行 有谁知道为什么吗 let user FIRAuth auth currentUser if let user user let changeR
  • FIRMessaging 委托错误

    我尝试添加 FIRMessagingDelegate 但 Xcode 给出错误 Cannot find protocol declaration for FIRMessagingDelegate 我导入了 FirebaseMessaging
  • Firebase FCM 推送通知停止工作 iOS 11.1.1

    我正在使用 Firebase FCM 从 iOS 设备发送推送通知 直到昨天 推送通知仍然有效 当我现在发送推送通知时 一切都显示成功 但设备上没有收到任何信息 如果我直接通过curl请求发送 这就是响应 multicast id 7815
  • 使用可选的 key 参数限制 firebase equalTo 查询

    我有一种感觉 来自 SQL 背景的我对这个特性的理解可能是错误的 文档很少 我找不到很好的例子或解释 我正在寻求对以下内容的澄清https github com angular angularfire2 blob master docs 4
  • 使用 AngularFireObject 和 switchMap

    我真的不知道如何解决这个问题 我该如何修复这个错误 in user service ts import Injectable from angular core import AngularFireDatabase AngularFireL
  • 更新 firebase firestore 文档内的字段,无需手动编写字段键来更新 Angular

    我如何在我的 firestore 中更新文档而不在代码中精确写入我想要更新的字段 因为已经通过表单到达 假设 Angular 中的 HTML 标签已经带来了密钥和导入 要更新的那个 HTML Tags
  • 在 Firebase 静态托管上托管 Docker 应用程序

    如何将基于 Docker 容器的应用程序托管到 Firebase 静态托管 它甚至可行 允许吗 或者我应该在 Digital Ocean Vultr Linode AWS 等服务上托管基于 Docker 的应用程序 我使用 Firebase
  • 从 GCM/FCM 的生产证书添加 SHA-1

    我有一个使用 FCM 的应用程序 我已将程序包添加到 FCM 它显示 调试签名证书 SHA 1 可选 因此一切按预期工作 现在我正在准备发布 想知道我是否需要将此 SHA 1 证书更改为发布证书中的值 或者它不是必需的 并且在发布时我应该保
  • Firebase数据库在批准后保存数据

    我在 iOS 应用程序上使用 firebase 数据库 我正在快速写作 我正在使用 发送 按钮在我的 firebaseDatabase 上写入数据 例如文本字段和标签值 有什么方法可以接受或拒绝我的数据库中的数据吗 我的意思是 如果用户向文
  • React Redux:调度时无限循环

    我发现这个问题很常见 但我没有找到适合我的情况的解决方案 我正在尝试使用 React 和 Redux 以及 Redux thunk 将用户重定向到 React Native 中的另一个导航器 如果我只显示主屏幕 它工作正常 但是当我从登录屏
  • ios-使用 firebase 发送通知

    我正在尝试创建带有通知的应用程序 通知必须从 php 文件发送到 firebase 然后发送到设备 起初 我尝试使用 firebase 控制台发送 效果完美 但是当我尝试使用 php 发送通知时 我遇到了问题 显示已成功发送 但我没有收到任
  • 将 WordPress 用户导入 Firebase 身份验证

    我正在将我的 Wordpress 网站迁移到 Firebase 我已成功将我的 Wordpress 用户导出为下面的 JSON 格式 如中所述文档 https firebase google com docs cli auth 我相信 Wo
  • 如何将包含所有嵌套数据的Firebase文档移动到其他集合?

    我想将特定文档及其所有嵌套集合从一个集合移动到另一个集合 是否可以 db collection codes doc specificDoc setLocation db collection archive 或者类似的东西 Firestor
  • Firebase Cloud Messaging 是否需要身份验证?

    我有一个带有自定义用户身份验证的 php 服务器 我正在尝试与 Firebase 创建聊天 在阅读文档后 我仍然很困惑 我需要为 Firebase 验证我的用户 如果是这样 我应该使用 signInWithCustomToken 来完成吗
  • 从 firebase 数据库获取最高分值

    在我的网站上有一些我从 firebase 获得的电影 电影的分数在0到100之间 我已经在我的网站上找到了所有电影 我还想按降序显示它们 例如评分最高的 5 部电影 我怎样才能实现这一点 感谢您的回答 const app initializ
  • FCM(Firebase Cloud Messaging)如何发送到所有手机?

    我创建了一个小型应用程序 能够从 FCM 控制台接收推送通知 我现在想做的是向所有使用 API 安装应用程序的 Android 手机发送推送通知 这就是我完全迷失的地方 有没有办法在不收集所有注册ID的情况下将其发送到所有手机 这是否仅适用

随机推荐

  • 在 swift 中为 for 循环添加延迟

    我有一个编码 问题 我有一个标签 我想每 2 秒动态更改一次文本 我做了以下事情 WELCOME STRING ARRAY let welcomeContainer String Welcome Benvenuti Bienvenue Wi
  • 在asp.net mvc中,如何传递整数数组作为参数

    我有一个控制器函数 以前将整数作为 URL 中的每个部分 我在路由文件中设置 但现在其中一个参数需要是整数数组 这是控制器的操作 public JsonResult Refresh string scope int scopeId retu
  • 如何下载 Google App Engine 上的所有数据存储实体?

    我读了GAE 文档 我似乎不知道如何下载我的所有实体数据 我想做的是将整个内容下载为一个大 TSV 文件 或者我可以轻松地合并到其中的文件 这样我就可以将我的各种实体导入到电子表格中并摆弄它们 但我却被困在了起点 我不明白文档的前几位 本文
  • 如何在android中的imageview中从url网站获取图像

    我试图从 url 网站获取 ImageView 中的图像 但图像没有显示 这段代码有什么问题 这是网址image 这是我的主要活动 ImageView i private Bitmap bitmap Override protected v
  • 如何将 CryptoPP::Integer 转换为 char*

    我想将 myVar 转换为CryptoPP Integer to char 或字符串 代码如下 CryptoPP Integer myVar pubKey ApplyFunction m std cout lt lt result lt l
  • C“块”插入符

    我注意到了该声明涉及脱字号 字符固定在 cdecl org 网站的顶部 cast foo into block int long long returning double double int long long foo 有人可以解释一下
  • 在 Woocommerce 中以编程方式添加带有评级的产品评论

    标题说明了一切 我知道评论是 WordPress 中的原生评论帖子类型 我已经包含了添加评论的代码 但问题是我不清楚如何对评论进行评级以及如何将其与特定产品联系起来 当我使用 comment post ID 时 它似乎没有将评论 评论 分配
  • 无法在 Chromium 嵌入式框架中播放视频 (mp4)

    我正在使用 Windows 窗体应用程序和嵌入式 Chromium 嵌入式框架 CEF 除了视频和音频之外 一切都运行良好 我怎样才能让它发挥作用 提前致谢 您需要使用选项来编译 CEF 以启用proprietary codecs 即 H
  • CGFontCreateWithDataProvider 在飞行模式下挂起

    当我打电话给CGFontCreateWithDataProvider 当处于飞行模式时 我的应用程序冻结了 不在飞行模式下 它工作正常 字体存储在设备上 不应进行网络访问 调用该方法加载本地字体文件时 self registerIconFo
  • WordPress 混合内容错误

    我在多站点环境中有 3 个站点 我还为管理部分启用了 SSL 但我得到了很多 混合内容 管理员错误仅适用于ONE地点 结果 管理中的许多脚本和样式表都被破坏了 如果我的有什么问题ht访问规则 or the 可湿性粉剂配置文件 那么其他网站上
  • 如何检测我的程序是否在 Active Directory 环境中运行?

    如何检测我的程序是否在 Active Directory 环境中运行 我正在使用 C 和 Net 2 0 尝试获取Environment UserDomainName 并将其与Environment MachineName 进行比较 如果两
  • 我们可以使用phonegap框架在iphone中进行推送通知吗?

    我需要有关如何使用phonegap 框架实现推送通知的基本概念 我们可以 就在今天早上 该测试版的最新版本为开发人员提供了一个非常令人兴奋的新功能 新消息的推送通知 这意味着应用程序将能够在发生重要事件时发送短信样式的消息 摘自该网站 ht
  • 将变量名称向量传递给 dplyr 中的range()

    我想通过arrange dplyr 要排序的变量名称向量 通常我只是输入我想要的变量 但我试图创建一个函数 其中排序变量可以作为函数参数输入 df lt structure list var1 c 1L 2L 2L 3L 1L 1L 3L
  • Visual Studio 2012 数据库设计器 - 功能是否已更改?

    我最近安装了 Visual Studio 和 SQL Server 2012 我想知道我是否遗漏了一些东西 因为数据库设计器似乎不像旧版本那么友好 在 Visual Studio 2010 中 当我在 App Data 目录中创建 SQL
  • 无法将文件从捆绑包复制到 iOS 中的文档目录

    我正在尝试使用以下代码将文件从我的包复制到 iOS 中的文档目录 let bundlePath NSBundle mainBundle pathForResource information ofType png print bundleP
  • 如何模拟 DriverManager.getConnection(...)?

    我有一个类 它连接到 H2 数据库并运行多个 SQL 语句 public class H2Persistence implements IPersistence private Connection conn Override public
  • 比较 IP 地址是否低于另一个

    任何人都知道如何比较 2 个 ip 地址 看看 ip 地址是否低于另一个 i e bool b CurrentIpAddress IsLowerCompareTo AnotherIPAddress 我还想同时支持 IPV4 和 IPV6 您
  • Iphone 错误终止以响应 SpringBoard 的终止

    我正在真实的手机中测试我的 iPhone 应用程序 当我的程序运行几秒钟时 它自动退出并显示消息 正在响应 SpringBoard 的终止而终止 并在控制台中显示程序正常退出 它是有线的 对吧 我尝试了几次 每次都发生 该程序非常简单 有一
  • 如何解决 Bower 问题:“ENORESTARGET 标签/分支主机不存在”

    我似乎无法让鲍尔从事我当前的项目 该项目是几周前作为一个 yeoman Angular 应用程序开始的 现在记不清我到底做了什么 也无法确定如何修复它 我没有bower components目录 并已删除并重新创建bower js几次 bo
  • 如何在 Vapor 中向 Firebase Cloud Messaging API 发送 POST 请求

    我尝试使用 Vapor 1 5 和 Firebase 旧协议向 Firebase 通知 API 发出 POST 请求 但收到失败响应 响应是 JSON node Node Node object multicast id Node Node