我希望你能帮助我处理推送通知。我的应用程序有一个聊天功能,用户可以直接向彼此发送文本消息。但是没有推送通知就没有多大意义。它已经在Firebase上设置好了。我如何从特定设备向另一个特定设备发送推送通知?我尝试过Firebase通知和OneSignal,因为Stackoverflow上的建议。但是我只能直接从Firebase或OneSignal触发通知,而无法从特定设备向另一个特定设备发送通知。
有人有相关经验吗?
有人有相关经验吗?
let token = Messaging.messaging().fcmToken
let url = URL(string: "https://fcm.googleapis.com/fcm/send")!
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("key=--HERE-GOES-YOUR-API-KEY--", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
var notData: [String: Any] = [
"to" : "HERE YOU PUT THE DEVICE TOKEN(s)",
"notification": [
title : "not title",
body : "not body",
icon : "not icon"
],
"data": [
//More notification data.
]
]
然后您发送POST请求,如果通知成功并返回更多数据,则会返回一个对象。
request.httpBody = notData.data(using: .utf8)
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()
我已经在移动本地应用程序和React Web应用程序中使用了相同的解决方案,它的效果非常好。
request.httpBody = try? JSONSerialization.data(withJSONObject: notData, options: [])
我进行了那个更改后,所有内容都编译并且美妙地工作了。
您可以轻松地将推送通知定向到特定设备。这里提供了一个专门用于此目的的教程(https://firebase.google.com/docs/cloud-messaging/ios/first-message)。
现在,您可以按照以下步骤操作:
["token1","token2","token3","token4","token5"]
- Karlo A. López--HERE-GOES-YOUR-API-KEY--
)。正如其名称所示,此密钥应仅在服务器或其他受信任的环境中使用。通过将此密钥嵌入应用程序中,恶意用户可能会获取它,然后可以代表您向所有用户发送通知。 - Frank van Puffelen"content_available": true
,否则接收应用程序的didReceiveRemoteNotification
不会被触发,您将无法使用'userInfo'。我刚刚遇到了这个问题..您可以在https://stackoverflow.com/questions/56376255/push-notifications-are-delivered-but-didreceiveremotenotification-is-never-calle/56382289#56382289查看我的问题。 - Vincenzo