У меня есть рабочее решение, которое отправляет уведомление 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);