Можно ли отправлять 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-я могу отправить этот код, просто кто-то комментирует, чтобы я мог найти этот ответ