最初は、これはAndroidクラウドからデバイスへのメッセージングのインスタンスである可能性が高いと考えましたが、WhatsAppは必要な権限を宣言せず、Eclair(Android 2.1)で動作しますが、クラウドからデバイスへのメッセージング(およびその代替であるGoogle Cloud Messaging)には少なくともFroyo(Android 2.2)が必要です。
ただし、おそらく何らかのプッシュ通知サービスです。WhatsAppのソースコードにアクセスせずに実装方法を正確に言うことは不可能です。
ただし、使用していないときにメッセージを受信できるという点は、比較的簡単に説明できます。アプリには、ほぼ確実にバックグラウンドで実行されるサービスがあり、定期的にサーバーにチェックインします(またはサーバープッシュを受信します)。メッセージを受信すると、サービスは通知をポップアップします。
サーバーがプッシュを実行する方法に関する質問については、可能性があります(再び、ソースコードがないと確認できません)。
- WhatsAppが起動し、2つのソケットを開きます。1つはリッスンし、もう1つはサーバーにメッセージを送信します。
- WhatsAppsは最初のソケットでリッスンを開始します。
- WhatsAppは、電話番号とリスニングソケットのポートを含むメッセージをサーバーに送信し、確認を待ちます。
- サーバーは、メッセージ内の電話番号とポート番号、およびメッセージの送信元のIPアドレスを記録します。
- サーバーは承認をアプリに送信します。
- アプリは確認応答を受信し、メッセージソケットを閉じます。
- 宛先として電話番号を含むメッセージがサーバーに届きます。
- サーバーは、電話番号に関連付けられているIPアドレスとポート番号を使用し、その情報を使用してメッセージを電話にプッシュします。
これが機能するためには、アプリはネットワーク接続の状態を監視し、必要に応じてリッスンソケットをリセット/登録メッセージを再送信する必要があります(たとえば、IPアドレスが変更された場合)。