发送 Firebase Swift 使用 NSURLSession HTTP 推送 Post
Send Firebase Swift Push using NSURLSession HTTP Post
我设置了我的应用程序,以便用户在登录时使用他们的用户 UID 订阅主题。每当一个用户向另一个用户发送消息时,我将调用我希望触发推送的下面的函数。
func sendPushNotification(toUser: String, message: String) {
let urlString = "https://fcm.googleapis.com/fcm/send"
let topic = "\topic\(toUser)"
let url = NSURL(string: urlString)!
let paramString = "to=\(topic)"
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding)!
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in
do {
if let jsonData = data {
if let jsonDataDict = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments) as? [String: AnyObject] {
NSLog("Received data:\n\(jsonDataDict))")
}
}
} catch let err as NSError {
print(err.debugDescription)
}
}
task.resume()
}
根据 Firebase 文档,我应该执行此 HTTP 请求:
Send to a single topic:
https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
{
"to": "/topics/foo-bar",
"data": {
"message": "This is a Firebase Cloud Messaging Topic Message!",
}
}
我正在努力查看我在 paramString 中传递的内容,以便根据他们的示例发送消息。另外,我在哪里定义 Authorization:key=
使用 Firebase Cloud Messaging 发送消息需要您在 Authorization
header 中提供 服务器密钥 。顾名思义,此密钥只能在应用服务器(或您控制的其他基础设施)上运行的代码中使用。将服务器密钥放入您发送给用户的应用程序中,意味着恶意用户可以使用它代表您发送消息。
来自 Firebase documentation on sending messages to topics(强调我的):
From the server side, sending messages to a Firebase Cloud Messaging topic is very similar to sending messages to an individual device or to a user group. The app server sets the to key with a value like /topics/yourTopic
.
我设置了我的应用程序,以便用户在登录时使用他们的用户 UID 订阅主题。每当一个用户向另一个用户发送消息时,我将调用我希望触发推送的下面的函数。
func sendPushNotification(toUser: String, message: String) {
let urlString = "https://fcm.googleapis.com/fcm/send"
let topic = "\topic\(toUser)"
let url = NSURL(string: urlString)!
let paramString = "to=\(topic)"
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding)!
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in
do {
if let jsonData = data {
if let jsonDataDict = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments) as? [String: AnyObject] {
NSLog("Received data:\n\(jsonDataDict))")
}
}
} catch let err as NSError {
print(err.debugDescription)
}
}
task.resume()
}
根据 Firebase 文档,我应该执行此 HTTP 请求:
Send to a single topic:
https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
{
"to": "/topics/foo-bar",
"data": {
"message": "This is a Firebase Cloud Messaging Topic Message!",
}
}
我正在努力查看我在 paramString 中传递的内容,以便根据他们的示例发送消息。另外,我在哪里定义 Authorization:key=
使用 Firebase Cloud Messaging 发送消息需要您在 Authorization
header 中提供 服务器密钥 。顾名思义,此密钥只能在应用服务器(或您控制的其他基础设施)上运行的代码中使用。将服务器密钥放入您发送给用户的应用程序中,意味着恶意用户可以使用它代表您发送消息。
来自 Firebase documentation on sending messages to topics(强调我的):
From the server side, sending messages to a Firebase Cloud Messaging topic is very similar to sending messages to an individual device or to a user group. The app server sets the to key with a value like
/topics/yourTopic
.