SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

MBaaSと連携するAndroidアプリを作る

MBaaSでつくろう、Androidアプリのプッシュ通知! しくみと手順を大解剖

MBaaSと連携するAndroidアプリを作る 第6回

  • X ポスト
  • このエントリーをはてなブックマークに追加

プッシュ通知用アプリの作成

 さて、ここからはEclipseでの作業です。プッシュ通知を使うにはGoogle Play Servicesが必要なので、インストールされていなければインストールします。

 EclipseからAndroid SDK Managerを開いて、Google Play Servicesがインストールされていることを確認します。

 Google Play Servicesがまだインストールされていない場合は、チェックを付けてインストールしてください。

Google Play Servicesのインストール
Google Play Servicesのインストール

 Google Play Servicesをインストールし終えたら、ダウンロードされたgoogle-play-service_libをプロジェクトとしてインポートしておきます。

Existing Android Code into Workspaceを選ぶ
Existing Android Code into Workspaceを選ぶ

 インポートする際は、「プロジェクトをワークスペースにコピー」にチェックを付けます。

google-play-service_libをインポート
google-play-service_libをインポート

 google-play-service_libは「android-sdk/extras/google/google_play_services/libproject/google-play-services_lib」や、「/Applications/(Eclipseのインストールフォルダ)/eclipse/sdk/extras/google/google_play_services/libproject/google-play-services_lib」などにあります。

 インポートしたgoogle-play-service_libは、このあと、ライブラリとして利用します。

 プッシュ通知用プロジェクトPushSampを作ります(注:この記事ではNCMB上に作ったアプリと同じ名前にしていますが、同じ名前にする必要はありません)。

 プロジェクトを作成したら、プロジェクトのプロパティを開いて、左側のメニューでAndroidを選び、google-play-service_libをライブラリに追加します。

プロパティを開いて、ライブラリに追加
プロパティを開いて、ライブラリに追加

 また、作成したプロジェクトのlibsフォルダに、NCMBのAndroid用SDKであるNCMB.jarファイルをコピーすることも忘れないでください。

 次にAndroidManifest.xmlにメッセージを受信するブロードキャストレシーバを追加して、GCMを受け取るためのPermissionを登録します。

 まず、ブロードキャストレシーバの宣言であるリスト1をAndroidManifest.xmlファイルの</application>タグの直前に追加します。

リスト1
<receiver
    android:name="com.nifty.cloud.mb.NCMBGCMBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.example.pushsamp" />
    </intent-filter>
</receiver>

 ブロードキャストレシーバにより、アプリケーションはシステムや他のアプリケーションによりブロードキャストされるインテントを、アプリケーションが実行していないときでも、受信できるようになります。

 NCMBGCMBroadcastReceiverは、プッシュ通知にGCMの機能を使用するためのレシーバです。intent-filterはブロードキャストレシーバが応答できるインテントのタイプを特定します。

 次に、アプリがPush通知を受信できるようにパーミッションを付与します。

 リスト2をAndroidManifest.xmlファイルの<application>タグの直前に追加します。

リスト2
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="com.example.pushsamp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.example.pushsamp.permission.C2D_MESSAGE" />

 今度は、MainActivityのonCreateメソッドにコードを追加していきます。

リスト3
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NCMB.initialize(getApplication(), getString(R.string.app_key), getString(R.string.client_key));(1)

        final NCMBInstallation installation = NCMBInstallation.getCurrentInstallation();(2)
        installation.getRegistrationIdInBackground(getString(R.string.sender_id), new RegistrationCallback(){(3)
            @Override
            public void done(NCMBException e) {
                if (e != null) {
                    // 失敗
                } else {
                    try {
                        installation.save();(4)
                    } catch(NCMBException e2) {
                        e2.printStackTrace();
                    }
                }
            }
        });
        NCMBPush.setDefaultPushCallback(this, MainActivity.class);(5)
    }

 NCMB.initializeメソッドでNCMB SDKの初期セットアップを行うわけですが、引数に指定しているapp_keyとclient_keyはNCMBでアプリを作成したときに表示されたアプリケーションキーとクライアントキーを、strings.xmlに登録したものです。

 (2)からが配信端末情報の登録処理です。プッシュ通知を受け取る端末を、配信端末情報として登録します。NCMBInstallationクラスはプッシュ配信端末を操作するクラスです。

 getCurrentInstallationメソッドは現在のInstallationを取得します。

Project NumberはGoogle Developers Consoleに表示されている
Project NumberはGoogle Developers Consoleに表示されている

 registrationIdの取得を行うgetRegistrationIdInBackgroundメソッドに指定しているsender_idは、Google Developers Consoleで作成したプロジェクトのProject Numberです(3)

 installation.save()で配信端末を登録します(4)

 NCMBPush.setDefaultPushCallbackメソッドで、プッシュ通知を受信した際にデフォルトで動作するアクティビティを指定します(5)

 ここまで作成して、実機でアプリを実行してみたところ、java.lang.RuntimeExceptionが発生しました。Google Play Services Rev.20では

 meta-dataの定義も必要になったようです。

 リスト4をAndroidManifest.xmlの</application>の直前に追加して実行すると、Installationにオブジェクトが追加されました。

リスト4
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
Installationにオブジェクトが追加された)
Installationにオブジェクトが追加された)

 この端末に向けてプッシュ通知を送って行きます。

次のページ
ダッシュボードからプッシュ通知を送信する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
MBaaSと連携するAndroidアプリを作る連載記事一覧

もっと読む

この記事の著者

金宏 和實(カネヒロ カズミ)

 富山県高岡市出身で在住。ソフトウェア開発者兼ライター。株式会社イーザー関西学院大学文学部仏文科卒。第一種情報処理技術者(今で言うと、応用情報技術者。第一種→ソフ開→応用と変遷したようだ)主な著書『作ればわかる!Androidプログラミング第2版 -SDK4対応-』『VS 2010で作る Web-DB アプリ入門』『ベテランが丁寧に教えてくれるデータベースの知識と実務』『はじめてのAndroidアプリ作成 センサー活用とクラウド連携』『はじめてのAndroidアプリ作成 基本プログラミング』Web連載『VB2008で楽々Webプログラミング』『再発見!VB2005快適プログラミング』 『こうしろうのMindStroms日記』 個人的なブログはこちらです。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8237 2014/11/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング