是否可以使用 Firebase Cloud Messaging (FCM) 直接从设备向特殊 UDID 发送 PushNotifications?
Is it possible to send PushNotifications, using Firebase Cloud Messaging (FCM) to special UDID, directly from device?
我正在考虑将所有注册 ID(推送令牌)保存在数据库中并从 iPhone 向用户发送通知。我尝试过类似的操作,但没有收到任何通知。
func sendPNMessage() {
FIRMessaging.messaging().sendMessage(
["body": "hey"],
to: TOKEN_ID,
withMessageID: "1",
timeToLive: 108)
}
我做错了什么或者根本不可能?
目前无法从应用程序本身发送消息。
您可以从 Firebase Web 控制台或使用服务器端 APIs.
的自定义服务器发送消息
您可能想要联系服务器(例如通过 http 调用),该服务器会将消息发送给用户。
这样可以确保服务器的 API-KEY 受到保护。
PS:sendMessage(..)
api 称为上游功能,如果您的服务器与FCM 服务器。
是的,您可以通过 Firebase.Please 发送推送通知,确保不要将 server-key 包含在您的客户端中。有很多方法 "for not so great people" 可以找到它并做一些事情...实现这一点的正确方法是让您的客户指示您的 app-server 发送通知。
您必须发送 HTTP-Post 到 Google-API-Endpoint。
您需要以下内容headers:
Content-Type: application/json
Authorization: key={your_server_key}
You can obtain your server key within in the Firebase-Project.
HTTP-Post-Content: Sample
{
"notification": {
"title": "Notification Title",
"text": "The Text of the notification."
},
"project_id": "<your firebase-project-id",
"to":"the specific client-device-id"
}
Google Cloud Functions 现在可以在没有应用程序服务器的情况下从设备到设备发送推送通知。
From the Google Cloud Functions documentation:
Developers can use Cloud Functions to keep users engaged and up to
date with relevant information about an app. Consider, for example, an
app that allows users to follow one another's activities in the app.
In such an app, a function triggered by Realtime Database writes to
store new followers could create Firebase Cloud Messaging (FCM)
notifications to let the appropriate users know that they have gained
new followers.
Example:
The function triggers on writes to the Realtime Database path where followers are stored.
The function composes a message to send via FCM.
FCM sends the notification message to the user's device.
Here is a demo project 用于使用 Firebase 和 Google Cloud Functions 发送设备到设备的推送通知。
使用一个信号,你可以发送设备到通知或设备到段,它可以通过这种方式与 firebase 一起工作
使用onesignal函数创建一个特定的id,将其保存在firebase数据库中,然后当id可以放入另一个用于发送通知的函数中时
注意:1-我在我的应用程序中使用它与 firebase 完美结合
2-我可以提交那个代码,只是有人评论所以我可以找到这个答案
Diego 的回答非常准确,但是 firebase 也有云功能,在数据库的每次更改中发送通知非常方便。例如,假设您正在构建聊天应用程序并在每次新关注者更改时发送通知。
This function sample 是很好的例子。
有关云函数的更多信息,您可以查看official docs。
我有一个应用有“向开发者发送反馈”部分。我的 firestore 数据库中也有一个用户集合。当用户登录应用程序时,我让用户数据在我的 SceneDelegate.swift:
中使用以下代码更新他们的 FCM 令牌
import Firebase
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
authListener = Auth.auth().addStateDidChangeListener({ (auth, user) in
Auth.auth().removeStateDidChangeListener(self.authListener!)
if user != nil {
DispatchQueue.main.async {
let docRef = Firestore.firestore().collection("User").document((user?.email)!)
docRef.getDocument { (snapshot, error) in
guard let snapshot = snapshot else {return}
Messaging.messaging().token { token, error in
if let error = error {
print("Error fetching FCM registration token: \(error)")
} else if let token = token {
docRef.updateData(["FCMtoken":token])
print("FCM registration token: \(token)")
}
}
}
}
}
})
guard let _ = (scene as? UIWindowScene) else { return }
}
然后在我的反馈视图控制器中,我有这个代码来发送我的特定设备(但你可以在你的数据库中查看 up/fetch 你想要哪个特定设备,FCMtoken 存储在我有 INSERT-DEVICE- 的地方令牌-这里)。要发送到的 url 是“https://fcm.googleapis.com/fcm/send”,您可以通过转到 firebase 中的项目设置找到 YOUR-APP-FCM-KEY,转到云端消息选项卡及其服务器密钥。
func sendMePushNotification() {
let token = "INSERT-DEVICE-TOKEN-HERE"
if let url = URL(string: "https://fcm.googleapis.com/fcm/send") {
var request = URLRequest(url: url)
request.allHTTPHeaderFields = ["Content-Type":"application/json", "Authorization":"key=YOUR-APP-FCM-KEY"]
request.httpMethod = "POST"
request.httpBody = "{\"to\":\"\(token)\",\"notification\":{\"title\":\"Feedback Sent!\",\"body\":\"\(self.feedbackBox.text!)\",\"sound\":\"default\",\"badge\":\"1\"},\"data\": {\"customDataKey\": \"customDataValue\"}}".data(using: .utf8)
URLSession.shared.dataTask(with: request) { (data, urlresponse, error) in
if error != nil {
print("error")
} else {
print("Successfully sent!.....")
}
}.resume()
}
}
我正在考虑将所有注册 ID(推送令牌)保存在数据库中并从 iPhone 向用户发送通知。我尝试过类似的操作,但没有收到任何通知。
func sendPNMessage() {
FIRMessaging.messaging().sendMessage(
["body": "hey"],
to: TOKEN_ID,
withMessageID: "1",
timeToLive: 108)
}
我做错了什么或者根本不可能?
目前无法从应用程序本身发送消息。 您可以从 Firebase Web 控制台或使用服务器端 APIs.
的自定义服务器发送消息您可能想要联系服务器(例如通过 http 调用),该服务器会将消息发送给用户。 这样可以确保服务器的 API-KEY 受到保护。
PS:sendMessage(..)
api 称为上游功能,如果您的服务器与FCM 服务器。
是的,您可以通过 Firebase.Please 发送推送通知,确保不要将 server-key 包含在您的客户端中。有很多方法 "for not so great people" 可以找到它并做一些事情...实现这一点的正确方法是让您的客户指示您的 app-server 发送通知。
您必须发送 HTTP-Post 到 Google-API-Endpoint。
您需要以下内容headers:
Content-Type: application/json
Authorization: key={your_server_key}
You can obtain your server key within in the Firebase-Project.
HTTP-Post-Content: Sample
{
"notification": {
"title": "Notification Title",
"text": "The Text of the notification."
},
"project_id": "<your firebase-project-id",
"to":"the specific client-device-id"
}
Google Cloud Functions 现在可以在没有应用程序服务器的情况下从设备到设备发送推送通知。
From the Google Cloud Functions documentation:
Developers can use Cloud Functions to keep users engaged and up to date with relevant information about an app. Consider, for example, an app that allows users to follow one another's activities in the app. In such an app, a function triggered by Realtime Database writes to store new followers could create Firebase Cloud Messaging (FCM) notifications to let the appropriate users know that they have gained new followers.
Example:
The function triggers on writes to the Realtime Database path where followers are stored.
The function composes a message to send via FCM.
FCM sends the notification message to the user's device.
Here is a demo project 用于使用 Firebase 和 Google Cloud Functions 发送设备到设备的推送通知。
使用一个信号,你可以发送设备到通知或设备到段,它可以通过这种方式与 firebase 一起工作 使用onesignal函数创建一个特定的id,将其保存在firebase数据库中,然后当id可以放入另一个用于发送通知的函数中时 注意:1-我在我的应用程序中使用它与 firebase 完美结合 2-我可以提交那个代码,只是有人评论所以我可以找到这个答案
Diego 的回答非常准确,但是 firebase 也有云功能,在数据库的每次更改中发送通知非常方便。例如,假设您正在构建聊天应用程序并在每次新关注者更改时发送通知。 This function sample 是很好的例子。
有关云函数的更多信息,您可以查看official docs。
我有一个应用有“向开发者发送反馈”部分。我的 firestore 数据库中也有一个用户集合。当用户登录应用程序时,我让用户数据在我的 SceneDelegate.swift:
中使用以下代码更新他们的 FCM 令牌import Firebase
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
authListener = Auth.auth().addStateDidChangeListener({ (auth, user) in
Auth.auth().removeStateDidChangeListener(self.authListener!)
if user != nil {
DispatchQueue.main.async {
let docRef = Firestore.firestore().collection("User").document((user?.email)!)
docRef.getDocument { (snapshot, error) in
guard let snapshot = snapshot else {return}
Messaging.messaging().token { token, error in
if let error = error {
print("Error fetching FCM registration token: \(error)")
} else if let token = token {
docRef.updateData(["FCMtoken":token])
print("FCM registration token: \(token)")
}
}
}
}
}
})
guard let _ = (scene as? UIWindowScene) else { return }
}
然后在我的反馈视图控制器中,我有这个代码来发送我的特定设备(但你可以在你的数据库中查看 up/fetch 你想要哪个特定设备,FCMtoken 存储在我有 INSERT-DEVICE- 的地方令牌-这里)。要发送到的 url 是“https://fcm.googleapis.com/fcm/send”,您可以通过转到 firebase 中的项目设置找到 YOUR-APP-FCM-KEY,转到云端消息选项卡及其服务器密钥。
func sendMePushNotification() {
let token = "INSERT-DEVICE-TOKEN-HERE"
if let url = URL(string: "https://fcm.googleapis.com/fcm/send") {
var request = URLRequest(url: url)
request.allHTTPHeaderFields = ["Content-Type":"application/json", "Authorization":"key=YOUR-APP-FCM-KEY"]
request.httpMethod = "POST"
request.httpBody = "{\"to\":\"\(token)\",\"notification\":{\"title\":\"Feedback Sent!\",\"body\":\"\(self.feedbackBox.text!)\",\"sound\":\"default\",\"badge\":\"1\"},\"data\": {\"customDataKey\": \"customDataValue\"}}".data(using: .utf8)
URLSession.shared.dataTask(with: request) { (data, urlresponse, error) in
if error != nil {
print("error")
} else {
print("Successfully sent!.....")
}
}.resume()
}
}