つまり、ユーザー接続情報を取得するためにピンポンメッセージを使用するのでしょうか。要するに、彼らは来たるべき要求のためにどこに送るべきかをどうやって知るのでしょうか?
3 に答える
iOSの場合、これらのアプリはAPNS(Apple Push Notification Service)を使用します。
これは、Appleが提供するサービスで、アプリケーションが何かが起こったときにユーザーに警告するのに役立ちます。
要するに(そして単純化して)、それはこのように機能します
アプリがインストールされると、ユーザーはアプリが電話にプッシュメッセージを送信できるようにするかどうかを尋ねられます。
ユーザーが同意すると、アプリはAPNSサーバー(Appleがホスト)に登録し、「デバイストークン」を登録します。このトークンは、AppleServerが電話を追跡するのに役立つシリアル番号です。
アプリはアプリケーションサーバー(Viberのサーバーなど)に接続し、このサーバーにもデバイストークンを送信します。サーバーはそれを特定のユーザーに接続します。
ユーザーが電話を受けると、viberサーバーはAPNSサーバーに接続し、APNSサーバーがユーザーに警告します。
APNSサーバーは、ユーザーが自分の電話に持っているすべてのアプリを追跡します。それらすべての通知を処理します。iPhoneとAPNSサーバー間の接続はiOSプラットフォームに組み込まれており、定期的に自動的に行われます。
APNSサーバーがviberサーバーから特定のデバイストークンで何かが発生していることを通知されると、APNSサーバーはその特定の電話に接続し、電話にメッセージを送信します。この場合、ユーザーには、viberからの着信があることが通知されます。
APNSのドキュメントはここにあります: ローカルおよびプッシュ通知プログラミングガイド
Androidに関しては、同等のサービスであるC2DMがあります。 私の推測では、これらのアプリは、このサービスを使用するAndroidでも同様に機能します。
Pushの使用を開始するのに少し助けが必要な場合は、Urban Airshipと呼ばれる優れたサービスがあり、iOS、Android、およびその他のプラットフォームの両方をサポートしています。
編集:アプリケーションがすでに開いている場合は、ソケット接続を使用して接続を開いたままにするか、ポーリングによってコンテンツを更新できます。これは、アプリケーションの重要度によって異なります。
このようなアプリケーションでは、ユーザーはAndroidデバイスの一意のIDに基づいて追跡されます。
import android.provider.Settings.Secure;
private String android_id = Secure.getString(getContext().getContentResolver(),
Secure.ANDROID_ID);
これらのアプリはすべてプロバイダーのサーバーに接続し、接続を開いたままにします。したがって、サーバーはクライアントが接続されているかどうかを判断できます。それ以降は、通常のネットワーク通信になります。
- クライアント#1は、宛先情報とともにメッセージをサーバーに送信します
- サーバーは、新しいメッセージが利用可能であるという通知を宛先クライアントに送信します
- クライアント#2は、通知時にサーバーからメッセージを取得します