開発者ドキュメント

Pythonを使用してGCMでプッシュ通知をAndroidデバイスに送信するサーバーを作成する方法

序章

プッシュ通知を使用すると、ユーザーがアプリを使用していない場合でも、Androidアプリケーションでユーザーにイベントを通知できます。 このチュートリアルの目的は、アプリに簡単なプッシュ通知を送信することです。 サーバーではUbuntu14.04Python2.7 を使用し、プッシュ通知サービスとして Google CloudMessagingを使用します。

サーバーという用語を使用して、DigitalOceanでスピンアップされたインスタンスを指します。 GCM を使用して、Androidデバイスとサーバーの間にあるGoogleのサーバーを参照します。

前提条件

チュートリアルを開始する前に、次のものが必要になります。

プッシュ通知について

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 forAndroidONに切り替えます。 利用規約に同意します。

Android向けGoogleクラウドメッセージングは、このプロジェクトで有効なAPIのリストに含まれているはずです。

左側のサイドバーで、 APIと認証

資格情報を選択します。

パブリックAPIアクセスで、新しいキーの作成をクリックします。

サーバーキーを選択します。

サーバーのIPアドレスを入力します。

作成をクリックします。

APIKEYをコピーします。 後でサーバーにこれを入力する必要があります。

通知をテストするには、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サーバーはダウンストリームのみです:クラウドからデバイスへ。 これは、サーバーからデバイスにのみメッセージを送信できることを意味します。

サーバーの役割:

クライアントは、デバイスの登録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)

説明:

ステップ6—プッシュ通知を送信する

次のコマンドを実行して、テスト通知をアプリに送信します。

sudo python ~/test_push.py

約10秒待ちます。 Androidデバイスで通知を受け取る必要があります。

トラブルシューティング。

通知が約10秒後にデバイスに表示されない場合は、次の手順に従います。

それでも通知が届かない場合は、おそらくアプリです。 logcatでエラーを確認してください。

ここからどこへ行くか

この簡単なテストを実行したら、すべてのユーザーに通知を送信することをお勧めします。 1000個セットで送信する必要があることを忘れないでください。 また、CGMが「無効なID」で応答した場合は、データベースから削除する必要があります。

このチュートリアルの例を、独自のAndroidアプリケーションで動作するように適合させることができます。

モバイルバージョンを終了