Настройка PUSH-уведомлений в экосистеме 1С — задача многоэтапная, требующая синхронизации основной базы, промежуточного сервиса 1С (push.1c.ru), сервиса Google Firebase (FCM) и самого мобильного приложения. Малейшая ошибка в ключах или идентификаторах приводит к отказу в обслуживании. В данной статье мы разберем, как последовательно устранить наиболее частые ошибки аутентификации.
Эта ошибка возникает на самом первом этапе взаимодействия, когда ваша основная база 1С пытается авторизоваться в облачном сервисе ОтправкаДоставляемыхУведомлений. Ошибка "Incorrect publisher application API KEY" однозначно указывает на то, что ключ, передаваемый в параметрах метода Отправить, не распознан сервисом 1С.
Рассмотрим типовой программный код, который может вызывать данную проблему:
Процедура ОтправитьУведомление(Уведомление, Пользователь) Экспорт
Выборка = ПланыОбмена.МобильноеПриложение.Выбрать;
Пока Выборка.Следующий() Цикл
Если Выборка.асИдентификаторПодписчикаДоставляемыхУведомлений <> Неопределено Тогда
Если Пользователь = Неопределено ИЛИ Пользователь = Выборка.Профиль Тогда
Идентификатор = Выборка.асИдентификаторПодписчикаДоставляемыхУведомлений.Получить();
Если Идентификатор <> Неопределено Тогда
Уведомление.Получатели.Добавить(Идентификатор);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Уведомление.Получатели.Количество() > 0 Тогда
ДанныеАутентификации = СокрЛП(Константы.асКлючДоступаОтправителя.Получить());
УдаленныеТокены = Новый Массив;
// Попытка отправки через сервис 1С
ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, ДанныеАутентификации, УдаленныеТокены, Истина);
асНеИспользоватьИдентификаторы(УдаленныеТокены);
КонецЕсли;
КонецПроцедуры
Важный нюанс: Ключ, который вы получаете в личном кабинете на сайте push.1c.ru, имеет строго определенный формат. Чаще всего он состоит из 53 символов. Проанализируем типичную ошибку: часто разработчики путают API KEY сервиса 1С и Server Key от Firebase.
Для решения этой проблемы выполним следующие шаги:
push.1c.ru.СокрЛП().Как только мы победили авторизацию в сервисе 1С, может возникнуть следующая ошибка: "В уведомлении использовано незарегистрированное в сервисе мобильное приложение: PushService credentials not found". Это означает, что база данных успешно подключилась к 1С-овскому шлюзу, но шлюз не знает, кому "перепоручить" доставку уведомления в Google Firebase.
Выясним причину этой ситуации. Сервис 1С выступает посредником. Чтобы он мог отправить PUSH, в его настройках должно быть создано "Приложение", в котором прописаны ключи доступа к Firebase (FCM). Если идентификатор приложения, указанный в объекте Уведомление, не совпадает с тем, что зарегистрировано в личном кабинете push.1c.ru, произойдет ошибка.
Разберем, как правильно связать все компоненты:
com.company.myapp) должно быть абсолютно идентичным в трех местах: в консоли Firebase, в настройках на push.1c.ru и в свойствах сборки мобильного приложения в 1С.Server Key (Legacy) или загружен JSON-файл закрытого ключа сервисного аккаунта (для протокола HTTP v1).Для современных версий Android и актуальных протоколов Google крайне важно правильно настроить сборщик мобильных приложений 1С. Если вы используете старую версию сборщика, она может запрашивать Client ID и Client Secret. Однако современный стандарт — это файл google-services.json.
Проанализируем процесс настройки в конфигурации:
google-services.json для вашего Android-приложения.Если ваша версия сборщика слишком старая и просит Client ID, рекомендуем обновить версию мобильной платформы и сборщика. Использование устаревших идентификаторов часто приводит к тому, что Google блокирует запросы на доставку уведомлений.
Даже при идеально настроенном сервере уведомление не дойдет, если мобильное приложение не "сообщило" основной базе свой уникальный токен. Рассмотрим, как это работает на стороне мобильного клиента.
В модуле мобильного приложения необходимо вызвать метод подключения:
ДоставляемыеУведомления.Подключить();
После этого в обработчике ПриПолученииИдентификатораДоставляемыхУведомлений вы получите уникальную строку-токен. Эту строку нужно отправить в основную базу и записать в реквизит, который мы видели в первом примере (асИдентификаторПодписчикаДоставляемыхУведомлений).
Важное замечание по Android 13 и выше: Теперь операционная система требует явного разрешения от пользователя на показ уведомлений. Убедитесь, что в манифесте приложения указано разрешение POST_NOTIFICATIONS, и оно запрашивается программно при запуске приложения. Без этого разрешения токен может быть получен, сообщение может быть отправлено без ошибок, но пользователь его никогда не увидит в шторке уведомлений.
Таким образом, успех отправки PUSH-уведомлений зависит от корректности всей цепочки: Ключ 1С (53 символа) -> Идентификатор приложения -> Server Key Firebase в кабинете 1С -> google-services.json в сборке APK -> Токен подписчика в базе 1С.