前書き
プッシュ通知を使用すると、ユーザーがアプリを使用していない場合でも、Androidアプリケーションでユーザーにイベントを通知できます。 このチュートリアルの目的は、シンプルなプッシュ通知をアプリに送信することです。 サーバーで* Ubuntu 14.04 および Python 2.7 を使用し、プッシュ通知サービスとして Googleクラウドメッセージング*を使用します。
_server_という用語は、DigitalOceanでスピンアップされたインスタンスを指すために使用します。 _GCM_を使用して、Androidデバイスとサーバーの間にあるGoogleのサーバーを参照します。
前提条件
チュートリアルを開始する前に、次のものが必要です。
-
* Androidアプリケーション*; developer.android.comを参照してください
-
* Ubuntu 14.04 *ドロップレット
-
ドロップレットのIPアドレス
プッシュ通知について
Googleが提供するGCM接続サーバーは、Dropletなどのサードパーティアプリケーションサーバーからメッセージを取得し、これらのメッセージをデバイスで実行されているGCM対応のAndroidアプリケーション(client app)に送信します。 現在、GoogleはHTTPおよびXMPPの接続サーバーを提供しています。
image:https://assets.digitalocean.com/articles/push_notifications_gcm/1.png [GCM接続サーバーは、サードパーティのサーバーとクライアントアプリの間でデータを送信します。]
つまり、通知を送信するには、Googleのサーバーと通信するための独自のサーバーが必要です。 サーバーはメッセージをGCM(Google Cloud Messaging)接続サーバーに送信し、接続サーバーはメッセージをキューに入れて保存し、デバイスがオンラインのときにAndroidデバイスに送信します。
ステップ1-Google APIプロジェクトを作成する
アプリでGCMを有効にするには、Google APIプロジェクトを作成する必要があります。
https://console.developers.google.com [Google Developers Console]にアクセスします。
まだデベロッパーアカウントを作成したことがない場合は、いくつかの詳細を入力する必要があります。
[プロジェクトの作成]をクリックします。
プロジェクト名を入力して、[作成]をクリックします。
image:https://assets.digitalocean.com/articles/push_notifications_gcm/2.png [新しいGoogle APIプロジェクト]
新しいプロジェクトが作成されるまで数秒待ちます。 次に、プロジェクトページの左上にある*プロジェクトID *および*プロジェクト番号*を表示します。
image:https://assets.digitalocean.com/articles/push_notifications_gcm/3.png [プロジェクトIDと番号]
*プロジェクト番号*を書き留めます。 Androidアプリクライアントで使用します。
ステップ2-プロジェクトのGCMを有効にします
https://console.developers.google.com [Google Developers Console]でプロジェクトが選択されていることを確認してください。
左側のサイドバーで、* APIsを選択します
-
API *を選択します。
表示されたAPIのリストで、トグルを* ON *に切り替えます。 利用規約に同意します。
-
Android用Googleクラウドメッセージング*は、このプロジェクトの有効なAPIのリストに含まれているはずです。
image:https://assets.digitalocean.com/articles/push_notifications_gcm/4.jpg [Android向けGoogleクラウドメッセージングが有効]
左側のサイドバーで、* APIsを選択します
[資格情報]を選択します。
*パブリックAPIアクセス*で、*新しいキーの作成*をクリックします。
[サーバーキー]を選択します。
サーバーのIPアドレスを入力します。
image:https://assets.digitalocean.com/articles/push_notifications_gcm/5.png [サーバーキーIP]
*作成*をクリックします。
-
API KEY *をコピーします。 後でサーバーでこれを入力する必要があります。
画像:https://assets.digitalocean.com/articles/push_notifications_gcm/6.jpg [API KEY]
ステップ3-Androidアプリのリンク
通知をテストするには、作成したGoogle APIプロジェクトにAndroidアプリをリンクする必要があります。
Androidアプリ開発を初めて使用する場合は、https://developer.android.com/google/gcm/client.html [GCMクライアントの実装]の公式ガイドに従うことをお勧めします。
gcm pageから公式ソースコードを取得できます。
ソースは更新されないため、Gradleファイルを変更する必要があります。
+ gcm-client / GcmClient / build.gradle +
古い行:
compile "com.google.android.gms:play-services:4.0.+"
更新された行:
compile "com.google.android.gms:play-services:5.0.89+"
メインアクティビティで、次の行を見つけます。
String SENDER_ID = "";
これをGoogle APIプロジェクトの*プロジェクト番号*に置き換えます。
デバイスがGCMに登録するたびに、登録IDを受け取ります。 サーバーをテストするには、この登録IDが必要です。 簡単に取得するには、メインファイルで次の行を変更します。
if (regid.isEmpty()) {
registerInBackground();
}else{
Log.e("==========================","=========================");
Log.e("regid",regid);
Log.e("==========================","=========================");
}
アプリを実行した後、logcatを見て、* regid *をコピーして後で使用できるようにします。 これは次のようになります。
=======================================
10-04 17:21:07.102 7550-7550/com.pushnotificationsapp.app E/==========================﹕ APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UJY0KNqpL4EUXTWOm0RxccxpMk
10-04 17:21:07.102 7550-7550/com.pushnotificationsapp.app E/==========================﹕ =======================================
ステップ4-ドロップレットを展開する
新しい* Ubuntu 14.04 *サーバーをデプロイします。 これをサードパーティのアプリケーションサーバーにする必要があります。
GoogleのGCM接続サーバーは、サードパーティのアプリケーションサーバー(ドロップレット)からメッセージを取得し、Androidデバイス上のアプリケーションに送信します。 GoogleはHTTPおよびCCS(XMPP)用の接続サーバーを提供していますが、このチュートリアルではHTTPに焦点を当てています。 HTTPサーバーはダウンストリームのみです:クラウドからデバイス。 これは、サーバーからデバイスにのみメッセージを送信できることを意味します。
サーバーの役割:
-
クライアントと通信します
-
GCMサーバーへの適切にフォーマットされた要求を起動します
-
指数バックオフを使用して、要求を処理し、必要に応じて再送信します
-
APIキーとクライアント登録IDを保存します。 APIキーは、メッセージを送信するPOSTリクエストのヘッダーに含まれています
-
メッセージIDを生成して、送信する各メッセージを一意に識別します。 メッセージIDは送信者IDごとに一意である必要があります
クライアントは、デバイスの登録IDを送信することでサーバーと通信し、デバイスを登録して通知を送信するときに使用します。 管理について心配する必要はありません。これは非常に簡単で、GCMは登録IDが無効な場合にエラーメッセージを表示することにより、ヘルプを提供します。
ステップ5-Python GCM Simple Serverのセットアップ
sudoユーザーでサーバーにログインします。
パッケージリストを更新します。
sudo apt-get update
Pythonパッケージをインストールします。
sudo apt-get install python-pip python-dev build-essential
`+ python-gcm +`をインストールします。 python-gcm https://github.com/geeknam/python-gcm [こちら]の詳細をご覧ください。
sudo pip install python-gcm
サーバー上のどこかに新しいPythonファイルを作成します。 まあ言ってみれば:
sudo nano ~/test_push.py
次の情報をファイルに追加します。 でマークされた変数を置き換えます。 説明は次のとおりです。
from gcm import *
gcm = GCM("")
data = {'the_message': 'You have x new friends', 'param2': 'value2'}
reg_id = ''
gcm.plaintext_request(registration_id=reg_id, data=data)
説明:
-
+ from gcm import * +
:これは、Android向けGoogle Cloud MessagingのPythonクライアントをインポートします -
+ gcm +
:Google APIプロジェクトから* API KEY *を追加します;サーバーのIPアドレスが許可されたIP内にあることを確認してください -
+ reg_id +
:Androidアプリケーションから* regid *を追加します
ステップ6-プッシュ通知を送信する
次のコマンドを実行して、テスト通知をアプリに送信します。
sudo python ~/test_push.py
約10秒待ちます。 Androidデバイスで通知を受け取る必要があります。
image:https://assets.digitalocean.com/articles/push_notifications_gcm/7.png [プッシュ通知の例]
トラブルシューティング。
約10秒後にデバイスに通知が表示されない場合は、次の手順を実行します。
-
スマートフォン/タブレットはインターネットに接続されていますか?
-
正しいプロジェクトキーを持っていますか?
-
アプリから正しいregidを取得していますか?
-
Google APIサーバーキーにサーバーのIPアドレスが追加されていますか?
-
サーバーはインターネットに接続されていますか?
それでも通知が届かない場合は、おそらくアプリです。 logcatでエラーを確認してください。
ここからどこへ行くか
この簡単なテストを完了したら、おそらくすべてのユーザーに通知を送信する必要があります。 1000のセットで送信する必要があることに注意してください。 また、CGMが「無効なID」で応答する場合は、データベースから削除する必要があります。
このチュートリアルの例を、独自のAndroidアプリケーションで動作するように適合させることができます。