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

前書き

プッシュ通知を使用すると、ユーザーがアプリを使用していない場合でも、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アプリケーションで動作するように適合させることができます。

Related