如何在 iOS 中发送消息通知?

How to send messages notifications in iOS?

我正在寻找一个小时的方法来做到这一点(没有 Parse,因为它这个月会下降)。

我正在尝试在应用程序中实现一个用户可以向另一个特定用户发送推送通知消息。

有哪些实施方案?(请具体说明)

谢谢。

通常不推荐您查找的内容,因为它很容易成为问题。从技术上讲,用户不应该能够向其他用户发送直接推送通知。所有通知都应通过您的个人用户无法访问的中央系统处理。但是,如果您觉得自己仍然想完成这项工作,请继续阅读。

我使用 FCM 在我的一个应用程序中使用了这样的机制。这是我用来从一个用户向另一个用户发送消息的函数(经过一些修改以取出我的特定信息):

func push(message: String, toUser: String) {
    var token: String?
    for person in self.users {
        if toUser == person.username && person.firebaseToken != nil {
            token = person.firebaseToken
        }
    }
    if token != nil {
        var request = URLRequest(url: URL(string: "https://fcm.googleapis.com/fcm/send")!)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.setValue("key=[your FCM Server Key]", forHTTPHeaderField: "Authorization")
        let json = [
            "to" : token!,
            "priority" : "high",
            "notification" : [
                "body" : message
            ]
        ] as [String : Any]
        do {
            let jsonData = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
            request.httpBody = jsonData
            let task = URLSession.shared.dataTask(with: request) { data, response, error in
                guard let data = data, error == nil else {
                    print("Error=\(error)")
                    return
                }

                if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
                    // check for http errors
                    print("Status Code should be 200, but is \(httpStatus.statusCode)")
                    print("Response = \(response)")
                }

                let responseString = String(data: data, encoding: .utf8)
                print("responseString = \(responseString)")
            }
            task.resume()
        }
        catch {
            print(error)
        }
    }
}

我将这个方法保存在我的 appDelegate 中,并在需要时调用它。基本上,我的应用程序中的每个用户都有一个分配给他们的 Firebase 消息令牌,它只是每个用户的另一个 属性。您可以通过此调用获取用户的 FCM 令牌:

let token = FIRInstanceID.instanceID().token()

通常,令牌可以在用户首次创建帐户时检索并保存。只要用户使用相同的设备,令牌就会保持不变。

同样,如果实施时没有采取适当的安全措施来阻止您的用户完全控制发送推送通知,这可能会非常危险。

我不确定。 虽然状态码是200,但是我看不到任何通知

这是 return 值。

{
    \"multicast_id\":6666941437973455953,
    \"success\":1,
    \"failure\":0,
    \"canonical_ids\":0,
    \"results\":[{\"message_id\":\"0:1490256129594240%03b6b50f03b6b50f\"}]
}