androidでプッシュ通知を実装する【第3回 アプリ側実装前編】

この記事は2015年9月29日に書かれたものです。内容が古い可能性がありますのでご注意ください。


androidでのプッシュ通知の実装をテーマとした第3回です。
前回から少々間が空いてごめんなさい。

前回まででプッシュ通知を実装する上で必要な情報を確認し、
Google Developers Console(GDC)でセンダーID(プロジェクト番号)とAPIキーの取得を行いました。

今回からいよいよアプリ側の実装を進めていきます。
ちなみにせっかく認証情報を取得しておいたものの、今記事ではまだ用いません。
(センダーIDはアプリに設定するものでしたね。第一回参照。)
(APIキーはAppサーバで設定するのでAppサーバの実装編まで出番はありません。)

アプリ側実装のうち前編の今回は大きく分けて
・GCMを利用するためのライブラリのインポート
・マニフェストの作成
の二つをやっていきます。

なお、本連載のアプリ開発環境には Android Studio を用います。

ライブラリのインポート

Googleが提供するAPIであるGoogle Cloud Messagingを利用するには
google play servicesというライブラリをインポートしなければなりません。

google play servicesを用いるにはGoogle Play services SDKが必要です。

1.SDKインストール

まずはAndroid StudioメニューのTools-Android-SDK Managerを起動します。

GPsSDKインストール

(上の画像でGoogle Play servicesのStatusがNot Installedでないのはインストールを済ませた環境のためです)

Extras下のGoogle Play servicesにチェックを入れてインストールを実行します。

[sdk Path]\extras\google\google_play_services\libproject\google-play-services_lib\libs
google-play-services.jarがあります。これをインポートします。

2.インポート

プロジェクト直下にlibsディレクトリを作り、そこに先ほどのgoogle-play-services.jarを
コピー&ペーストで置きます。(×ドラッグ&ドロップ)

次にアプリからライブラリを参照できるようにbuild.gradleを変更する必要があります。
プロジェクト/app 下のbuilde.gradleを開きます。(*プロジェクト下のbuilde.gradleではないので注意です)
dependenciesの中に下のように追記します。

builde.gradle

apply plugin: 'com.android.application'

dependencies {
 compile fileTree(include: ['*.jar'], dir: 'libs')
 compile 'com.google.android.gms:play-services-gcm:7+'
}

末尾のplay-servicesのversionは適宜修正してください。

builde.gradleに変更を加えているのでメニューのTools-Androidから
Sync Project with Gradle Filesの実行を忘れずに。

3.AndroidManifest変更

最後にAndroidManifest.xmlにメタデータの追記が必要です。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="パッケージ名" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
     ...........省略..........
        <meta-data android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>

</manifest>

以上でGooglePlayServicesのライブラリインポートは終わりです。

マニフェスト作成

GCMを利用するためにAndroidManifestにいくらかの追加が必要です。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="[パッケージ名]" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <permission
        android:name="[パッケージ名].permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="[パッケージ名].permission.C2D_MESSAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
     ...........省略..........
    <receiver
        android:name=".GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
           <action android:name="com.google.android.c2dm.intent.RECEIVE" />
           <category android:name="[パッケージ名]" />
        </intent-filter>
    </receiver>

    <service android:name=".GcmIntentService"/>

 </application>

</manifest>

1.パーミッション追加

  • アプリからのインターネット使用を可能にするandroid.permission.INTERNET
  • メッセージを受信したとき、スリープ状態からでも処理を継続できるようにするandroid.permission.WAKE_LOCK
  • GCMへの登録やメッセージの受信を可能にするcom.google.android.c2dm.permission.RECEIVE
  • 端末に設定されているGoogleアカウントを取得できるようにするandroid.permission.GET_ACCOUNTS
  • 独自パーミッションである[パッケージ名].permission.C2D_MESSAGE

以上のパーミッションを追加します。

android.permission.GET_ACCOUNTSはAndroid 4.0.4より下位のバージョンで
GCMを利用するときに必要です。(4.0.4以上が対象であれば必要ありません。

独自パーミッションである[パッケージ名].permission.C2D_MESSAGEは
このアプリのみが登録を行えたりメッセージの受信を行えたりできるようにします。

2.ブロードキャストレシーバ

<receiver
   android:name=".GcmBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
      <category android:name="[パッケージ名]" />
    </intent-filter>
</receiver>

ここではGCMからの通知を受信するためのブロードキャストレシーバの登録を行っています。

com.google.android.c2dm.permission.SENDをパーミッションに入れることで
GCM システム フレームワークによって送信されたインテントのみをこのレシーバが受け取れるようになります。
GcmBroadcastReceiverの具体的な中身は次回説明します。

3.インテントサービス

<service android:name=".GcmIntentService"/>

ここではブロードキャストレシーバが受信した通知メッセージの処理を行うサービスを登録しています。
GcmIntentServiceの具体的な中身の記述についても次回に行います。

次回

今回はアプリ側の実装における下ごしらえとでもいうべきところを行いました。

次回は調理(ソースコードの実装)に移りたいと思います。

 

androidでプッシュ通知を実装する【第1回 概要】
androidでプッシュ通知を実装する【第2回 事前準備】

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

PAGE TOP