Настройка работы с push уведомлениями через Firebase в мобильном приложении Apache Cordova

Внимание! Все сообщения на форуме проходят модерацию. Ваше сообщение появится после проверки.
Настройка работы с push уведомлениями через Firebase в мобильном приложении Apache Cordova

Задача: Apache Cordova предоставляет удобный способ разработки кроссплатформенных мобильных приложений. В данной статье расскажу, как настроить отправку push уведомлений на платформах iOS и Android с использованием Firebase.
Для отправки Push-уведомления конкретному пользователю с помощью Firebase и Apache Cordova.
Получение токена устройства:
Код
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
    window.FirebasePlugin.getToken(function (token) {
        // Сохраняем этот токен в базе данных сайта
        // alert(token); 
    }, function (error) {
        alert(error);
    });
}

Обновление токена устройства (при смене)
Код
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
    window.FirebasePlugin.onTokenRefresh(function (token) {
        // Обновляем токен в базе данных сайта
        // alert(token);
    }, function (error) {
        // alert(error);
    });
}
В новой версии API что бы поставить звук по умолчанию для уведомления, теперь не подходит просто передать ключ
sound: default в блоке 'notification'
Нужно вот так, под каждую платформу:
Код
$notification = [
    'message' => [
        'token' => $DEVICE_TOKEN,
        'notification' => [
            'title' => 'Новый заказ',
            'body' => '"Еда в Миг" новый заказ N' . $arResult["ORDER"]['ID'],
        ],
        'android' => [
            'notification' => [
                'sound' => 'default'
            ]
        ],
        'apns' => [
            'payload' => [
                'aps' => [
                    'sound' => 'default'
                ]
            ]
        ]
    ],
];
Еще один вариант отправки push через новое API c Oauth токеном.
Можно использовать kreait/firebase-php
Пример:
Код
composer require kreait/firebase-php

И код
Код
require 'vendor/autoload.php';

use Kreait\Firebase\Factory;
use Kreait\Firebase\Messaging\CloudMessage;
use Kreait\Firebase\Messaging\Notification;

// Путь к вашему файлу с учетными данными
$serviceAccount = __DIR__'/ВАШ_ФАЙЛ_С_КЛЮЧАМИ.json';

// Создаем экземпляр Firebase
$factory = (new Factory)->withServiceAccount($serviceAccount);

// Получаем экземпляр Messaging
$messaging = $factory->createMessaging();

// Заголовок и тело уведомления
$title = 'Привет';
$body = 'Я первый пуш';

// Массив токенов устройств, на которые нужно отправить уведомления
$deviceTokens = [
    'token_1',
    'token_2',
    // Добавьте сюда другие токены устройств
];

// Или в топик на несколько устройств
$message = CloudMessage::withTarget('topic', 'allUsers')
    ->withNotification($notification);

foreach ($deviceTokens as $token) {
    // Создаем уведомление
    $notification = Notification::create($title, $body);
    
    // Создаем сообщение
    $message = CloudMessage::withTarget('token', $token)
        ->withNotification($notification);
    
    // Отправляем сообщение
    try {
        $messaging->send($message);
        echo "Уведомление отправлено на устройство с токеном: $token\n";
    } catch (\Kreait\Firebase\Exception\MessagingException $e) {
        echo "Ошибка при отправке уведомления на устройство с токеном $token: " . $e->getMessage() . "\n";
    }
}

И подписка на топик для массовой рассылки push (для персонализированной есть пример выше)
Код
// Запрос разрешения на отправку push
            window.FirebasePlugin.grantPermission(function () {
            }, function (error) {
                // alert(error); Ошибка получения разрешения
            });

            // Подписка на топик для push
            const topic = 'main_topik'; // Замените на имя вашего топика
            window.FirebasePlugin.subscribe(topic, function () {
                //  alert('Successfully subscribed to topic: ' + topic);
            }, function (error) {
                // alert('Error subscribing to topic: ' + error);
            });
            // Styles
Если возникает проблема с pod-ами. Нужно их деинтегрировать, очистить и снова установить:
Код
cd ios
pod cache clean --all
Pod clean
pod deintegrate
sudo gem install cocoapods-deintegrate cocoapods-clean

sudo arch -x86_64 gem install ffi
arch -x86_64 pod repo update
arch -x86_64 pod install
Вариант через homebrew
Код
brew update
brew upgrade ruby
brew link --overwrite cocoapods
sudo gem install ffi
sudo gem install cocoapods
cd ios
pod deintegrate
pod install --repo-update
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 400 000 руб. от 5-ти недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 300 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфоресурс

от 300 000 руб. от 4-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

3D‑моделирование, визуализация

от 25 000 руб. от 3-х дней

По вашим фото, чертежам или описанию создадим 3D‑модели и отрендерим набор изображений для каталога товаров: общий вид, крупные планы и технические ракурсы или 360°‑обзор товара.