序章

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

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

前提条件

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

  • Androidアプリケーション; developer.android.comを参照してください
  • Ubuntu14.04ドロップレット
  • ドロップレットのIPアドレス

プッシュ通知について

Googleが提供するGCM接続サーバーは、Dropletなどのサードパーティアプリケーションサーバーからメッセージを受け取り、デバイスで実行されているGCM対応のAndroidアプリケーション(クライアントアプリ)にこれらのメッセージを送信します。 現在、GoogleはHTTPおよびXMPP用の接続サーバーを提供しています。

The GCM Connection Servers send data between your third-party server and the client apps.

つまり、通知を送信するには、Googleのサーバーと通信するための独自のサーバーが必要です。 サーバーはメッセージをGCM(Google Cloud Messaging)接続サーバーに送信し、接続サーバーはメッセージをキューに入れて保存し、デバイスがオンラインのときにAndroidデバイスに送信します。

ステップ1—GoogleAPIプロジェクトを作成する

アプリでGCMを有効にするには、GoogleAPIプロジェクトを作成する必要があります。

Google DevelopersConsoleにアクセスします。

そこで開発者アカウントを作成したことがない場合は、いくつかの詳細を入力する必要があります。

プロジェクトの作成をクリックします。

プロジェクト名を入力し、作成をクリックします。

New Google API project

新しいプロジェクトが作成されるまで数秒待ちます。 次に、プロジェクトページの左上にあるプロジェクトIDプロジェクト番号を表示します。

Project ID and number

プロジェクト番号をメモします。 Androidアプリクライアントで使用します。

ステップ2-プロジェクトでGCMを有効にする

Google DevelopersConsoleでプロジェクトがまだ選択されていることを確認してください。

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

APIを選択します。

表示されたAPIのリストで、 Google Cloud Messaging forAndroidONに切り替えます。 利用規約に同意します。

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

Google Cloud Messaging for Android enabled

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

資格情報を選択します。

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

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

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

Server key IP

作成をクリックします。

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

API KEY

通知をテストするには、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デバイスで通知を受け取る必要があります。

Push notification example

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

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

  • スマートフォン/タブレットはインターネットに接続されていますか?
  • 正しいプロジェクトキーを持っていますか?
  • アプリからの正しいregidはありますか?
  • サーバーのIPアドレスがGoogleAPIサーバーキーに追加されていますか?
  • サーバーはインターネットに接続されていますか?

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

ここからどこへ行くか

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

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