我正在使用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。我原以为这本来没问题,因为我原以为Apple会拒绝那些通知请求。从请求中删除这些ID似乎使它稍微更稳定。我将继续监控这个问题,但是向APN发送一个设备ID错误的请求会阻止我的连接发送我排队的未来通知,这似乎很奇怪......
编辑2:
首先,我发现在我打电话注册苹果服务之前我的通知应该已经连线(我的上述代码已被修改以反映正确的方法)。此外,我发现APN旨在在第一个失败时停止发送通知。我相信PushSharp会尝试重新发送尚未发送的项目,但我需要做一些进一步的测试来验证这是否有效。目前,似乎向生产服务器发送开发设备ID将导致在使用相同的PushBroker连接后发送的所有通知失败。