4

我正在使用 PushSharp 库发送 Apple 推送通知。出于某种原因,这些设备只会收到我推送的一些通知。例如,如果我将 5 个通知推送到一台设备,它可能只会收到 3 个。我正在使用以下代码:

while(true)
{
    //... build models...

    PushBroker push = new PushBroker();
    push.OnNotificationFailed += OnNotificationFailed;
    push.OnDeviceSubscriptionExpired += OnDeviceSubscriptionExpired;
    push.OnChannelException += OnChannelException;
    push.OnServiceException += OnServiceException;
    push.OnChannelDestroyed += OnChannelDestroyed;
    push.OnDeviceSubscriptionChanged += OnDeviceSubscriptionChanged;
    push.OnNotificationRequeue += OnNotificationRequeue;
    push.OnNotificationSent += OnNotificationSent;
    push.RegisterAppleService(new ApplePushChannelSettings(true, appleCert, "Password"));

    // Send a notification to each registered device.
    foreach (var model in models)
    {
         _pushBroker.QueueNotification(new AppleNotification()
              .ForDeviceToken(model.DeviceToken)
              .WithAlert(model.alert)
              .WithBadge(models.Count())
              .WithCustomItem("id", model.Id)
              );
     }

     _pushBroker.StopAllServices();

     // Sleep for 15 minutes
     Thread.Sleep(15 * 60000);
}

我有点坚持这个 - 有没有人对可能导致这种情况有任何想法?

编辑1:

我确实注意到我不小心包含了某些设备的开发 ID。我原以为这样就可以了,因为我原以为苹果会拒绝这些通知请求。从请求中删除这些 id 似乎使它稍微稳定了一些。我将继续监视此问题,但向 APN 发送带有错误设备 ID 的请求会阻止我的连接发送我已排队的未来通知似乎很奇怪......

编辑2:

首先,我发现在我调用注册苹果服务之前我的通知应该已经连接(我上面的代码已经修改以反映正确的方法)。此外,我发现 APN 旨在在第一个失败时停止发送通知。我相信 PushSharp 会尝试重新发送尚未发送的项目,但我需要做一些进一步的测试来验证这是否有效。目前,在使用相同的 PushBroker 连接时,向生产服务器发送开发设备 ID 似乎会导致之后发送的所有通知都失败。

4

0 回答 0