[英]Firestore Messaging: Sending message to Topic with Swift
我正在将我的iOS应用程序从CloudKit转换为Firestore。 到目前为止,除通知外,其他所有功能都运行良好。 我让用户订阅了特定主题,如果我使用该网站发送消息,该主题将非常有用。
但是,我需要我的iOS应用程序才能发送消息,而google提供了有关如何执行此操作的出色文档。 他们的指示是
(Send to a single Topic)
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer (Server Key)
{
"message":{
"topic" : "foo-bar",
"notification" : {
"body" : "This is a Firebase Cloud Messaging Topic Message!",
"title" : "FCM Message"
}
}
}
因此,为了做到这一点,我决定使用一个http请求来发布该信息。 这是我的代码...
let json: [String: Any] = ["message": ["topic":"\(Items.sharedInstance.clubSelected2.id)", "notification":["body":"Test Body","title":"Test Title"]]]
let jsonData = try? JSONSerialization.data(withJSONObject: json)
let url = URL(string: "https://fcm.googleapis.com/v1/projects/(My Project)/messages:send")!
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("Bearer (My Server Key)", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
request.httpBody = jsonData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
// check for fundamental networking error
print("error=\(error)")
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(responseString)")
}
task.resume()
有了所有这些,我将收到错误消息“请求具有无效的身份验证凭据。预期的OAuth 2访问令牌,登录cookie或其他有效的身份验证凭据。请参阅https://developers.google.com/identity/sign-in/web/devconsole -project 。\\“。 我创建了新的服务器密钥,但仍然收到相同的错误。 以下是我在“授权”字段中尝试过的内容...当然没有括号
可以解决此授权错误的任何帮助将不胜感激!
FCM v1不会仅从服务器发送来自客户端的消息。 您需要使用XMPP直接从客户端发送传出消息。 就个人而言,我更喜欢从服务器发送。 您可以向服务器发送传出请求以处理该消息,或者触发云功能自动运行。
如果要使用FCM最新版本FCM v1,则需要从服务器发送。 Firebase提供了Admin SDK ,使您可以在服务器端访问Firebase产品。 然后,您不必处理生成凭据或构建请求。
当通过POST请求而不是通过Admin SDK使用FCM v1端点时,将使用服务帐户密钥JSON文件生成FCM v1的凭据。 请参阅指南中的说明 。 您可以在此处从Firebase控制台下载文件。 选择您的项目以转到仪表板中的位置。 该指南中包括用于从文件中获取凭据的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.