1

2つの通知ハブクライアント(nodejsおよびC#)があり、いずれもハブにメッセージをプッシュするために使用されます。通知ハブ配信エラーC#

ノードクライアントは完全に正常に送信されますが、C#クライアントはが送信されず、メッセージが送信されます。

以下は、各クライアントで使用されるスニペットです。

Azureのポータルテスト機能から直接送らAndroidの通知とメッセージを送信するとき

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); 
}); 

が正常に動作の両方が細かいです。

ご協力いただければ幸いです。

答えて

0

ダンカン、

は、私はあなたが単一引用符を使用しているとして、あなたのペイロードが不正な形式であるため、問題があると思います。次のことを試してみてください。

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

これをチェックして、ペイロードが有効であれば、結果の状態は「エンキュー」されます。意図的にペイロードの不正な形式を作成した場合、「(400)Bad Request。指定された通知ペイロードは無効です」。 –

+0

@ダンカン通知が送信されたら、あなたのデバイスの登録は削除されますか? –

+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 - ノー''(単一引用符)許可!通知ペイロードはリテラルでも、文字列に単一引用符が含まれている場合、ペイロードがalertキー

ない非常にエキサイティングなソリューションけど...

  • をcontaintしなければならない通知ハブは、不正な形式の例外なく、それをエンキューに入れますが、 APNSに到達すると、ペイロードが無効であるため配信されません。
  • 通知ペイロードが、それはまた、エンキューに入れられますalertキー存在を持っていないが、すでに述べたように、私の同僚の回答に記載APNS
0

で配信されない場合は、あなたのようにC#で二重引用符を使用する必要があります最初のステップ。

第二に、あなたはまた、JSON文字をエスケープする必要があります: あなたのペイロードには次のようになります。

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

基本的には、追加のもの{{}}を追加することで} {JSON括弧をエスケープします。

これは、有効なjsonペイロードをSendAppleNativeNotificationAsync()メソッドに送信します。

{「APS」:{「警告」:「通知ハブ試験通知」}}ここで(iOSの正しい通知形式である)

からvalid json payloads for iOSある今送られたペイロードは、このようになりますApple Developerウェブページ。

使用しているAzure通知ハブの「テスト送信」機能を使用して、送信しているjsonが有効な通知ペイロードであるかどうかは、いつでもテストできます。

関連する問題