私はメッセージングアプリに取り組んでおり、サーバーからクライアントにデータを送信する方法についてジレンマを抱えています。
クライアントがサーバーにメッセージを送信するために使用する集中サーバー設計を使用NSURLConnection
しています。サーバーは開いているソケットを保持および管理せず、クライアントの1つにメッセージを送信できません。そのため、クライアントはタイマーを使用して 2 秒ごとにサーバーにクエリを実行し、新しいデータが待機しているかどうかを確認します。
このアプローチの問題は、2 秒ごとにサーバーをポーリングするとバッテリーが非常に速く消耗するように見えることです。そのため、クライアントがサーバーをポーリングする代わりに、APNS* を使用することを考えました。サーバーは* ** クライアントにプッシュ通知 を送信し、クライアントはサーバーからデータを取得します。
* APNS を使用- クライアントが許可する場合、クライアントはもちろんこのオプションを無効にすることができます。そのため、アプリがフォアグラウンドに入るたびにプッシュが許可されているかどうかを確認し、許可されていない場合はポーリング アプローチに戻ります。
** 新しい情報は、テキスト メッセージからサーバー管理メッセージまで、何でもかまいません。(そして管理者メッセージがたくさんあります...)
たとえば、私のアプリでは、ユーザーは自分の友達のステータス (オンライン/オフライン) を見ることができるので、user1 と user2 が友達で、user2 がオンラインからオフラインにステータスを変更した場合、次に、サーバーはこの新しい情報 (管理者メッセージ = user2_offline) を user1 に送信する必要があります。
*** プッシュ通知サーバーの送信は空です (データ/サウンドなし)。これは、クライアントが新しい情報をフェッチするための単なるトリガーであるため、プッシュがクライアントに送信され、クライアント アプリが閉じられた場合、彼はそうしません。何にでも気づく。(アプリが実行中の場合、サーバーから新しい情報を取得します)
このアプローチは、大量のプッシュ通知の使用を必要とする大規模なメッセージング アプリで機能しますか?
より明確にするために、私の主な関心事は次のとおり
です。
2. Apple は、サーバーからの 1 日に数千または数十万のプッシュ通知を承認しますか?