Переход на Firebase Cloud Messaging (FCM) является обязательным шагом для всех разработчиков мобильных приложений на платформе 1С, так как старый протокол Google Cloud Messaging (GCM) полностью прекратил свою работу. Однако при переходе многие сталкиваются с критической ошибкой: приложение аварийно завершается (падает) при попытке программно получить идентификатор подписчика. В этой статье мы подробно разберем, как правильно настроить FCM, корректно собрать мобильное приложение и программно обработать получение токенов.
Разберем типичную ситуацию: разработчик вызывает стандартный метод ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений() без параметров, что согласно документации 1С должно возвращать токен FCM. Но вместо получения строки с идентификатором приложение закрывается с системной ошибкой Android. Проанализируем, почему это происходит.
Основная причина кроется не в ошибке самого кода 1С, а в отсутствии инициализации библиотеки Firebase внутри скомпилированного APK-пакета. Когда метод вызывается без параметров, мобильная платформа 1С пытается обратиться к службам Google Play через конфигурационный файл Firebase. Если этот файл не был включен в сборку или содержит некорректные данные, библиотека выбрасывает исключение, которое не обрабатывается платформой, что и приводит к "крашу".
Прежде чем приступать к написанию кода, нам необходимо правильно зарегистрировать приложение в Google Firebase Console. Рассмотрим этот процесс по шагам:
com.mycompany.myapp), должно символ в символ совпадать с тем именем, которое указано в настройках мобильного приложения в конфигураторе 1С и в Сборщике мобильных приложений.google-services.json. Этот файл содержит все необходимые ключи и идентификаторы для работы сервисов Google.Теперь разберем, как правильно внедрить полученный файл в наше приложение. Процесс сборки через "Сборщик мобильных приложений" (Mobile Application Wizard) критически важен:
В интерфейсе Сборщика, при настройке параметров сборки для Android, необходимо найти раздел управления push-уведомлениями. В поле, предназначенное для Firebase, нужно загрузить наш файл google-services.json. Без этого действия платформа 1С просто не будет знать, к какому проекту Firebase обращаться, и вызов метода получения идентификатора будет приводить к падению.
Также убедимся, что при сборке проставлены разрешения (permissions) на использование интернета и получение уведомлений. Обычно Сборщик 1С делает это автоматически, но проверить наличие галочек в мастере сборки лишним не будет.
Рассмотрим, как правильно написать код для получения токена. В мобильной платформе 1С используется объект ДоставляемыеУведомления. Разберем разницу в вызовах:
Для получения устаревшего GCM-идентификатора (который больше не работает) использовался код с передачей Sender ID:
Идентификатор = ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений("1234567890");
Для работы с FCM мы должны вызывать этот же метод, но обязательно без параметров. Платформа сама поймет, что нужно использовать настройки из файла google-services.json, внедренного при сборке. Рассмотрим пример правильной обработки:
Процедура ПолучитьТокенPush() Экспорт
#Если МобильноеПриложениеКлиент Тогда
Попытка
Токен = ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений();
Если ЗначениеЗаполнено(Токен) Тогда
// Отправляем токен на сервер 1С (бэкенд) для сохранения в базе
ОтправитьТокенНаСервер(Токен);
Иначе
Сообщить("Не удалось получить токен: пустая строка");
КонецЕсли;
Исключение
// Важно обработать исключение, чтобы приложение не упало
ЗаписатьЛогОшибки(ОписаниеОшибки());
Сообщить("Ошибка при обращении к сервисам уведомлений");
КонецПопытки;
#КонецЕсли
КонецПроцедуры
Выясним, как отправлять уведомления, когда токен уже получен. Современный протокол FCM требует использования HTTP v1 API. Это более безопасный способ, чем старый "Server Key".
Для этого в консоли Firebase в настройках сервисного аккаунта нужно сгенерировать новый закрытый ключ (JSON-файл). Этот файл будет использоваться на стороне сервера (например, в основной базе 1С или PHP-бэкенде) для авторизации через OAuth2. Проанализируем структуру запроса к Google API:
https://fcm.googleapis.com/v1/projects/имя-вашего-проекта/messages:sendПример структуры JSON-тела сообщения для отправки из 1С на сервер Google:
{
"message": {
"token": "ТОКЕН_ПОЛУЧЕННЫЙ_ОТ_МОБИЛЬНОГО_ПРИЛОЖЕНИЯ",
"notification": {
"title": "Заголовок уведомления",
"body": "Текст сообщения"
},
"data": {
"ИдентификаторОбъекта": "УИД_ССЫЛКИ",
"ТипСобытия": "НовыйЗаказ"
}
}
}
Проанализируем дополнительные факторы, которые могут влиять на работоспособность:
google-services.json, обязательно удалите старую версию приложения с устройства перед установкой новой. Иногда кэш настроек старой сборки мешает корректной инициализации Firebase.Таким образом, для успешной работы push-уведомлений в 1С необходимо обеспечить триединство настроек: идентичное имя пакета, наличие google-services.json в сборке и вызов метода получения ID без параметров. Следуя этой инструкции, мы минимизируем риск падения приложения и обеспечим надежную доставку уведомлений нашим пользователям.