通知中心交付失败C#

时间:2016-11-23 09:02:23

标签: c# azure push azure-notificationhub azure-servicebus-queues

我有两个通知中心客户端(nodejs和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门户测试功能发送的邮件也可以。

非常感谢任何协助。

4 个答案:

答案 0 :(得分:0)

邓肯,

我认为问题是因为您使用单引号时有效负载格式不正确。请尝试以下方法:

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

答案 1 :(得分: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);
}

答案 2 :(得分:0)

TLDR - 不允许A& operator=( const A& other ) { if (std::addressof(other) != this) { A(other).swap(*this); // Copy constructor may throw } return *this; } A& operator=( A&& other ) noexcept { // note no const here // we don't check self assignment because // an object binds to an rvalue reference it is one of two things: // - A temporary. // - An object the caller wants you to believe is a temporary. swap(other); return *this; } (单引号)!有效载荷必须包含''密钥

不是一个非常激动人心的解决方案,但......

  • 如果通知有效负载包含单引号,即使在字符串文字中,通知中心也会在没有格式错误的情况下对其进行排队,但是当它到达APNS时,它将不会被传递,因为根据它们,有效负载无效。
  • 如果通知有效负载没有alert密钥存在,它也会被排队但不会由APNS提供

答案 3 :(得分:0)

正如我的同事们已经提到的那样,你需要在C#中使用双引号作为第一步。

其次,您还需要转义json字符: 您的有效负载应如下所示:

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

基本上你通过添加额外的{{}}来逃避json括号{}。

这将向SendAppleNativeNotificationAsync()方法发送有效的json有效负载。现在发送的有效负载如下所示:

{&#34; aps&#34;:{&#34; alert&#34;:&#34; Notification Hub测试通知&#34;}}(这是iOS上的正确通知格式)

以下是Apple Developer网页上的valid json payloads for iOS

您可以使用&#39;测试发送&#39;始终测试您发送的json是否是有效的通知有效内容。您正在使用的Azure通知中心中的功能。