アプリがインストールされている何万もの iOS デバイスに通知をプッシュする必要があります。私は PushSharp でそれをやろうとしていますが、ここでいくつかの基本的な概念が欠けています。最初に、これを Windows サービスで実際に実行しようとしましたが、動作しませんでした - _push.QueueNotification() 呼び出しから null 参照エラーが発生しました。次に、文書化されたサンプルコードが行ったことを正確に行い、機能しました。
PushService _push = new PushService();
_push.Events.OnNotificationSendFailure += new ChannelEvents.NotificationSendFailureDelegate(Events_OnNotificationSendFailure);
_push.Events.OnNotificationSent += new ChannelEvents.NotificationSentDelegate(Events_OnNotificationSent);
var cert = File.ReadAllBytes(HttpContext.Current.Server.MapPath("..pathtokeyfile.p12"));
_push.StartApplePushService(new ApplePushChannelSettings(false, cert, "certpwd"));
AppleNotification notification = NotificationFactory.Apple()
.ForDeviceToken(deviceToken)
.WithAlert(message)
.WithSound("default")
.WithBadge(badge);
_push.QueueNotification(notification);
_push.StopAllServices(true);
問題 #1 : これは完全に機能し、iPhone に通知ポップアップが表示されます。ただし、これはプッシュ サービスと呼ばれるため、サービスのように動作すると想定しました。つまり、インスタンス化して、おそらく Windows サービス内で _push.StartApplePushService() を呼び出します。そして、実際に通知をキューに入れることを考えました。フロントエンドでこれを行うことができます(管理アプリとしましょう):
PushService push = new PushService();
AppleNotification notification = NotificationFactory.Apple()
.ForDeviceToken(deviceToken)
.WithAlert(message)
.WithSound("default")
.WithBadge(badge);
push.QueueNotification(notification);
明らかに (そして既に述べたように)、それは機能しませんでした - 最後の行は null 参照例外をスローし続けました。
これをサービス/クライアントの方法で設定する方法を示す他の種類のドキュメントを見つけるのに苦労しています(すべてを一度に呼び出すだけではありません)。それは可能ですか、それとも PushSharp をどのように利用すべきかという点を見逃していますか?
問題 #2 : また、一度に多くのデバイス トークンを対象にする方法を見つけることができないようです。それらをループして一度に 1 つずつ通知をキューに入れる必要があります。それが唯一の方法ですか、それともここでも何か不足していますか?
前もって感謝します。