WhatsAppは、使用されていないときにメッセージをどのように受信できますか?


23

WhatsAppが使用されていないときにメッセージを受信する方法に興味があります。

つまり、WhatsAppは携帯電話ネットワークではなくインターネット接続を使用して機能することを理解しています。何時間も電話に触れていないことを想像してください。その瞬間、友人からWhatsAppでメッセージが送られてきました。すぐに手に入れます。それは、WhatsAppが常にインターネット接続を維持しているということですか?つまり、WhatsAppはサーバーとして機能し、電話のポートを開くということですか?それとも、長時間実行されるHTTPリクエストでしょうか?



回答:


18

最初は、これはAndroidクラウドからデバイスへのメッセージングのインスタンスである可能性が高いと考えましたが、WhatsAppは必要な権限を宣言せず、Eclair(Android 2.1)で動作しますが、クラウドからデバイスへのメッセージング(およびその代替であるGoogle Cloud Messaging)には少なくともFroyo(Android 2.2)が必要です。

ただし、おそらく何らかのプッシュ通知サービスです。WhatsAppのソースコードにアクセスせずに実装方法を正確に言うことは不可能です。

ただし、使用していないときにメッセージを受信できるという点は、比較的簡単に説明できます。アプリには、ほぼ確実にバックグラウンドで実行されるサービスがあり、定期的にサーバーにチェックインします(またはサーバープッシュを受信します)。メッセージを受信すると、サービスは通知をポップアップします。

サーバーがプッシュを実行する方法に関する質問については、可能性があります(再び、ソースコードがないと確認できません)。

  1. WhatsAppが起動し、2つのソケットを開きます。1つはリッスンし、もう1つはサーバーにメッセージを送信します。
  2. WhatsAppsは最初のソケットでリッスンを開始します。
  3. WhatsAppは、電話番号とリスニングソケットのポートを含むメッセージをサーバーに送信し、確認を待ちます。
  4. サーバーは、メッセージ内の電話番号とポート番号、およびメッセージの送信元のIPアドレスを記録します。
  5. サーバーは承認をアプリに送信します。
  6. アプリは確認応答を受信し、メッセージソケットを閉じます。
  7. 宛先として電話番号を含むメッセージがサーバーに届きます。
  8. サーバーは、電話番号に関連付けられているIPアドレスとポート番号を使用し、その情報を使用してメッセージを電話にプッシュします。

これが機能するためには、アプリはネットワーク接続の状態を監視し、必要に応じてリッスンソケットをリセット/登録メッセージを再送信する必要があります(たとえば、IPアドレスが変更された場合)。


2
Whatsappはプレイストアアプリに依存していますか?ウィキペディアのリンクから引用:マーケットアプリケーションがインストールされているAndroid 2.2以降を実行しているデバイスが必要です。したがって、それは正確にはそうではないかもしれませんが、確かに同じ原則に基づいています。あなたは、あなたの答えは、より貴重にするために、かかわらず、記事の2番目の段落から一部抜粋を含めることができます(多くのupvotesを受け取る;)
イジー

@Izzy、あなたはまったく正しいです、私は詳細を追加すべきでした。しかし、私がSubwayに座っていて、SGS3について書いている間は困難でした。今すぐ答えを更新しました。:-)
トレバールード

3
モバイルが静的IP上にある場合でも、Natはステップ8を許可しません。可能な方法は、Xmppまたは長いポーリングhttp

1
必要な権限があります。Playストアで「インターネットからデータを受信する」としてリストされています。android.stackexchange.com/a/61794
nyuszika7h

2
残念ながら、着信TCP接続はモバイルデバイスではほとんど不可能です。それらの圧倒的多数はパブリックIPアドレスを持たず、たとえそれらが(たとえばIPv6対応のオペレーターの場合)でも、着信接続は通常フィルタリングされます。今日のほとんどのアプリケーションは、Googleのプッシュサービスを使用するか、独自の永続的なクライアントをサーバーソケット接続(特にFacebook)にロールします。私の経験では、WhatsAppはハイブリッドアプローチを取っているようです。GCMが利用可能な場合、数分間アイドル状態になった後、永続的なソケットが閉じられます。
lxgr

8

WhatsAppがリスニングポートを開かないことは確かです。ほとんどのISPは着信要求をブロックしますが、それは機能しません。

WhatsAppにはサービスがあります。基本的には、技術的にはWhatsAppを終了することはありません。したがって、WhatsAppを「実行していない」ときにメッセージを受信する方法は、実行中にメッセージを受信する方法とまったく同じです。

クライアント(この場合はWhatsApp)はサーバーに接続します。クライアントはその接続を維持します。サーバーが新しいことを言うと、その接続を介してクライアントに送信します。そしてそれだけです。

最初の推測は正しいです。

WhatsAppには真のログアウトメカニズムはありません。こちらをご覧ください

WhatsAppにはログアウトメカニズムがありません。このアプリケーションは、常に接続されるように設計されているため、電話を積極的に使用していないときでも、メッセージをすばやく受信できます。これはSMSの動作に似ており、WhatsAppメッセージをほぼ瞬時に配信できます。


2
あなたのリンクはノキア向けです-Androidに関する同様の質問を彼らのサイトで見つけることができませんでした。同じことがAndroidにも当てはまりますか?Android FAQのこの質問は、常時接続されたサーバー/クライアントではなく、PUSHアーキテクチャ(「メッセージがまだ電話に届くのに時間がかかりすぎていますか?」セクション)を利用していることを示しています。
ディランヤガー

2
@DylanYagaは正しいです。たとえば、この回答の最後の段落とトレボールの回答をご覧ください
イジー

これが最も論理的なようです。多くの場合、これらのサービスはプッシュサービスと呼ばれますが、クライアントがポートを開き、実際にローカルサーバーとして機能することは想像できません。それは確かにセキュリティの問題を引き起こすでしょう。
SPRBRN 14

1

彼らのFAQは、彼らがGCMを使用することを示唆しています。「メッセージがまだ携帯電話に届くのに時間がかかりすぎていますか?」の答えを確認してください。


よくある質問でよくある質問ですが、Trebor Rudeが指摘しているように、アプリには必要な許可がないため、GCM自体を使用することはできません。
ダンヒューム14

2
必要な権限があります。Playストアで「インターネットからデータを受信する」としてリストされています。android.stackexchange.com/a/61794
nyuszika7h

2
私が見たものから、彼らは利用可能な場合はGCMを使用しています。何らかの理由で使用できない場合(たとえば、Playサービスのないデバイスやネットワークでフィルターされている場合)、ソケットは無期限に保持されます。
lxgr

0

他のアプリのようなWhatsappはサービスとして実行されます(常に接続されています)あなたに送信されたメッセージは、30日までwhatsappサーバーに保存されます。個々のアカウントはユーザーの電話番号@ whatsapp.netで保存されます


1
30日間。その事実のソースをリンクしてください
-beeshyams

0

私はそれが次のようになるはずだと思う:

whatsappが新しい場合、PNSベースのソリューションを使用していましたが、このPNSはデバイスをウェイクアップし、ウェイクアップすると、whatsappサーバーへのソケット接続を作成できます。

whatsappが人気を博した後、ほとんどのデバイスはネイティブアプリケーションとして提供され、ネイティブアプリケーションは削除されません。私のサムスンS8では、whatsappをアンインストールできません。省電力モードでは強制終了できません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.