从Azure Notification Hub打开设备或Internet后,iOS未收到待处理的推送

时间:2017-08-03 14:12:43

标签: azure push-notification apple-push-notifications azure-mobile-services azure-notificationhub

我在Azure中有一个通知中心,可以将PUSH发送到Android和iOS设备。一切都在Android中运行良好。在iOS中我遇到了这个问题:

  1. 我关闭WiFi或关闭设备
  2. 我向我的应用发送聊天消息(推送通知)以及WhatsApp向该设备发送的消息。
  3. 几分钟后我打开WiFi或打开设备
  4. 我收到了所有 WhatsApp消息通知,但没有通知我的应用程序。如果设备和Internet处于打开状态,我会毫无问题地收到通知。

    我的问题是:任何人都有过这样的经历或者知道如何解决这个问题? 至少我应该接受最后一次推动,对吗?

    我将推送发送到标签。当WiFi或iPhone关闭时,我可以看到设备在集线器中注册。

2 个答案:

答案 0 :(得分:0)

发送通知时,请确保设置过期时间。默认值为零。因此,APN会将通知视为立即过期,并且不存储通知或尝试重新发送通知。

https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html

  

<强> APNS过期
  如果此值非零,则APN存储通知   并尝试至少传递一次,根据需要重复尝试   如果第一次无法发送通知。如果   值为0,APN将通知视为立即过期   并且不存储通知或尝试重新发送通知。

如果您使用的是模板通知,请按以下步骤操作。

    AppleTemplateRegistrationDescription registration = new AppleTemplateRegistrationDescription(parameters.registrationID)
{ BodyTemplate = new CDataMember("{\"aps\":{\"alert\":\"$(body)\",\"payload\":\"$(payload)\",\"deeplinking\":\"$(deeplinking)\",\"category\":\"$(category)\",\"image\":\"$(image)\"}}"),
                                Tags = itags,
Expiry = "$(APNS_Expiry)"
};

作为发送的一部分,您可以传递到期值。

var notification = new TemplateNotification(new Dictionary<string, string>()
{
 {"APNS_Expiry", DateTime.UtcNow.AddMinutes(10).ToString("o") }, //Timestamp
                        {"body", NotificationText},
                        {"payload", NotificationText},
                        {"deeplinking", payload},
                    }); 
            var Responsehub = hub.SendNotificationAsync(notification);

如果您使用的是原生通知,

  // Native notification
    var notification = new AppleNotification(@"
    {
      ""aps"": {
        ""alert"":""New notification!""
      }
    }");

    notification.Expiry = DateTime.UtcNow.AddMinutes(2); 

await notificationHubClient.SendNotificationAsync(notification);

答案 1 :(得分:0)

如果您使用的是模板通知,请按以下步骤操作。

    AppleTemplateRegistrationDescription registration = new AppleTemplateRegistrationDescription(parameters.registrationID)
{ BodyTemplate = new CDataMember("{\"aps\":{\"alert\":\"$(body)\",\"payload\":\"$(payload)\",\"deeplinking\":\"$(deeplinking)\",\"category\":\"$(category)\",\"image\":\"$(image)\"}}"),
                                Tags = itags,
Expiry = "$(APNS_Expiry)"
};

作为发送的一部分,您可以传递到期值。

var notification = new TemplateNotification(new Dictionary<string, string>()
{
 {"APNS_Expiry", DateTime.UtcNow.AddMinutes(10).ToString("o") }, //Timestamp
                        {"body", NotificationText},
                        {"payload", NotificationText},
                        {"deeplinking", payload},
                    }); 
            var Responsehub = hub.SendNotificationAsync(notification);

如果您使用的是原生通知,

  // Native notification
    var notification = new AppleNotification(@"
    {
      ""aps"": {
        ""alert"":""New notification!""
      }
    }");

    notification.Expiry = DateTime.UtcNow.AddMinutes(2); 

await notificationHubClient.SendNotificationAsync(notification);