我正在将我的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。\”。我创建了新的服务器密钥,但仍然收到相同的错误。以下是我在“授权”字段中尝试过的方法...当然没有括号
在解决此授权错误方面的任何帮助将不胜感激!
答案 0 :(得分:2)
FCM v1不会仅从服务器发送来自客户端的消息。您需要使用XMPP直接从客户端发送传出消息。就个人而言,我更喜欢从服务器发送。您可以向服务器发送外发请求以处理消息,或触发Cloud Function自动运行。
如果要使用FCM最新版本FCM v1,则需要从服务器发送。 Firebase提供Admin SDKs,使您可以在服务器端访问Firebase产品。然后,您不必处理生成凭据或构建请求。
当通过POST请求而不是通过Admin SDK使用FCM v1端点时,将使用服务帐户密钥JSON文件生成FCM v1的凭据。请参阅guide中的说明。您可以从Firebase控制台here下载文件。选择您的项目以转到仪表板中的位置。该指南中包括用于从文件中获取凭据的代码。