WhatsAppは最新のアップデートでエンドツーエンドの暗号化( whitepaper )を実装しました。
WhatsAppがプッシュ通知withメッセージの内容をAppleプッシュ通知サービス)に送信することはどうして可能ですか?
可能な解決策の1つは、暗号化されていないメッセージをアプリ自体からAPNに送信することですが、これは悪用されやすく、エンドツーエンドの暗号化の目的に反します。
更新:
Appleのドキュメントによると、もう少しテストしたところです:
ただし、ユーザーがアプリを強制終了した場合、システムはアプリを自動的に起動しません。その場合、システムがアプリを自動的に再起動する前に、ユーザーはアプリを再起動するかデバイスを再起動する必要があります。
これをテストした結果、プレーンテキストのプッシュ通知が引き続き受信されました。これにより、受信した通知を復号化して再投稿するために、アプリがバックグラウンドで実行されていないことがわかります。
2017年5月更新:
私はVoIP API(以下の回答で説明されているように)を使用して、デモアプリで同じ結果を自分で効果的に達成しました。非常にうまく機能します。
2017年7月更新:
Appleは、非VoIPアプリのプッシュ通知用のAPIの使用を許可しなくなりました。ただし、それらはWhatsAppが無限の公正さでそれを行うことを許可します。
2018年9月更新:
通知アプリケーション拡張機能を使用して、プッシュ通知を復号化できるようになりました。ただし、動的ライブラリはそのような拡張機能での使用は推奨されていないため、復号化などのために静的にコンパイルできるコードベースが必要です。
WhatsAppは、この問題を解決するためにPushKitとともにVOIPバックグラウンドモードを使用している可能性があります。
Voipプッシュは次のとおりです。
詳細については、 Voice Over IP(VoIP)のベストプラクティスを参照してください
VoIPプッシュの暗号化されたペイロードが復号化されると、復号化されたメッセージとともに「ローカル通知」が表示されます。
ただし、小さな問題が1つあります。PushKitはiOS 8以降でのみ利用できます。では、Whatsappは以前のバージョンのiOSでそれをどのように行っていますか?まあ、そうではありません。 iOS 8より前のバージョンの通知でメッセージのプレビューを表示することはできません(iOS 7で確認済み、スクリーンショットを参照)
Push Notifications
(通知センターに表示されるもの)とは、Remote Notifications
(APN経由で送信されるもの)とまったく同じものではありません。
Androidで2つは完全に異なります。最初の1つは Notification と呼ばれ、2つ目は Message またはDownstream Message
と呼ばれます。
しかし、iOSに戻ると、アプリケーションは Local Notifications を生成でき、通知センターに表示されます。これらはリモート通知によってトリガーされる必要はありません。それを行うのはアプリのロジック次第であり、iOSアプリはこれらの通知を生成できるバックグラウンドタスクと同期を実行する可能性があります。
iOS7以降、iOSアプリケーション バックグラウンドでHTTP操作を実行することもできます 無制限の時間(アプリケーションがシステムへのネットワーク転送を委任しているため、限られた量だけアプリが起動します)転送が完了する時間の)。
リモート通知 一方で、APNのプッシュをユーザーに直接送信するように最初に設計されました。しかしApple開発者がプッシュ通知を通知センターではなくアプリケーションに送信する必要性を認識し、silent flag を追加しましたリモート通知に サーバーはアプリケーションを起動する通知を送信できます ユーザーに影響を与えることなく。アプリケーションは同期とロジックを実行し、アプリケーション自体を作成することを決定しますローカル通知かどうか(通知センターに表示されます)。
さらに、リモート通知 ' ペイロードは最近まで256バイトの制限を受けていました 、これにより多くの開発者がこれらの通知をプッシュとして使用することを余儀なくされましたデータチャネルとしてではなく、syncメッセージ。
私をよく理解していれば、WhatsappはAPNを使用してリモート通知でメッセージペイロードを送信する必要がないことを理解しています。