Pythonを使用してGCMでプッシュ通知をAndroidデバイスに送信するサーバーを作成する方法
序章
プッシュ通知を使用すると、ユーザーがアプリを使用していない場合でも、Androidアプリケーションでユーザーにイベントを通知できます。 このチュートリアルの目的は、アプリに簡単なプッシュ通知を送信することです。 サーバーではUbuntu14.04とPython2.7 を使用し、プッシュ通知サービスとして Google CloudMessagingを使用します。
サーバーという用語を使用して、DigitalOceanでスピンアップされたインスタンスを指します。 GCM を使用して、Androidデバイスとサーバーの間にあるGoogleのサーバーを参照します。
前提条件
チュートリアルを開始する前に、次のものが必要になります。
- Androidアプリケーション; developer.android.comを参照してください
- Ubuntu14.04ドロップレット
- ドロップレットのIPアドレス
プッシュ通知について
Googleが提供するGCM接続サーバーは、Dropletなどのサードパーティアプリケーションサーバーからメッセージを受け取り、デバイスで実行されているGCM対応のAndroidアプリケーション(クライアントアプリ)にこれらのメッセージを送信します。 現在、GoogleはHTTPおよびXMPP用の接続サーバーを提供しています。
つまり、通知を送信するには、Googleのサーバーと通信するための独自のサーバーが必要です。 サーバーはメッセージをGCM(Google Cloud Messaging)接続サーバーに送信し、接続サーバーはメッセージをキューに入れて保存し、デバイスがオンラインのときにAndroidデバイスに送信します。
ステップ1—GoogleAPIプロジェクトを作成する
アプリでGCMを有効にするには、GoogleAPIプロジェクトを作成する必要があります。
Google DevelopersConsoleにアクセスします。
そこで開発者アカウントを作成したことがない場合は、いくつかの詳細を入力する必要があります。
プロジェクトの作成をクリックします。
プロジェクト名を入力し、作成をクリックします。
新しいプロジェクトが作成されるまで数秒待ちます。 次に、プロジェクトページの左上にあるプロジェクトIDとプロジェクト番号を表示します。
プロジェクト番号をメモします。 Androidアプリクライアントで使用します。
ステップ2-プロジェクトでGCMを有効にする
Google DevelopersConsoleでプロジェクトがまだ選択されていることを確認してください。
左側のサイドバーで、 APIと認証 。
APIを選択します。
表示されたAPIのリストで、 Google Cloud Messaging forAndroidをONに切り替えます。 利用規約に同意します。
Android向けGoogleクラウドメッセージングは、このプロジェクトで有効なAPIのリストに含まれているはずです。
左側のサイドバーで、 APIと認証 。
資格情報を選択します。
パブリックAPIアクセスで、新しいキーの作成をクリックします。
サーバーキーを選択します。
サーバーのIPアドレスを入力します。
作成をクリックします。
APIKEYをコピーします。 後でサーバーにこれを入力する必要があります。
ステップ3—Androidアプリをリンクする
通知をテストするには、Androidアプリを作成したGoogleAPIプロジェクトにリンクする必要があります。
Androidアプリの開発に慣れていない場合は、GCMクライアントの実装の公式ガイドに従うことをお勧めします。
公式ソースコードはgcmページから入手できます。
ソースは更新されていないため、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 = "YOUR_PROJECT_NUMBER_HERE";
これを、GoogleAPIプロジェクトのプロジェクト番号に置き換えます。
デバイスが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—ドロップレットを展開する
新しいUbuntu14.04サーバーをデプロイします。 これがサードパーティのアプリケーションサーバーである必要があります。
GoogleのGCM接続サーバーは、サードパーティのアプリケーションサーバー(当社のドロップレット)からメッセージを受け取り、Androidデバイス上のアプリケーションに送信します。 GoogleはHTTPおよびCCS(XMPP)用の接続サーバーを提供していますが、このチュートリアルではHTTPに焦点を当てています。 HTTPサーバーはダウンストリームのみです:クラウドからデバイスへ。 これは、サーバーからデバイスにのみメッセージを送信できることを意味します。
サーバーの役割:
- クライアントと通信します
- GCMサーバーへの適切にフォーマットされたリクエストを起動します
- 指数バックオフを使用して、リクエストを処理し、必要に応じて再送信します
- APIキーとクライアント登録IDを保存します。 APIキーは、メッセージを送信するPOSTリクエストのヘッダーに含まれています
- メッセージIDを生成して、送信する各メッセージを一意に識別します。 メッセージIDは、送信者IDごとに一意である必要があります
クライアントは、デバイスの登録IDを送信してサーバーと通信し、デバイスを保存して、通知を送信するときに使用します。 今はそれを管理することについて心配する必要はありません。 それは非常に簡単で、GCMは登録IDが無効な場合にエラーメッセージを表示することであなたを助けます。
ステップ5-PythonGCMSimpleServerをセットアップする
sudoユーザーでサーバーにログインします。
パッケージリストを更新します。
sudo apt-get update
Pythonパッケージをインストールします。
sudo apt-get install python-pip python-dev build-essential
インストール python-gcm
. python-gcmの詳細についてはこちらをご覧ください。
sudo pip install python-gcm
サーバーのどこかに新しいPythonファイルを作成します。 まあ言ってみれば:
sudo nano ~/test_push.py
次の情報をファイルに追加します。 redでマークされた変数を置き換えます。 説明は以下の通りです。
from gcm import *
gcm = GCM("AIzaSyDejSxmynqJzzBdyrCS-IqMhp0BxiGWL1M")
data = {'the_message': 'You have x new friends', 'param2': 'value2'}
reg_id = 'APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UxxxqpL4EUXTWOm0RXE5CrpMk'
gcm.plaintext_request(registration_id=reg_id, data=data)
説明:
from gcm import *
:これは、Android用Googleクラウドメッセージング用のPythonクライアントをインポートしますgcm
:GoogleAPIプロジェクトからAPIKEYを追加します。 サーバーのIPアドレスが許可されたIPに含まれていることを確認してくださいreg_id
:Androidアプリケーションからregidを追加します
ステップ6—プッシュ通知を送信する
次のコマンドを実行して、テスト通知をアプリに送信します。
sudo python ~/test_push.py
約10秒待ちます。 Androidデバイスで通知を受け取る必要があります。
トラブルシューティング。
通知が約10秒後にデバイスに表示されない場合は、次の手順に従います。
- スマートフォン/タブレットはインターネットに接続されていますか?
- 正しいプロジェクトキーを持っていますか?
- アプリからの正しいregidはありますか?
- サーバーのIPアドレスがGoogleAPIサーバーキーに追加されていますか?
- サーバーはインターネットに接続されていますか?
それでも通知が届かない場合は、おそらくアプリです。 logcatでエラーを確認してください。
ここからどこへ行くか
この簡単なテストを実行したら、すべてのユーザーに通知を送信することをお勧めします。 1000個セットで送信する必要があることを忘れないでください。 また、CGMが「無効なID」で応答した場合は、データベースから削除する必要があります。
このチュートリアルの例を、独自のAndroidアプリケーションで動作するように適合させることができます。