1

У меня есть два клиента-концентратора уведомлений (nodejs и C#), которые используются для нажатия сообщений в концентратор.Ошибка уведомления Hub C#

Клиент Node отправляет совершенно нормально, но клиент C# завершает отправку no.

Ниже приведены фрагменты для использования в каждом клиенте.

C#

NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("<Connection String>", "<Hub Name>"); 
var notice = @"{'aps':{'alert':'Notification Hub test notification'}}"; 
var result = await hub.SendAppleNativeNotificationAsync(notice, "<tag>"); 
Console.WriteLine(result.State); 

NodeJS

var azure = require('azure'); 
var notificationHubService = azure.createNotificationHubService('<Hub Name>','<Connection String>') 
var notice = "{'aps':{'alert':'Notification Hub test notification'}}" 
notificationHubService.apns.send("<tag>", notice, function(error, res){ 
    console.log(res); 
}); 

Оба прекрасно работают при отправке Android уведомления и сообщения, отправленные непосредственно из Azure функции портала Test отлично.

Любая помощь будет принята с благодарностью.

ответ

0

Дункан,

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

var notice = "{\"aps\":{\"alert\":\"Notification Hub test notification\"}}"; 
+0

Я проверил это, и полезная нагрузка действительна, состояние на результат - «Очередь». Если я целенаправленно искажаю полезную нагрузку, я получаю «(400)« Плохой запрос ». Предоставленная полезная нагрузка уведомления недействительна». –

+0

@ Duncan Как только уведомление отправлено, зарегистрирована ли регистрация вашего устройства? –

+0

Нет, регистрация в центре уведомлений все еще существует, и я все еще могу нажать от клиента узла. –

0

Вы можете попробовать использовать функцию EnableTestSend и посмотреть на NotificationOutcome свойства для детального сообщения об ошибке. Это отправит тестовое сообщение на 10 устройств.

bool enableTestSend = true; 
NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString(connString, hubName, enableTestSend); 

var outcome = await hub.SendWindowsNativeNotificationAsync(toast); 
Console.WriteLine(outcome.State); 

foreach (RegistrationResult result in outcome.Results) 
{ 
    Console.WriteLine(result.ApplicationPlatform + "\n" + result.RegistrationId + "\n" + result.Outcome); 
} 
+0

Я запустил концентратор с тестовым флагом, и нет никакой разницы в результатах. Состояние после отправки «Enqueued», но оно не доставляется. –

0

TLDR - Нет '' (одинарные кавычки) допускается! Полезная нагрузка должна containt alert ключ

Не очень интересные решения, но ...

  • Если полезная нагрузка уведомление содержит одиночные кавычки даже в строковый литерал Уведомление хаб ан-очереди без искаженного исключения, но когда он достигнет APNS, он не будет доставлен, поскольку полезная нагрузка недействительна в соответствии с ними.
  • Если полезная нагрузка уведомление не имеет alert ключ настоящее время он также будет ан-очереди, но не доставлен APNS
0

Как уже упоминалось в моих коллег ответы, вы должны использовать двойные кавычки в C#, как первый шаг.

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

var notice = "{{\"aps\":{{\"alert\":\"Notification Hub test notification\"}}}}"; 

В основном вы ускользают фигурные скобки {} JSon путем добавления дополнительных параграфов {{}}.

Это отправит действительную полезную нагрузку json в метод SendAppleNativeNotificationAsync().Полезная нагрузка сейчас присылает выглядит следующим образом:

{ «АПС»: { «предупреждение»: «Уведомление Уведомление теста-концентраторы»}} (это правильный формат уведомление о прошивке)

Вот в valid json payloads for iOS от Веб-сайт разработчика Apple.

Вы всегда можете проверить, является ли отправляемая вами json действительная полезная нагрузка уведомлений, используя функциональность «Тестирование отправки» в узле уведомлений Azure, который вы используете.

 Смежные вопросы

  • Нет связанных вопросов^_^