Меню

Получение токена доступа API Firebase (HTTP v1) с помощью PHP для отправки push-уведомлений.

Получение токена доступа API Firebase (HTTP v1) с помощью PHP для отправки push-уведомлений.

До июня 2024 года API Firebase использовал постоянный токен доступа, который можно
было получить один раз в консоли. Однако с теперь необходимо
запрашивать новый токен каждый час. Такой подход повышает безопасность и защищает
от возможной компрометации ключей.
Полный пример страницы Битрикс модуля с получением строки из настроек модуля (из БД):

Код
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_before.php');
$APPLICATION->SetTitle(("Отправка push уведомлений"));
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");

if (!$USER->IsAdmin())
{
    return;
}

use Bitrix\Main\Loader;
use Bitrix\Main\Config\Option;

Loader::includeModule('mibazarow.pushsender');
use mibazarow\pushsender\GetFirebaseToken;

// Получить JSON-строку из настроек модуля
$jsonString = Option::get('mibazarow.pushsender', 'firebase_json');

// Из настроек модуля
$firebase = new GetFirebaseToken($jsonString);

// Получить токен
$token = $firebase->getAccessToken();

print_r($token);

require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin.php');
Пример отправки массового push уведомления
Код
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php');
$APPLICATION->SetTitle(("Модуль mibazarow_pushsender_main"));
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php");

use Bitrix\Main\Loader;
use Bitrix\Main\Config\Option;

Loader::includeModule('mibazarow.pushsender');

if (
    (!empty($_POST['PU_NAME'])) and
    (!empty($_POST['PU_MESS'])) and
    (!empty(bitrix_sessid_post()))
) {
    $jsonString = Option::get('mibazarow.pushsender', 'firibase_json');
    $token = \mibazarow\pushsender\FirebaseToken::getAccessToken($jsonString);

    // URL для отправки уведомлений
    $url = 'https://fcm.googleapis.com/v1/projects/ID ВАШЕГО ПРИЛОЖЕНИЯ/messages:send';

    $message = [
        "message" => [
            'topic' => 'main_topik',
            "notification" => [
                'title' => $_POST['PU_NAME'],
                'body' => $_POST['PU_MESS'],
            ]
        ]
    ];

    // Заголовки запроса
    $headers = [
        'Authorization: Bearer ' . $token, // Токен доступа
        'Content-Type: application/json'
    ];

    // Инициализация cURL
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));

    // Execute curl session
    $result = curl_exec($ch);
    if ($result === FALSE) {
        echo 'Ошибка: ' . curl_error($ch);
    }
//    echo '<pre>';
//    print_r($result);
//    echo '</pre>';
    curl_close($ch);
    echo 'Отправлено';

    // Закрытие cURL
    curl_close($ch);
}
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

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

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

Задача: Apache Cordova предоставляет удобный способ разработки кроссплатформенных мобильных приложений. В данной статье ...

Заполнить свойство инфоблока ценой из торгового каталога

Если вам по какой-то причине нужно скопировать цену товара в свойство этого же инфоблока. Например, для вывода старой це...

Получить множественное пользовательское поле раздела. Значения множественного UF_ поля через API

Задача: У разделов инфоблока есть множественное поле типа список. Зная ID раздела, нужно получить и вывести всю информац...

Ссылки для добавления и удаления товара из сравнения в Битрикс

Просто оставляю это здесь, вставка ссылок на добавление и удаление товара из сравнения, если уже добавлен. Чуть позже до...

Вывод даты создания элемента в правильном формате в Битрикс

Если нужно вывести дату создания новости, статьи или товара в каталоге, в принципе любого элемента инфоблока- можно восп...

Подключение мобильной версии шаблона Битрикс сайта, с автопереключением

Предпочитаю, что бы сайт не грузил кучу скриптов и стилей. При загрузке адаптивного шаблона за ним тянется очень много ф...

Создание блога с комментариями, оценками и просмотрами на сайте с 1С-Битрикс

Если на вашем сайте требуется создание раздела с блогом или новостями, статьями. Записям в которых, посетители смогу ста...

Настройка обмена между 1С:Предприятие и магазином на "1С-Битрикс24: Интернет-магазин + CRM" по REST протоколу

В этой заметке расскажу как настроить синхронизацию между 1С:предприятие и "1С-Битрикс24: Интернет-магазин + CR...

Малая корзина Битрикс, упрощенный шаблон

Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке интернет-магазина. Код окульту...