ページの先頭行へ戻る
Interstage Mobile Application Server V1.3.0 アプリケーション開発ガイド
FUJITSU Software

6.5.3 GCMプッシュ通知を利用するネイティブアプリケーションの開発

GCMプッシュ通知を利用するネイティブアプリケーションを開発するための事前準備

GCMプッシュ通知を利用するネイティブアプリケーションを開発するための事前準備として以下を行います。
  1. Google Developers Consoleでプロジェクトを作成します。
  2. 作成したプロジェクトを選択し、GCMを有効にします。
  3. API Keyを作成します。
  4. GCM対応のAndroidアプリを開発します。

    注) GoogleCloudMessaging.register()に渡すSENDER_IDは、作成したプロジェクトの「Project Number」を指定します。

  5. API keyをプッシュサーバに登録します。

詳細は、Google Developers Consoleを参照してください。

GCMプッシュ通知を利用するネイティブアプリケーションの開発

GCMプッシュ通知を利用するネイティブアプリケーション向けのAPIはJavaで提供します。IMAPSプッシュ通知を利用するネイティブアプリケーション向けのAPIと同様に準備します。

GCMプッシュ通知を利用するネイティブアプリケーションの開発には、以下の作業が必要です。
  1. 作成したプロジェクトの参照設定で、MavenリポジトリからGoogle Play Servicesのライブラリ(rev.17以降)を指定します。
  2. マニフェストファイルを修正します。
  3. プッシュクライアント設定ファイルを作成します。
  4. プッシュクライアント設定ファイルを設定し、プッシュハンドラ初期化処理を作成します。
  5. Google Play開発者サービスのインストールをします。
  6. build.gradle ファイルの修正

1. マニフェストファイルの修正

  • Wi-Fi機能の状態を参照(WiFi MACアドレスを利用)するため、以下のパーミッションを設定します。

    android.permission.ACCESS_WIFI_STATE

  • IMEIを取得するため、以下のパーミッションを設定します。IMEI(International Mobile Equipment Identifier)は、端末識別番号です。
    android.permission.READ_PHONE_STATE

    注意

    インストール先の端末がAndroid6.0以上の場合、パーミッションの確認が必要です。詳細は3.3.7 パーミッションを参照してください。
  • GCMからメッセージを受信するため、以下のパーミッションを設定します。ここで指定したアプリケーションだけが GCM メッセージを受信できます。[package]部分は作成したアプリのパッケージ名に置き換えます。Android 4.1 以上 (SdkVersion 16 ) をターゲットとしている場合は必須ではありません。
    <permission android:name="[package].permission.C2D_MESSAGE"android:protectionLevel="signature" />
    <uses-permission	android:name="[package].permission.C2D_MESSAGE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
  • メッセージを受信したらスリープを解除するため、以下のパーミッションを設定します。
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
  • インターネットに接続するため、以下のパーミッションを設定します。
    <uses-permission android:name="android.permission.INTERNET"/>
  • Android4.0.4未満で動作させる場合は、Googleアカウントを取得するため、以下のパーミッションを指定します。
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
  • サービスとして、com.fujitsu.imaps.push.gcm.GcmIntentServiceを指定します。
  • レシーバーとして、com.fujitsu.imaps.push.gcm.GcmBroadcastReceiverを指定します。
       ...
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <permission android:name="[package].permission.C2D_MESSAGE" android:protectionLevel="signature" /><uses-permission android:name="[package].permission.C2D_MESSAGE" /><uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.GET_ACCOUNTS" />
    
    <application  ...>
        ...
        <receiver android:name="com.fujitsu.imaps.push.gcm.GcmBroadcastReceiver"     android:permission="com.google.android.c2dm.permission.SEND" >        <intent-filter>            <action android:name="com.google.android.c2dm.intent.RECEIVE" />            <category android:name="[packge]" />        </intent-filter>    </receiver>
        <meta-data android:name="com.google.android.gms.version"     android:value="@integer/google_play_services_version" />    <service android:name="com.fujitsu.imaps.push.gcm.GcmIntentService" />
    </application>
        ...

2. プッシュクライアント設定ファイルの作成

プッシュハンドラに渡すパラメータを、プッシュクライアント設定ファイル(push.properties)に設定します。プッシュクライアント設定ファイルについては、付録D プッシュクライアント設定ファイルを参照してください。

3. プッシュクライアント設定ファイル設定、プッシュハンドラ初期化処理の作成

プッシュクライアント設定ファイル情報は、プッシュハンドラを利用する前に設定します。

以下はプッシュクライアント設定ファイルの設定例です。
// プッシュサーバとの接続先をプッシュクライアント設定ファイルに設定する
push.ServerAddress=https://example.com/push/
push.SelfCertificate =  true
push.gcm.SenderID=1234567890        // SENDER_IDは、Googleの開発者向けのWebサイトで入手
以下はプッシュハンドラ初期化処理の例です。
// com.fujitsu.imaps.push.gcm.GcmRegisterによるプッシュハンドラの初期化
GcmRegister gcm = GcmRegister.getInstance(Activity.this);
gcm.register();

4.Google Play開発者サービスのインストール

GCMプッシュ通知を受信するためには、Google Play開発者サービス(4.4.52以降)が必要です。Google Play開発者サービスがインストールされていない場合、プッシュハンドラ初期化処理が失敗し、GCMのプッシュ通知を受信できません。Google Play開発者サービスはGoogle Playから入手できます。

注意

Google Play開発者サービスは、開発したアプリケーションを実行するAndroidへインストールする必要があります。

5.build.gradle ファイルの修正

  • プッシュクライアント設定ファイルを参照するために、defaultConfigのapplicationIdにパッケージ名を設定します。以下は、設定例です。
    android {
        ・・・
        defualtConfig {
          applicationId 'com.sample.app'
        }
    }

    注意

    ビルドを行うGradle version によっては、上記設定が行われていない場合、プッシュクライアント設定ファイルの参照に失敗し、実行時にエラーとなる場合があります。

ログ出力を行う場合、6.5.6 ログ出力のカスタマイズを参照してください。
認証の設定は、6.5.7 認証クラスの定義を参照してください。
拡張データを指定する場合は、6.5.8 拡張データの指定の指定を参照してください。
エラー通知受け取りを行う場合、6.5.10 GCMプッシュの処理結果受け取りを参照してください。
既読通知機能の利用を行う場合、6.5.13 既読通知機能の利用を参照してください。

参考

GCMプッシュハンドラ初期化処理(GcmRegister.register)は、GCMとの通信とIMAPSサーバとの通信を伴います。そのため、開発中に以下の環境でGCMプッシュの動作を確認したい場合、 開発中の動作確認用の定義であるpush.ServerConnectRetryCountおよびpush.ServerConnectRetryWaitを設定すると、クライアントアプリケーション開発時におけるRegistrationID登録が容易に確認できます。
  • IMAPSサーバがイントラネットに配置されており、イントラネット内WiFiで接続する環境
  • イントラネット内からGCMへのアクセスが(ファイアウォールなどで)遮断される環境

以下の方法で設定します。

<手順>
  1. プッシュクライアント設定ファイルのpush.ServerConnectRetryCountおよびpush.ServerConnectRetryWaitに任意の値を指定します。
  2. Android端末のWiFiを無効にし、クライアントアプリケーションから、GCMプッシュハンドラ初期化処理(GcmRegister.register)を実行します。
  3. Android端末のWiFiを有効にします。

手順1の設定に従い、GCMから取得したregistrationIDがIMAPSサーバに登録されます。

注意

push.ServerConnectRetryCountおよびpush.ServerConnectRetryWaitは開発中の動作確認用として提供しています。運用向け環境では指定しないでください。

注意

build.gradleのcompileSdkVersionに23を指定して、プッシュ通知のAPIの以下のメソッドを使用する場合、
  • com.fujitsu.imaps.push.customize.PushExtAuth
    • setRequestAuth メソッド
    • saveResponseAuth メソッド
build.gradleに以下を追加してください。
android {
    .....
    useLibrary 'org.apache.http.legacy' //この行を追加
    .....
}
useLibraryの追加をしないと、認証APIでコンパイルエラーが発生します。