如何在Vapor中向Firebase云消息API发送POST请求
我试图使用Vapor 1.5和Firebase遗留协议向Firebase Notifications API发出POST请求,但收到失败响应 响应是JSON(节点:node.node.object([“multicast\u id”: 节点号(5936281277445399934),“故障”:节点号(0), “规范的_id”:Node.Node.number(0),“results”: Node.Node.array([Node.Node.object([“message_id”): Node.Node.string(“0:1527074314969790%c7ade8b9f9fd7ecd”))], “成功”:节点.节点.编号(1)]) 编辑 通过邮递员发出请求失败,错误为“请求缺少身份验证密钥(FCM令牌)”如何在Vapor中向Firebase云消息API发送POST请求,firebase,firebase-cloud-messaging,vapor,Firebase,Firebase Cloud Messaging,Vapor,我试图使用Vapor 1.5和Firebase遗留协议向Firebase Notifications API发出POST请求,但收到失败响应 响应是JSON(节点:node.node.object([“multicast\u id”: 节点号(5936281277445399934),“故障”:节点号(0), “规范的_id”:Node.Node.number(0),“results”: Node.Node.array([Node.Node.object([“message_id”): Node
发送通知(有效负载:)
中,我有一个输入错误,我错过了键后的=
。它应该是“key=\(fcmLegacyServerKey)”
sendNotification(payload:)
中,不应调用payload.makeBody
,我应该将JSON对象payload
作为参数传递给.post请求李>
aps
的密钥。我应该已通过键通知
,如下所示李>
嘿,比尔西。看到你在上一篇文章中的评论,来到这里。我以前没有使用过vapor,但是授权值的格式是否应该像
“key\(fcmLegacyServerKey)”
?它不应该是普通服务器键值吗?如果这不起作用,也许可以遵循通过邮递员发送的格式,即“key=(fcmLegacyServerKey)”?@AL。我附上了邮递员的屏幕截图,该请求也返回401。那应该是200美元。现在,回到您的问题fcmLegacyServerKey:String是一个变量,所以使用“key=(fcmLegacyServerKey)”是合法的,本质上就像“key=123456AA”
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])
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"
}
}