【发布时间】:2018-11-02 08:30:40
【问题描述】:
我正在尝试使用 Vapor 1.5 和 Firebase Legacy Protocol 向 Firebase Notifications 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)]))
编辑 通过 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])
【问题讨论】:
-
嘿 bibscy。从您之前的帖子中看到您的评论并来到这里。我以前没有使用过 vapor,但是 Authorization 值应该像
"key\(fcmLegacyServerKey)"这样格式化吗?它不应该是普通的服务器键值吗?如果这不起作用,也许遵循通过邮递员发送时的格式,即"key=(fcmLegacyServerKey)"? -
@AL。我附上了 PostMan 的截图,该请求也返回 401。那应该返回 200。现在,回到你的问题 fcmLegacyServerKey: String 是一个变量,所以使用 "key=(fcmLegacyServerKey) 是合法的,本质上它就像 "key=123456AA"
标签: firebase firebase-cloud-messaging vapor