354

私は最近、iPhoneアプリがアプリへの通知を ほぼ瞬時に受信する機能について学びました。

これはプッシュ通知の形式で提供されます。これは、iPhoneへのデータ接続を常にオンにし、アプリにバイナリパケットを送信する特注のプロトコルです。これにより、サーバーアプリが電話アプリに送信されてから0.5〜5秒の間にアラートが非常にすばやくポップアップ表示されます。反応時間。これは、着信メッセージとしてではなく、データプランの一部として課金される非常に小さなパケットで、SMSではなくデータとして送信されます。

Androidを使用して同様の機能があるかどうか、またはAndroidAPIを使用してこれに近いものを実装できるかどうかを知りたいです。明確にするために、私は次のように定義します。

  • SMSメッセージではなく、データ駆動型ソリューション
  • 可能な限りリアルタイム
  • スケーラブルです。つまり、モバイルアプリのサーバー部分として、数千のアプリインスタンスに数秒で通知できます。

アプリがプルベースのHTTP要求/応答スタイルである可能性があることを感謝しますが、理想的には、通知を確認するためだけにそれほど多くのポーリングを行いたくありません。それに加えて、それはデータプランをドリップドレンするようなものです。

4

16 に答える 16

220

Firebase Cloud Messaging FCM FAQは、GCMの新しいバージョンです。GCMのコアインフラストラクチャを継承して、Android、iOS、Chromeでメッセージを確実に配信します。ただし、今日多くの開発者が通知の処理にGCM SDKを使用しており、クライアントアプリのアップグレードには時間がかかるため、引き続きGCMをサポートします。

2012年6月26日の時点で、Googleクラウドメッセージングは​​、デバイスで実行されているアプリケーションにメッセージを送信するための推奨される方法です。

以前(現在は非推奨)、このサービスはCloud ToDeviceMessagingと呼ばれていました。

于 2010-05-28T17:08:52.237 に答える
51

XMPPは優れたソリューションです。プッシュ対応のリアルタイムAndroidアプリケーションに使用しました。XMPPは強力で、拡張性が高く、統合と使用が簡単です。

無料のXMPPサーバーがたくさんあり(礼儀からそれらを悪用してはいけませんが)、独自のボックスの1つで実行できるオープンソースサーバーがあります。OpenFireは優れた選択肢です。

必要なライブラリは、上記のようにSmackではなく、 aSmackです。ただし、これはビルド環境であることに注意してください。ライブラリをビルドする必要があります。

これは、XMPPソリューションのバッテリー寿命への影響について私が行った計算です。

Androidクライアントは、XMPPサーバーにハートビートを送信するために定期的にウェイクアップすることにより、永続的なTCP接続を維持する必要があります。
これは明らかに電力使用量の点でコストを課します。このコストの見積もりを以下に示します。

  • 1400mAhバッテリーの使用(NexusOneおよびHTCDesireで提供)
  • 3Gネットワ​​ークに接続されたアイドル状態のデバイスは、約5mAを使用します
  • ウェイクアップ、ハートビート、スリープサイクルは、5分ごとに発生し、完了するまでに3秒かかり、300mAを使用します。
  • したがって、1時間あたりのバッテリー使用量のコストは次のとおりです。
    • 36秒300mA=3mAh送信ハートビート
    • 3600秒5mA=アイドル時5mAh
    • 4:95 + 3 = 7:95mAhの合計
  • 1400mAhのバッテリーは、アイドル状態で約11.6日、アプリケーションの実行時に7.3日持続します。これは、バッテリー寿命が約37%短縮されることを意味します。
  • ただし、デバイスが完全にアイドル状態になることはめったにないため、バッテリー寿命が37%減少することは、実際には絶対的な最悪のケースです。
于 2011-04-17T19:26:54.083 に答える
34

私は最近、あなたが求めていることを行う方法として、Android用のMQTT http://mqtt.orgで遊び始めました(つまり、SMSではなくデータ駆動型、ほぼ即時のメッセージ配信、スケーラブル、ポーリングなしなど)。

役立つ場合に備えて、これに関する背景情報を記載したブログ投稿がありますhttp://dalelane.co.uk/blog/?p=938

(注:MQTTはIBMテクノロジーであり、私はIBMで働いていることを指摘しておく必要があります。)

于 2009-09-30T22:53:40.610 に答える
14

Xtifyプラットフォームをご覧ください。これが彼らがしていることのように見えます、

于 2010-03-01T04:19:44.173 に答える
12

グーグルはC2DMを減価償却しているが、代わりに彼らがGCM(グーグルクラウドメッセージング)を導入していると私は彼らの割り当てとその無料だとは思わない!ただし、Android2.2以降が必要です。http://developer.android.com/guide/google/gcm/index.html

于 2012-06-28T00:44:31.577 に答える
8

ターゲット市場に存在するGoogleライブラリに依存できる場合は、GTalk機能に便乗することをお勧めします(既存のユーザー名でリソースを登録し、BroadcastReceiverで受信したメッセージをインターセプトします)。

そうでない場合は、できないと思いますがXMPPの独自のバージョンをバンドルすることになります。これは面倒ですが、XMPPがスタンドアロンライブラリとして個別にバンドルされていると簡単になる可能性があります。

PubSubHububを検討することもできますが、ネットワークでの使用法はわかりません。XMPPの上に構築されていると思います。

于 2009-08-20T11:36:41.680 に答える
8

私はこれを調査してきましたが、jameshが推奨するPubSubHubBubはオプションではありません。PubSubHubBubは、サーバー間の通信を目的としています

「私はNATの背後にいます。ハブにサブスクライブできますか?ハブは私に接続できません。」

/匿名

いいえ、PSHBはサーバー間プロトコルです。NATの背後にいる場合、実際にはサーバーではありません。オプションのPSHB拡張機能を使用して、そのようなクライアントのハンギングゲット(「ロングポーリング」)やメッセージボックスポーリングを実行するためのアイデアを検討しましたが、コア仕様には含まれていません。コアスペックはサーバー間のみです。

/ブラッドフィッツパトリック、サンフランシスコ、カリフォルニア州

出典: http: //moderator.appspot.com/#15/e=43e1a&t=426ac&f=b0c2d(直接リンクはできません)

最も簡単な方法はCometHTTPプッシュを使用することであるという結論に達しました。これはシンプルでよく理解されているソリューションですが、Webアプリケーションに再利用することもできます。

于 2009-10-21T11:28:10.440 に答える
8

Meteorコメットサーバーをバックエンドとして使用して、Androidでプッシュ通知用のJavaライブラリを開発するための新しいオープンソースの取り組みがあります。あなたは執事プロジェクトのブログでそれをチェックすることができます。開発者が必要なので、広めてください!

于 2010-04-17T02:49:47.573 に答える
8

Googleは最近(2016年5月18日)、Firebaseがほぼリアルタイムのプッシュ通知を含むモバイル開発者向けの統合プラットフォームになったことを発表しました。マルチプラットフォームでもあります

同社は現在、すべてのFirebaseユーザーに、iOS、Android、およびWebをサポートする無料の無制限の通知を提供しています。

ソース

于 2016-05-26T06:21:04.163 に答える
6

XMPPの実装を採用しないのはなぜですか。現在、gtalk、jabber、citadelなどを含む非常に多くのパブリックサーバーが利用可能です。Androidの場合、SMACKという名前のSDKも利用できます。これはプッシュ通知とは言えませんが、XMPPを使用すると、クライアントとサーバー間の接続を開いたままにして、双方向通信を可能にすることができます。Androidクライアントとサーバーの両方が相互に通信できることを意味します。現在、これはアンドロイドのプッシュの必要性を満たします。私はサンプルコードを実装しました、そしてそれは本当にうまくいきます

于 2010-04-16T11:09:45.677 に答える
6

どこで読んだかわかりませんが、GmailはオープンTCP接続を利用して電子メールをプッシュしていると思います。

于 2009-08-07T22:44:04.637 に答える
6

GTalkSDKから削除されたように、「標準」のプッシュメッセージングシステムを作成することをお勧めします。このように、実行する必要があるサービスは1つだけで、追加のtcp接続を1つだけ開く必要があります。アプリケーションはを使用してこのサービスと通信するIntents必要があり、最初にサービスからの通知を送受信するための許可を要求する必要があります。次に、サービスは、新しいアプリケーションがメッセージを送受信したいことをユーザーに通知する必要があります。その後、ユーザーは許可を付与または拒否するため、ユーザーは引き続き制御できます。次に、アプリケーションはアクション+カテゴリをサービスに登録するため、サービスはプッシュされたメッセージを配信する方法を認識します。

良い考えでしょうか?

于 2010-03-22T21:44:50.943 に答える
6

私は最近http://pushdroid.orgを開発しました。これは、グーグルが2.2で実装したのと同じように、電話にインストールする必要がある単一のアプリケーションです。これは1.5から機能し、意図的にブロードキャストしています。

于 2010-08-03T10:33:37.987 に答える
4

GCMの問題は、プロセスに多くの構成が含まれていることです。

  • あなたはあなたのAndroidアプリに多くの定型文を追加する必要があります
  • GCMサーバーと通信するように外部サーバーを構成する必要があります
  • テストを書く必要があります

(私のような)単純なものが好きなら、UrbanAirshipを試してみてください。これは(IMHO)多くの構成を行わずにアプリでGCMを使用する最も簡単な方法です。また、GCMメッセージが正しく配信されていることをテストするための美しいGUIも提供します。

注:私はUrbanAirshipとは一切関係がありません

于 2013-08-22T21:43:41.280 に答える
2

https://github.com/Guti/Google-Cloud-Messaging--Titanium-/blob/master/src/com/google/android/gcm/GCMRegistrar.java

プッシュのためのその本当に良いそして働く解決策。

ぜひお試しください

于 2014-04-17T12:41:17.800 に答える
2

彼らはあなたのコードで彼らのライブラリクラスを使用することによってあなたによって使用されなければならない彼らのリスナーを持っています。プッシュすることを気にする必要はありません。サーバーにメッセージを送信する必要がありますサーバーはメッセージをデバイスにプッシュします。彼らはOAuthを使用しています。プロトコルに関しては、CCSとXMPPを使用する2つの方法があります。CCSは、認証されたトランスポート層としてXMPPを使用するだけなので、ほとんどのXMPPライブラリを使用して接続を管理できます。デバイスに通知を送信するには、Androidアプリでコードを記述して、サーバーコードと同様に送信します。メッセージの送信は、コードによってのみ行われます。GCMの場合、残りはGoogleサーバーによって処理されます。このリンクで詳細を確認できます

http://developer.android.com/google/gcm/server.html

また、セキュリティの問題について

グーグルクラウドメッセージングセキュリティhttps://groups.google.com/forum/#!topic/android-gcm/M-EevBitbhQ

アプリが実行されていない場合、ブロードキャストリスナー用のコードを作成する必要があるため、デバイスも通知を受信できます。バックグラウンドでサーバーをリッスンし、メッセージパケットが存在する場合は常に、通知としてメッセージを受信します。Androidには、気にしないようにする必要のあるサービスがあります。これらのリソースは、作業を容易にするライブラリクラスを使用して使用するだけでよく、アプリが実行されていない場合は書き込みを許可し、通知を受け取ります。明らかに、アプリを受信させるリスナーがいるでしょう。このリンクの「メッセージを受信する」セクションを確認してください

http://developer.android.com/google/gcm/client.html

ユーザーからのリクエストも受け付けます。GCMの場合はそれで十分です。「メッセージを送信」をチェックしてください

http://developer.android.com/google/gcm/client.html

于 2014-05-21T17:57:36.013 に答える