我正在使用 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 似乎会导致之后发送的所有通知都失败。