Androidプッシュサービス-Baiduクラウドプッシュ
Android Push Service Baidu Cloud Push
a、イントロを押す
プッシュメッセージは、定義上、アクティブなメッセージと相手側によって開始され、特定の方法で発信メッセージと受信メッセージとの接続を確立します。 Android開発では、ここではこれをイニシエーターと呼びますPush server (Push Server)
受信者はThe client (Client)
と呼ばれます。ポーリングによって新しいメッセージや通知を取得する場合と比較して、電力消費クライアントのリソースまたは機器の消費の両方をプッシュする方がポーリングよりも優れているため、タイムリーなニュースプッシュアプリの必要性の大部分はメッセージ通知にプッシュ方法を採用しています。
天体で、被ばく壁! Androidエコシステムは、もともとAppleiOSと同様のプッシュサービスを提供していましたAPNS
of GCM(Google Cloud Messaging for Android)
、以前は知られていましたC2DM
しかし、何らかの理由で、国でのサービスはあまり良くありません。この欠陥を補い、同胞に向けて主要なAndroidプッシュサービスを使用したいので、国は主要なプラットフォームを立ち上げましたGCM
本日紹介された代替案は、Baiduクラウドプッシュによって提供されるものの1つです。また、国内でプッシュメッセージングやプッシュオーロラもプッシュサービスなどを行っています。クライアントには、シーナマイクロブログ、淘宝網、その他の国内大企業が含まれます。
プッシュテクノロジーは、クライアントとサーバーのTCP接続長の間に維持されるソケットを使用することで簡単に実現できます。このようにして、デバイスとデータのトラフィックをポーリングする電力消費によって引き起こされるものを大幅に減らすことができます。現在、単一のメッセージ本文サイズで提供されるBaiduクラウドプッシュプッシュサービスのサポートは4kですが、4kを超える場合は、メッセージ内でセカンダリサービスリクエストのURLリクエストを実行することをお勧めします。現在、Baiduクラウドは、Android端末用のプッシュ通知プッシュ、テキストメッセージプッシュ、およびプッシュリッチメディアを提供しています。
第二に、使用シナリオ
1.ユニキャストプッシュメッセージ
サーバーを指定されたデバイス(デバイス)またはユーザー(ユーザー)のプッシュメッセージにプッシュします。ユーザーはa userID
に対応します。ユーザーは複数のデバイスを持っている可能性があります。同じuserIDニュースをプッシュしたい場合、彼はすべてバインドされています。 upuserIDデバイスはメッセージを受信できます。解決策プッシュサーバーが登録してプッシュサーバーを取得するためにプッシュサーバーによって与えられたBaiduCloud Clientプッシュは、リスニングポートのクライアント側を返しますchannelID
with userID
、channelID
プッシュサーバープロセスで指定された端末登録、デバイスUUID、またはコードIMIE一意識別子として送信され、プッシュクライアントサーバーに登録された後、channelID
with userID
の生成に戻ります。両方のIDが開発者によって独自のメンテナンスを取得し、登録が完了し、プッシュサーバーが登録済み機器のリストを維持し、リストが維持されますuserID
with channelID
デバイス、および対応する場合の関係指定されたデバイスまたはユーザーにメッセージをプッシュしたい場合、プッシュサーバーは最初にデバイスリストをウォークスルーし、これら2つのIDが判断を行い、一意の必要なプッシュメッセージデバイスを見つけてから、メッセージをプッシュできます。
例:ユーザーAが公開を発行し、それに対応するレコードIDがuserID(またはchannelID)の問題である場合、公開されたユーザーBは質問に回答し、質問IDは対応するAPI userID(またはchannelID)を介してサーバーに送信されます。
2.プッシュメッセージパケット
クライアント設定タグ(タグ)方式によるユーザーパケットへのBaiduクラウドプッシュ、タグ生成モードは、クライアントメンテナンスもサーバーによって収集され、さまざまなタグプッシュサーバープッシュフィルタリングに対して実行され、メッセージは最終的に指定されたクライアントにプッシュされます。タグがクライアントによって自動的に設定されるか、ユーザーの習慣に基づいてサーバーによって収集されるか、プッシュサーバーによる統合管理、パケットメッセージのプッシュインタグベースの実装、プッシュサーバーが指定されたタグタグから最初にトラバースするかどうか、すべての対応デバイスはすでに登録されていますデバイスuserID
with channelID
に対応して取得され、指定されたパケットタグプッシュメッセージに対して実行される場合があります。コントラストユニキャストメッセージプッシュ、プッシュサイクルでのパケットメッセージプッシュは長くなるはずです、そしてメッセージのリストを維持するためにプッシュされるためには、いくつかの処理を行う必要があります、どのメッセージが成功にプッシュされますか、それは失敗です、それはする必要がありますクライアントメッセージをプッシュサーバーに受信した後にプッシュ通知を受信するため、メッセージ配信の正確性が保証されます。プッシュメッセージが失敗した場合、パケットのリストはプッシュされます。メッセージのプッシュを続行し、成功するまでメッセージをプッシュします。さらに、リアルタイムメッセージプッシュでは、パケットメッセージプッシュ比較ユニキャストメッセージプッシュは、受信メッセージを遅延させますパケットメッセージキューは、マイクロチャネルパブリックアカウントをプッシュするように存在します。これは、比較ユニキャストのメッセージプッシュパケットの例です。プッシュの適時性で受信されたメッセージには、一定の時間遅延があります。
さらに、クラス使用シーンがあり、プッシュメッセージはブロードキャストメッセージであり、メッセージタイプは、特定の行のパケット、すなわち、すべてのクライアントタグに対応するプッシュメッセージとして理解され得る。ブロードキャストメッセージは、メッセージキューの適時性に対するタグプッシュよりも、単一または少数のパケットのすべてのプッシュメッセージ、メッセージプッシュ、およびメンテナンスコストのコレクションです。
例:アプリケーションプロバイダーの設定設定ページ、ユーザーはさまざまなカテゴリを確認します。この方法で対応するタグトリガー設定は、プロアクティブなメンテナンスクライアントタグです。または、ユーザーが本のカテゴリを読み、サーバー側で対応するタグ設定をトリガーして、タグで指定された本のカテゴリを設定します。フォローアップは、サービス側のプッシュアプリケーションに基づいて、この本のタグ情報を収集します。これは、サーバーがタググループを維持する方法です。
IIIBaiduクラウドプッシュAndroid_SDK
Baiduは、開発者がクラウドサービスプッシュを統合するのに役立つ完全なデモを提供します。プッシュサービスSDKは、.jarパッケージと.soファイルを介して独自のプロジェクトに統合できます。これに先立ち、Baidu DeveloperCenterを登録して取得するためのアプリケーションの必要性API Key
プッシュサービスを使用する唯一のアプリケーションとしてのこのマークは、特定のプロセスに入る必要はなく、直接アクセスできますBaidu Developer Center
表示するには。
以下は、Android_SDKの全体的な概要と内部操作メカニズムを主に示しています。
FIGの上部フレームはAndroid_SDKFIG Baiduクラウドにプッシュされ、プッシュサーバーはSDKによって直接プッシュHTTP / HTTPS APIと対話し、複雑なバイパスを行うことができ、次の機能を提供します。
- クライアントレジスタの初期化とサービスバインディングをプッシュする
- 作成または削除されたタグ(タグ)
- プッシュサーバーは通知を受信し、カスタムメッセージプレゼンテーションモードを提供します
- クリックの通知、統計およびアプリケーション使用統計の削除など、統計分析機能をプッシュします
- リッチメディアプッシュ
Androidの最後に、合計3つとReceiver-Serviceを実装します。これは、登録後にサーバーから返された受信したchannelIDレシーバー情報を処理するために使用されます。
|
|
通常の操作を確実にするために2番目のメッセージシステムを受信するための受信者PushService:
|
|
3つ目は、実装されたプッシュメッセージを受信して処理するためのReceiverを開発することです。
/** * Push message processing receiver * @Author Ryan * @Create 2013-8-6 5:59:38 PM */ public class PushMessageReceiver extends BroadcastReceiver { public static final String TAG = PushMessageReceiver.class.getSimpleName() @Override public void onReceive(final Context context, Intent intent) { if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) { // Get the message content String message = intent.getExtras().getString( PushConstants.EXTRA_PUSH_MESSAGE_STRING) // user customizations message read mode Log.i(TAG, 'onMessage: ' + message) } else if (intent.getAction().equals(PushConstants.ACTION_RECEIVE)) { // return processing methods such as binding data //PushManager.startWork () return a value obtained by PushConstants.METHOD_BIND // Get method final String method = intent .getStringExtra(PushConstants.EXTRA_METHOD) // method returns an error code. Binding returns an error if the (non-zero), the application will not receive the message properly. There are a variety of reasons // bind failure, such as network reasons, or access token expires. // Do not make a simple call startWork when an error occurs, which may result in an infinite loop. // possible by limiting the number of retries, or other opportunity to re-call to resolve. final int errorCode = intent .getIntExtra(PushConstants.EXTRA_ERROR_CODE, PushConstants.ERROR_SUCCESS) // returns the contents final String content = new String( intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT)) // this custom user message processing, the following code is used to show the interface demo Log.d(TAG, 'onMessage: method : ' + method) Log.d(TAG, 'onMessage: result : ' + errorCode) Log.d(TAG, 'onMessage: content : ' + content) } } } | PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY, 'you_api_key') |
サービスはセキュリティのためにバックグラウンドで実行されており、プッシュサーバーは長い接続を維持し、バックグラウンド処理関連のサービスを実行します。
1 2 3 4 5 6 7 8 9 10 | |_+_| |
処理が必要なブロードキャストレシーバー開発者自身では、プッシュメッセージは、受信したプッシュメッセージをcom.baidu.android.pushservice.action.MESSAGEのアクションによってインターフェイス処理する場合があります。クライアントにデータを送信するインテントyour.package.PushMessageReceiver 、アプリケーション自体によって決定されるメッセージ形式。PushServiceは、文字列形式を介してサーバーからクライアントに送信されるメッセージに対してのみ責任を負います。インテントcom.baidu.android.pushservice.action.RECEIVEのアクションによるコールバックインターフェイス呼び出しは、your.package.PushMessageReceiverに返されます。
PushMessageReceiver.java1 2 3 4 5 6 7 | |_+_| |
プッシュサービスインレットのActivityonCreateメソッドに登録してバインドした後、メッセージプッシュバックまたはアプリケーションサーバーの管理をプッシュする操作を実行できます。
1 2 3 4 5 6 7 | |_+_| |
さらに、クラウドPHPを提供するためのプッシュ、開発者向けのJava ServerエンドピアSDKは、カスタマイズされたプッシュサービスと管理操作を独自のサーバーに実装します。
4、単一のシングルチャネルサービスメカニズム
単一サービスの単一チャネルを実現するBaiduクラウドプッシュメカニズム(デバイス上にある場合はさまざまなPush SDKインストールのアプリケーション)は、アプリケーションごとにPushServiceを作成する必要はありませんが、マルチアプリケーション共有モードをPushServiceします。これにより、リソース消費が削減されるだけでなく、ネットワークトラフィックも削減されます。 PushServiceは別のプロセスで実行され、同じプロセスで実行されているマスタープロセスはありません。メインプロセスは永続メモリを必要としません。新しいプッシュメッセージの場合、メッセージはPushServiceIntentによってメインプロセスに送信されて処理されます。インテントによって、ターゲットアプリケーションの方法を指定するパッケージ名は、アプリケーションにプライベートメッセージを送信します。次の図のように、そのアプリケーションは自分のメッセージを受信せず、消費を減らしながらメッセージを他の人に傍受することはできません。
追記:今日、プッシュアンドプッシュオーロラや同様のことを達成するための他の原則など、多くの国内提供のAndroidプッシュサービスがあり、開発者は自分のニーズに応じて選択できます。天体の壁の外で、GCM未満で、自給自足または離れた中国向けのAndroidプッシュサービスを作成します!
元の住所: http://ryantang.me/blog/2013/08/06/baidu-push-service/