我正在将我的iOS应用程序从CloudKit转换为Firestore。到目前为止,除了通知之外,一切正常。我有用户订阅了特定主题,如果我使用网站发送消息,效果很好。
但是,我需要我的iOS应用程序发送消息,谷歌提供了有关如何执行此操作的出色文档。他们的指示是
(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 v1(最新版本的 FCM(,则需要改为从服务器发送。Firebase 提供管理员 SDK,使您能够在服务器端访问 Firebase 产品。然后,您不必处理生成凭据或生成请求。
通过 POST 请求而不是通过管理员 SDK 使用 FCM v1 终端节点时,将使用服务帐号密钥 JSON 文件生成 FCM v1 的凭据。请参阅指南中的说明。您可以在此处从 Firebase 控制台下载该文件。选择项目以转到仪表板中的位置。本指南中包含用于从文件获取凭据的代码。