5

私はメッセージングアプリケーション(WhatsAppなど)に取り組んでおり、その主な機能の実装についてジレンマがあります。クライアント1からクライアント2にメッセージを送信します。メッセージングアプリケーションでAPNを使用する

私は、クライアントがNSURLConnectionを使用してサーバーにメッセージを送信し、サーバーが開いているソケットを保持および管理せず、クライアントの1つに対してメッセージを送信できない集中型サーバー設計を使用していますが、クライアントはタイマーを持ち、2秒ごとにサーバーに照会して、新しいメッセージがそれらを待っているかどうかを確認します。

このアプローチの問題は、2秒おきにサーバーを照会するとバッテリーが非常に早く消滅するようです。そのため、クライアントがAPNSを使用するように照会する代わりに、クライアント1がサーバーにメッセージを送信すると、サーバーはclient2にプッシュ通知を送信し、client2はサーバーからデータをフェッチします。

大量のプッシュ通知を使用する大規模なメッセージングアプリケーションでこのアプローチを使用できますか?

答えて

5

はい。私はこのアプローチが大丈夫であり、うまくいくと言います。

アプリケーションが正面で実行されているときにソケット接続を作成することもできます。しかし、ユーザーがあなたのアプリを終了したときに、APNSの方法(あなたの好みの方法)も機能します。

APNSは巨大な負荷を処理できます。私が気づいた限りでは、わずかな遅延しかありません。

iOSのPUSH-SystemはAppleからのHTTP接続で、応答チャンネルを数時間開いたままにします(Webページを数時間読み込むなど)。 バッテリーの約10%を使用します。 他のキープアライブHTTP /ソケット接続を作成しておらず、エンドユーザのバッテリを節約するためにリンネルチャネル(APNS)を再利用することが最善の方法です。

アプリではプッシュ通知を受け取り、JSONデータを解析して自分のサーバーでプル/同期することができます。

アプリがフォアグラウンドで実行されていないときは、何をすべきかを覚えておく必要があります(受信したメッセージをWhatsAppのようにAPNSメッセージとして表示することもあります)。

+0

"しかし、ユーザーがあなたのアプリを終了したときに、あなたの好みの方法でAPNS-wayが動作する" - どちらの方法でも、ユーザーがオフラインのときにAPNSを使用する予定だった。私の主な関心事は次のとおりです。1. APNSは、メッセージングメカニズムの中核として使用できるほど十分にラベルを付けましたか? 2.アップルはサーバーから1日に数千または数十万回のプッシュ通知を承認するでしょうか? – Eyal

+1

1.リンゴの「法律」(スパムはなく、広告はありません)を破らなければ、はいです。 WhatApp and co。また、APNSに依存しています。そして、 "非app-foreground"モードでメッセージを受け取ることを望むとき、それを行う他の方法はありません。 2.はい。 APNSの負荷が高いため、アプリを拒否することはありません(ただし、プッシュメッセージのコンテンツはリンゴの観点からは無効です[スパム、広告など]) –

関連する問題