Центры уведомлений Azure для Android FCMv1 Client SDK — FcmV1TemplateRegistration — без полезной нагрузки

Повторно отправляем этот вопрос, потому что мы добились значительного прогресса, но еще не совсем разобрались. Я использую эту библиотеку и успешно работаю с 2021 года в своем приложении для Android.

com.microsoft.azure:notification-hubs-android-sdk-fcm:1.1.4

RegisterTemplate прекрасно создает GcmTemplateRegistrationDescription и GcmRegistrationId.

Необходимо создать FcmV1TemplateRegistration и FcmV1RegistrationId, чтобы обновить их до версии 2.0.0.

com.microsoft.azure:notification-hubs-android-sdk:2.0.0

Вызов регистрации шаблона на устройстве теперь создает FcmV1TemplateRegistration в Azure Hub.

(Сначала зарегистрируйте устройство Android с помощью функции FirebaseMessaging.getInstance().getToken())

String messageTemplate = "{\"message\":{\"android\":{\"data\":{\"msgtext\":\"$(msgtext)\",\"msgsndr\":\"$(msgsndr)\"}}}}";
String RegistrationTagTopic = "5050";
mobile_RegistrationId = hub.registerTemplate(regid, "CAREV1", messageTemplate, RegistrationTagTopic).getRegistrationId();

Пример регистрации: возвращенный выше mobile_RegistrationId — это RegistrationId Notification Hub.

<ETag>5</ETag>
<ExpirationTime>2124-06-12T05:55:24.1941413Z</ExpirationTime>
<RegistrationId>2837404...516-2</RegistrationId>
<Tags>5050</Tags>
<FcmV1RegistrationId>eZMPxd2pQBi...Uh</FcmV1RegistrationId>
<BodyTemplate><![CDATA[{"message":{"android":{"data":{"msgtext":"$(msgtext)","msgsndr":"$(msgsndr)"}}}}]]></BodyTemplate>
<TemplateName>CAREV1</TemplateName>
</FcmV1TemplateRegistrationDescription>

Кажется, формат шаблона в приложении для FCMv1 абсолютно важен, потому что мое приложение выдало исключение при регистрации в любом другом формате, кроме {"message":{"android":{"data":{...}}} }

Отправьте тег устройства 5050 с помощью метода REST API Azure Notification Hubs, того же вызова API, который мы успешно использовали с 2015 года (предположим, вы знаете, как создать токен авторизации): отправьте шаблонное уведомление с такими параметрами, как;

ServiceBusNotification-Format = "template"
ServiceBusNotification-Tags = "5050"
ContentType = "application/json;charset=utf-8."
Method = "POST"
URI = "https://{namespace}.servicebus.windows.net/{NotificationHub}/messages/?api-version=2015-01"

Пример JSON, опубликованного в вызове

{"message":{"android":{"data":{"msgtext":"My short message","msgsndr":"ADMIN"}}}}

Оказывается, это просто неправильно на стороне сервера (см. ниже). Уведомление получено на устройстве, но полезная нагрузка отсутствует

Зарегистрировано с использованием режима &test с REST API, все выглядело так, как будто все работает, Reg Id и PnsHandle совпадают и распознают fcmV1Template, но это не так..!

address    : 5050
Success : 1
Failure : 0
Appform : fcmV1Template
Reg  Id : 2837404...516-2
PnsHandle : eZMPxd2pQBi...Uh
Outcome : The Notification was successfully sent to the Push Notification System

Отправьте (POST) то же сообщение напрямую на номер 5050 через процедуру FCM/JWT, немного другой формат JSON;

{"message":{"topic":"5050","data":{"msgtext":"My short message","msgsndr":"ADMIN"},"android":{"priority":"high"},"fcm_options":{"analytics_label":"xyz"}}}

Полезная нагрузка уведомлений и сообщений идеальна (обратите внимание на дополнительные параметры FCM) и работает всегда. Конечно, FCM не требует шаблона в самом приложении или серверном процессе.

Вопрос: Что не так с отправкой моего шаблона через Центры уведомлений?

РЕШЕНО 18 ИЮНЯ 2024 ГОДА 17:12 NZST

Кажется, мне вообще не нужно было изменять структуру JSON метода REST API Azure Notification Hubs.

Центры уведомлений выяснили, что одно приложение устройства — это FcmV1TemplateRegistration с fcmV1Template, а другое — GcmTemplateRegistration с gcmTemplate, поскольку приложение еще не обновилось. JSON, отправленный нашим сервером, напоминает только ветвь Data: в шаблоне JSON, зарегистрированном приложением Android в Центрах уведомлений.

Вот мой журнал с использованием исходной структуры JSON с включенным параметром &test;

Post URI https://mrblobby.servicebus.windows.net/free/messages/?api-version=2015-01&test

ContentType application/json;charset=utf-8.
{"msgaddr":"65552","msgsndr":"ADMIN","msgtext":"Re-Test with original server"}
call webrequest
Response WebRequest StatusCode:        201
Response WebRequest StatusDescription: Created
WebRequest succeeded with status code: 201 Description: Created
address    : 65552
Success : 1
Failure : 0
Appform : gcmTemplate
Reg  Id : 7873109321995......789764826990-2
PnsHandle : dZJC0CJ6QOea_y7Gr......jCx_TTaPfOlYlo3NIrQ9rmbOHaUg2aRoTDW0rCrFOAy4Gk1
Outcome : The Notification was successfully sent to the Push Notification System

ContentType application/json;charset=utf-8.
{"msgaddr":"5050","msgsndr":"ADMIN","msgtext":"Re-Test with original server"}
call webrequest
Response WebRequest StatusCode:        201
Response WebRequest StatusDescription: Created
WebRequest succeeded with status code: 201 Description: Created
address    : 5050
Success : 1
Failure : 0
Appform : fcmV1Template
Reg  Id : 2837404753035......116714665516-2
PnsHandle : eZMPxd2pQBic3hfuF......fNXW4qT5-UhCFM1W3ZDL1XZw7oiLaTDJk1v7tqnw-xEe2i
Outcome : The Notification was successfully sent to the Push Notification System

Наслаждаться

3
0
232
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте изменить полезную нагрузку туда, где data находится за пределами поля android. Любые переменные, которые вы хотите отправить на телефон для обработки, должны находиться внутри поля data. Я бы тоже сбросила fcm_options. Наша полезная нагрузка структурирована следующим образом:

{
 "message": {
  "android":{
   "priority":"high"
  },
  "data": {
   “message”:””,
   “title”:””,
   “datafield”:””,
  }
 }
}

Спасибо @Zachary Bell, я попробую. Просто чтобы уточнить... вы отправляете с помощью REST API Центров уведомлений? Ваша структура JSON такая же, как мы используем с процедурой FCM/JWT, которая работает отлично и не учитывает какой-либо шаблон, зарегистрированный приложением в ANH.

Emsg 17.06.2024 22:14
Ответ принят как подходящий

«Поддержка устаревшего API Firebase Cloud Messaging для Центров уведомлений Azure будет прекращена к 20 июня 2024 г.»

Если вы получаете эти электронные письма, вот что вам нужно сделать в приложении для Android:

  1. Обновите SDK в build.gradle (:app)

implementation 'com.microsoft.azure:notification-hubs-android-sdk:2.0.0'

  1. Обновите шаблон в своем приложении для вызова RegisterTemplate.

    String messageTemplate = 
    "{\"message\":{\"android\":{\"data\": 
    {\"yourtext\":\"$(yourtext)\",\"msgsndr\":\"$(msgsndr)\"}}}}";
    

Обязательно придерживайтесь общей структуры JSON, указанной выше, иначе ваше приложение выйдет из строя при регистрации.

Внутри данных: скобка имеет произвольную форму, но просто используйте те же поля из существующего шаблона, а затем...

Если вы используете метод REST API Центров уведомлений Azure, никаких изменений в серверном процессе не требуется, при условии, что вы ничего не меняли в полезных данных JSON.

SDK автоматически регистрирует устройства как FCMv1, а Центр уведомлений использует соответствующий FcmV1TemplateRegistrationDescription.

Учетные данные уже должны быть настроены в Hub for Google (FCM v1). Получите значения из файла xxx-hub-firebase-adminsdk-xxxx-xxxxxxx.json, и все готово...

Надеюсь, для вас еще не поздно, я только час назад загрузил обновленное приложение в Google Play. Удачи..!

Другие вопросы по теме

Укажите, как LocalDateTime хранится в Azure CosmosDB для NoSQL
Ошибка при использовании SQLProgrammabilityProvider при подключении к Azure?
Ошибка хранилища BLOB-объектов Azure: отсутствует конфигурация подписки в .NET Aspire
Агент Langchain Pandas не следует инструкциям
Рабочие функции не найдены. Попробуйте сделать свои классы и методы заданий общедоступными (NODEJS v4)
Настройка Prometheus, Grafana и Loki на виртуальной машине Azure с использованием HTTPS с использованием шлюза приложений Azure
Ошибка развертывания Flask службы приложений Azure: «Не удалось ответить на HTTP-запросы связи на порту 8000; не удалось запустить сайт. Проверьте журналы контейнера на наличие отладки»
При сборке приложения не удалось создать папку артефакта: «frontend/dist/». Убедитесь, что это свойство настроено правильно в файле рабочего процесса
Как использовать минимальное количество веб-действий для отправки уведомлений в конвейере ADF?
Невозможно подключить onpremisesql к adf