Меню

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

RSS
Настройка работы с 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);
    });
}
Изменено: Михаил Базаров - 09.10.2024 16:18:14
 
В новой версии 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'
                ]
            ]
        ]
    ],
];
Изменено: Михаил Базаров - 10.10.2024 10:59:52
 
Еще один вариант отправки 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
Изменено: Михаил Базаров - 18.05.2025 14:10:00
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

Установить цену товара из свойства инфоблока

На одном из проектов, нужно было единоразово заполнить цены товаров из свойства инфоблока. Сделать это можно через API, ...

Подключение jquery из ядра битрикс и объединение своих скриптов в один файл

Если используете большое количество js скриптов на сайте. Например: фансибокс, всяческие галереи и прочее- то таких внеш...

Сравнение двух типов цен для иммитации системы скидок, в Битрикс

Встала задачка, иммититровать систему скидок в интернет магазине на Битрикс. Из 1С-УТ, на сайт, выгружается два типа цен...

Заполнить поля пользователя из свойства заказа, на примере ФИО

При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в профиль пользователя (не путать...

Заполнить картинки разделов каталога из картинок товаров

Задача: в каталоге, разделы и подразделы выводятся в виде плитки над товарами, с картинками разделов. Так как разделов и...

Вывести компонент новостей на страницу в Битрикс

Посмотрел Яндекс метрику на свой сайт, и решил что буду частенько писать сюда именно то, что ищут люди. Итак за последню...

Вывод элементов с помощью API битрикс

Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Например, если нужно вывести элем...

Заполнить свойство заказа выбранным пунктом самовывоза и передать в 1С

Задача: При оформлении заказа пользователь может выбрать пункт самовывоза (склады магазина). Нужно заполнить сво...

Сортировать товары по названию, цене и дате поступления в каталоге Битрикс

Достаточно часто заказчик просит вывести сортировку по цене, новым поступлениям и названию в каталоге товаров работающег...