如何使用 SendNotificationAsync 方法向通知中心发送 ios 静默推送通知

How to send ios silent push notification to Notification Hub with SendNotificationAsync method

我有一个可行的解决方案,可以从后端向 NotificationHub 发送推送通知,然后再向 Xamarin.Forms 应用程序发送推送通知。如果有效负载包含 "alert",则此方法工作正常。我想实现静默推送通知。 documentation 表示有效载荷需要包含 "content-available" : 1 并且没有警报、徽章或声音。您还需要添加到 header "apns-push-type" = "background"apns-priority 到 header.

预期结果: 我想使用 SendNotificationAsync 方法向 NotificationHub 发送静默推送通知。

实际结果: 我只能使用 SendAppleNativeNotificationAsync 发送它。

我尝试将 content-available 添加到 header 或将其添加到 templateParameters 字典。您可以在这个 post 的最底部找到这段代码。我还尝试以不同的方式注册有效负载结构:

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

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

如果我使用 SendAppleNativeNotificationAsync 而不是 SendNotificationAsync 发送 pn,则所有这些定义都适用于我的后端。

正在向 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);

正在向 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);

原来我在将用户注册到 NotificationHub 时遇到了问题。 "content-available":1 部分应该像下面的代码一样定义:

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