Ответ
Да, Firebase Cloud Messaging (FCM) может отправлять уведомления без собственного сервера, используя Firebase Console для ручной рассылки. Однако для автоматических или персонализированных уведомлений требуется серверный код (например, Cloud Functions или ваш backend).
Минимальная настройка в iOS (AppDelegate):
import FirebaseMessaging
import UserNotifications
func application(_ application: UIApplication,
didFinishLaunchingWithOptions...) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current().delegate = self
Messaging.messaging().delegate = self
// Запрос разрешений
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { _, _ in }
application.registerForRemoteNotifications()
return true
}
Ограничения подхода без сервера:
- Невозможно отправлять уведомления конкретным пользователям на основе логики приложения.
- Нет автоматических триггеров (например, по событию в БД).
- Оффлайн-доставка ограничена (~4 недели).
- Токены устройства (
FCM token) могут меняться, их нужно обновлять.
Ответ 18+ 🔞
А, слушай, смотри, вот эта штука — Firebase Cloud Messaging, она же FCM. Ну, в принципе, да, можно и без своего сервера уведомления гонять, если прям совсем по-простому. Через админку Firebase Console, там кнопочки потыкал — и пошла рассылка на все девайсы, где твое приложение стоит. Но это, блядь, как из пушки по воробьям — всем скопом, без разбора.
А вот если тебе надо, чтобы Васе Пупкину пришло сообщение, что его заказ доехал, а Клаве Шмурдяк — что её кот Федя снова обосрал тапок, то тут уже, сука, без своего серверного кода — нихуя. Нужна какая-то логика, понимаешь? Типа Cloud Functions или твой собственный бэкенд, который будет эту хуйню обрабатывать и стрелять прицельно.
Вот, глянь, минимальный код для iOS, чтобы хотя бы приложение не вылетало и уведомления ловило. Это в AppDelegate пихаешь:
import FirebaseMessaging
import UserNotifications
func application(_ application: UIApplication,
didFinishLaunchingWithOptions...) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current().delegate = self
Messaging.messaging().delegate = self
// Запрос разрешений
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { _, _ in }
application.registerForRemoteNotifications()
return true
}
Вроде ничего сложного, но, блядь, как всегда, есть нюансы, ёпта.
Чего не сможешь без своего сервера, или подводные ебучки:
- Конкретным юзерам хуй пошлёшь. Только всем скопом, как стадо баранов. Нужна персонализация? Готовь сервер, дружок.
- Автоматически нихуя не отправится. Хочешь, чтобы при изменении в базе данных триггерилось уведомление? Опять же, серверные функции, блядь.
- Оффлайн-доставка — да, работает, но не вечно. Где-то недели четыре максимум продержит, а потом — в пизду, сообщение сгорело.
- И главное — эти токены устройства (
FCM token). Они, сука, как погода — могут поменяться в любой момент. Переустановил приложение, обновил iOS — и всё, новый токен. Их надо отслеживать и обновлять, а без сервера это, опять же, геморрой.
Короче, для прототипа или массовой рассылки "ко всем" — пойдёт. Для чего-то серьёзного — готовься писать серверную часть, иначе будет сплошной пиздец и недовольные пользователи, которые не получили свои уведомления о скидках на пиво.