我非常感谢Push Notifications的帮助.我的应用聊天,用户可以直接向对方发送短信.但是如果没有Push Notifications,它就没有多大意义.它全部设置在Firebase上.如何将推送通知从特定设备发送到特定设备?由于Stackoverflow的推荐,我确实尝试过Firebase Notifications和Onesignal.但我只能直接从Firebase或Onesignal触发通知,而不能从特定设备触发到特定设备.
有人有经验吗?
解决方法
如果您的数据存储在Firebease中,我也会使用云消息传递进行推送通知.有多种方法可以实现这种消息通知功能,我将恢复我认为最简单的方法.
假设您正在使用FCM并且它有configured your app.
首先,您需要存储用户设备的令牌,这将存储为每个用户信息的字符串:
let token = Messaging.messaging().fcmToken
因此,在您的Firebase数据库中,在您的每个用户对象数据中,您将拥有一个存储带有令牌的字符串的密钥,如果您希望用户在多个设备中接收通知,则必须使用数组来存储用户的多个令牌.字符串,甚至是一组对象,并存储设备类型等.这是您的选择和需求.
理想的推送通知环境通常由接收请求并管理并向相应用户发送通知的中间服务器组成,在这种情况下,您可以跳过此操作并使用FCM POST request service直接从您的应用程序发送:
如何构建发送通知的FCM POST请求的示例:
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"
在这里你把所有不是数据,读取docs to understand all the keys和你可以发送的变量,你需要做一个先前的firebase请求,你获得设备令牌.
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. ] ]
然后你发送帖子请求,如果通知成功并且有更多数据,它将返回一个对象.
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()