PushSharp ライブラリを使用して Apple プッシュ通知を送信しています。何らかの理由で、デバイスは私がプッシュした通知の一部しか受信していません。たとえば、1 つのデバイスに 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 を削除すると、少し安定したようです。この問題を引き続き監視しますが、不適切なデバイス ID でリクエストを APN に送信すると、接続がキューに入れられた将来の通知の送信を停止するのは奇妙に思えます...
編集2:
まず、Apple サービスを登録するための呼び出しを行う前に、通知が接続されている必要があることがわかりました (上記のコードは、これを行う正しい方法を反映するように変更されています)。また、最初の通知が失敗した場合、APN は通知の送信を停止するように設計されていることがわかりました。PushSharp は送信されていないアイテムを再送信しようとしていると思いますが、これが機能することを確認するには、さらにテストを行う必要があります。現時点では、同じ PushBroker 接続を使用している間、開発用デバイス ID を本番サーバーに送信すると、それ以降に送信されたすべての通知が失敗するようです。