推送通知从特定设备的特定设备使用火力地堡的iOS斯威夫特

问题描述 投票:6回答:3

我会用推送通知的帮助非常感激。我的应用程序有一个聊天,用户可以直接发送短信给对方。但是,如果没有推送通知它并没有多大意义。这完全是建立在火力地堡。我怎么能发送推送通知,从特定的设备到特定设备?我也尝试火​​力地堡声明和OneSignal由于#2的建议。但我只能从火力地堡或OneSignal而不是直接从特定装置触发的通知发送到特定的设备。

是否有人有这方面的经验?

ios firebase notifications push onesignal
3个回答
9
投票

如果你的数据被存储在Firebease我会用云端通讯推送通知以及。有多种方法来实现这一消息通知功能,我将恢复一个我认为是最简单的。

假设你正在使用FCM,你有configured your app它。

首先你需要存储的用户设备的令牌,这将被存储为每个用户信息的字符串:

let token = Messaging.messaging().fcmToken

因此,在你的火力地堡DB,在每个用户的对象数据,你将有一个关键的存储字符串的道理,如果你希望用户接收多个设备的通知,你必须使用一个数组的存储用户的多个标记字符串,或甚至对象的数组,并存储所述设备类型等那是您的选择和您的需求。

理想的推送通知的环境通常由接收请求并管理和发送通知给相应的用户,在这种情况下,你可以跳过这并不能直接从您的应用程序发送,使用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和变量,您可以发送,哟将需要在您获得设备令牌之前的火力请求。

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() 

我一直在使用相同的解决方案为移动本地应用和反应网络应用程序,它就像一个魅力。


4
投票

在斯威夫特4中,Karlo上面贴一切正常,除了数据(使用:)功能不再可用。

这将需要是这样的:

request.httpBody = try? JSONSerialization.data(withJSONObject: notData, options: [])

一旦我作出改变一切编译和漂亮的工作。


0
投票

您可以针对推送通知到特定的设备很容易。还有这里的具体用途(https://firebase.google.com/docs/cloud-messaging/ios/first-message)给出的教程。

现在你可以按照下面的步骤:

  1. 当“用户”将消息发送到“其他用户”,您可以发送“其他用户的信息到服务器。
  2. 从服务器,可以推送通知发送到“其他用户”
© www.soinside.com 2019 - 2024. All rights reserved.