Можно ли отправлять PushNotifications, используя Firebase Cloud Messaging (FCM) в специальный UDID, непосредственно с устройства?
Я думаю о сохранении всех идентификаторов регистрации (push токен) в БД и отправке уведомлений пользователю с iPhone. Я пробовал что-то вроде этого, но не получил никаких уведомлений.
func sendPNMessage() {
FIRMessaging.messaging().sendMessage(
["body": "hey"],
to: TOKEN_ID,
withMessageID: "1",
timeToLive: 108)
}
Что я делаю неправильно или, возможно, вообще невозможно?
Ответы
Ответ 1
В настоящее время невозможно отправлять сообщения из самого приложения.
Вы можете отправлять сообщения с веб-консоли Firebase или с настраиваемого сервера с использованием API-интерфейсов на стороне сервера.
Что вы можете сделать - это связаться с сервером (например, через HTTP-вызов), и этот сервер отправит сообщение пользователю.
Таким образом, убедитесь, что API-ключ сервера защищен.
PS: sendMessage(..)
api называется восходящей функцией и может использоваться для отправки сообщений из вашего приложения на ваш сервер, если сервер имеет соединение XMPP с сервером FCM.
Ответ 2
Да, вы можете отправить push-уведомление через Firebase. Пожалуйста, не включайте серверный ключ в свой клиент. Есть способы "для не очень больших людей" найти его и сделать что-то... Правильный способ добиться этого - для вашего клиента, чтобы он поручил вашему приложению-серверу отправить уведомление.
Вы должны отправить HTTP-сообщение в конечную точку Google-API.
Вам нужны следующие заголовки:
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"
}
Ответ 3
Облачные функции Google теперь позволяют отправлять push-уведомления с устройства на устройство без сервера приложений.
В документации по облачным функциям Google:
Разработчики могут использовать функции Cloud, чтобы поддерживать пользователей и до дату с соответствующей информацией о приложении. Рассмотрим, например, приложение, которое позволяет пользователям следить друг за другом в приложении. В таком приложении функция, запускаемая базой данных Realtime, записывает в новые подписчики могут создавать Firebase Cloud Messaging (FCM) уведомления, чтобы соответствующие пользователи знали, что они получили новых последователей.
Пример:
-
Функция запускает запись в путь базы данных Realtime, где хранятся последователи.
-
Функция создает сообщение для отправки через FCM.
-
FCM отправляет уведомление на пользовательское устройство.
Вот демонстрационный проект для отправки push-уведомлений устройства на устройство с Firebase и облачными функциями Google.
Ответ 4
Диего ответ очень точный, но есть и облачные функции от firebase, очень удобно отправлять уведомления при каждом изменении в БД. Например, допустим, вы создаете приложение чата и отправляете уведомления при каждой новой смене подписчика. Этот образец функции является очень хорошим примером.
Для получения дополнительной информации о облачных функциях вы можете проверить официальные документы.
Ответ 5
Принятый ответ больше не действителен. Некоторое время назад стало возможно отправлять уведомления устройств на устройства с помощью Firebase. Вот проект XCode, который я написал, чтобы продемонстрировать это (он имеет полную обработку push-уведомлений - разрешения, хранение/извлечение токена, уведомления от устройства к устройству и т.д.). Вот код, который отправляет уведомление от приложения к приложению с учетом токена получателя:
func sendPushNotification(to token: String, title: String, body: String) {
let urlString = "https://fcm.googleapis.com/fcm/send"
let url = NSURL(string: urlString)!
let paramString: [String : Any] = ["to" : token,
"notification" : ["title" : title, "body" : body],
"data" : ["user" : "test_id"]
]
let request = NSMutableURLRequest(url: url as URL)
request.httpMethod = "POST"
request.httpBody = try? JSONSerialization.data(withJSONObject:paramString, options: [.prettyPrinted])
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("key=YOUR_KEY", forHTTPHeaderField: "Authorization")
let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
do {
if let jsonData = data {
if let jsonDataDict = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.allowFragments) as? [String: AnyObject] {
NSLog("Received data:\n\(jsonDataDict))")
}
}
} catch let err as NSError {
print(err.debugDescription)
}
}
task.resume()
}
Ответ 6
Используйте onesignal, вы можете отправлять устройства в уведомления или устройства в сегменты, таким образом, он может работать с firebase. Использовать функции onesignal для создания определенного идентификатора, сохранить его в базе данных firebase, затем, когда идентификатор может быть помещен в другую функцию, используется для отправки уведомления Примечания: 1-я использую его в своих приложениях с Firebase работает отлично 2-я могу отправить этот код, просто кто-то комментирует, чтобы я мог найти этот ответ