Как отправить ios тихий pu sh уведомление в Центр уведомлений с помощью метода SendNotificationAsyn c - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть рабочее решение, которое отправляет уведомление pu sh в NotificationHub из бэкэнда, а затем в приложение Xamarin.Forms. Это работает нормально, если полезная нагрузка содержит «alert». Я хотел бы реализовать тихие уведомления pu sh. Документация гласит, что полезная нагрузка должна содержать «контент-доступный»: 1 и никаких предупреждений, значков или звуков. Также вам нужно добавить в заголовок "apns-push-type" = "background" и apns-priority в заголовок.

Ожидаемый результат: Я хотел бы отправить уведомление молчаливой пу sh в NotificationHub с помощью метода SendNotificationAsyn c.

Фактический результат: Я могу отправить его только с SendAppleNativeNotificationAsyn c.

Я попытался добавить содержимое, доступное для заголовка или добавить его в словарь templateParameters. Вы можете найти этот код в самом низу этого поста. Я также пытался зарегистрировать структуры полезных данных различными способами:

{
   "aps" : {
      "content-available" : 1,
       "acme1" : "bar",
        "acme2" : 42
   },
}

или

{
   "aps" : {
      "content-available" : 1
   },
   "acme1" : "bar",
   "acme2" : 42
}

Все эти определения работали для моего бэкэнда, если я отправил pn с SendAppleNativeNotificationAsyn c, но не с SendNotificationAsyn c.

Регистрация устройства в NotificationHub

var hub = new SBNotificationHub("blah", "blah");
var deviceToken = GetToken();
string jsonBodyTemplate = "{\"aps\":{\"#(content_available)\":1, \"notificationtype\":\"$(notificationtype)\", \"extra\":\"$(extra)\"}}";
string expiryTemplate = DateTime.UtcNow.AddYears(10).ToString(CultureInfo.CreateSpecificCulture("en-US"));
var tags = new NSSet(categories.ToArray());
await hub.UnregisterAllAsync(deviceToken);
await hub.RegisterNativeAsync(deviceToken, tags);
await hub.RegisterTemplateAsync(deviceToken, IOS_TEMPLATE_NAME, jsonBodyTemplate, expiryTemplate, tags);

Отправка pu sh уведомления в NotificationHub

Dictionary<string, string> templateParameters = new Dictionary<string, string>();
templateParameters["notificationtype"] = "blah";
var headers = new Dictionary<string, string> { { "apns-push-type", "background" }, { "apns-priority", "5" }, { "content-available", "1" } };

var notification = new TemplateNotification(templateParameters);
notification.Headers = headers;
await hub.SendNotificationAsync(notification);

1 Ответ

0 голосов
/ 03 апреля 2020

Оказалось, что у меня проблема с регистрацией пользователя в NotificationHub. "content-available": 1 часть должна быть определена как в коде ниже:

string jsonBodyTemplate = "{\"aps\":{\"content-available":1, \"notificationtype\":\"$(notificationtype)\", \"extra\":\"$(extra)\"}}";
...