Android 版の BoltzMessenger SDK を使用する

BoltzMessenger のサーバー部分のみを利用して、アプリにプッシュ通知機能を実装する方法です。

アプリ側の要件

アプリ側には以下の条件が必要となります。

  • Android Studio 3.0 を使用します。
  • Minimum SDK は Android 4.1 (API Level 16) 以上を指定する必要があります。

SDK の取り込み

組み込み対象のアプリを Android Studio で開き、app フォルダを右クリックして [Show in Explorer] もしくは [Reveal in Finder] を選択します。

BoltzMessenger のソースコードから boltzmessenger-sdk フォルダをプロジェクトの app フォルダと同じ階層にコピーします。

プロジェクトの settings.gradle を開き、以下の行を追加します。

1
include ':boltzmessenger-sdk'

次に、Module: app の build.gradle に以下の行を追加します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
apply plugin: 'com.android.application'

android {
    defaultConfig {
        ...
        missingDimensionStrategy 'serviceMode', 'gcmOnly' // 追加
    }
}

dependencies {
    ...
    implementation project(path: ':boltzmessenger-sdk') // 追加
}

このとき、missingDimensionStrategy には使用する SDK の種類により切り替える必要があります。

構成 matchingFallbacks
FCM のみ gcmOnly
ADM のみ admOnly
FCM 及び ADM anyService

FCM を使用する設定

FCM を使用する場合は、Gradleに以下の設定が必要です。

プロジェクトの app フォルダの中に API キーを発行した際にダウンロードした google-services.json をコピーします。

Project: (プロジェクト名) の build.gradle に以下のように com.google.gms:google-services:2.0.0 の参照を追加します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'com.google.gms:google-services:3.2.0' // 追加
    }
}
// (後略)

次に、Module: app の build.gradle の最後に以下の行を追記します。

1
apply plugin: 'com.google.gms.google-services'

AndroidManifest.xml を開き、以下の設定を追加します。([アプリのパッケージ名] は適切な値に置換してください)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<manifest ...>
    <application ...>
    
        <!-- ここから追加 -->
        <service
            android:name=".fcm.FirebaseListenerService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
        <service
            android:name="com.fenrir-inc.boltzmessenger.sdk.fcm.BoltzMessengerInstanceIdService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.gms.iid.InstanceID" />
            </intent-filter>
        </service>
        <service
            android:name="com.fenrir-inc.boltzmessenger.sdk.fcm.BoltzMessengerRegistrationService"
            android:exported="false" />
        <!-- ここまで追加 -->
    </applicaton>
</manifest>

次に、以下のような FirebaseListenerService クラスを作成します。(@Override を指定しているところは適宜変更してください)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package [アプリのパッケージ名];

/** import 略 **/

/**
 * FCM からのデータを受信する
 */
public class FirebaseListenerService extends BoltzMessengerFirebaseMessagingService {

    @Override
    protected Intent createOpenIntent(String messageId) {
        return MessageDetailActivity.createIntent(this, messageId);
    }

    @Override
    protected String getNotificationTitle() {
        Resources resources = getResources();
        return resources.getString(R.string.app_name);
    }

    @Override
    protected int getSmallIconResourceId() {
        return R.drawable.ic_notification;
    }

    @Override
    protected int getNotificationColor() {
        return getResources().getColor(R.color.notification_color);
    }

    @Override
    protected Bitmap getLargeIconBitmap() {
        return null;
    }
}

ADMを使用する設定

ADMを使用する場合、ダウンロードした Amazon アプリ・ゲームサービス SDK からamazon-device-messaging-(バージョン).jarを、プロジェクトの app フォルダの中に libs フォルダを作成してコピーします。

次に、Module: app の build.gradle に以下の行を追加します。

1
2
3
dependencies {
    provided files('libs/amazon-device-messaging-1.0.1.jar')
}

AndroidManifest.xml を開き、以下の設定を追加します。([アプリのパッケージ名] は適切な値に置換してください)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<manifest ...
    xmlns:amazon="http://schemas.amazon.com/apk/res/android"><!-- ←追加 -->
    
    <!-- ここから追加 -->
    <permission android:name="[アプリのパッケージ名].permission.RECEIVE_ADM_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="[アプリのパッケージ名].permission.RECEIVE_ADM_MESSAGE" />
    <uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <!-- ここまで追加 -->
    
    <application ...>
    
        <!-- ここから追加 -->
        <amazon:enable-feature android:name="com.amazon.device.messaging" android:required="true" />

        <!--ADM-->
        <service android:name=".AdmListenerService" android:exported="false" />
        <receiver 
            android:name=".adm.AdmListenerService$MessageAlertReceiver"
            android:permission="com.amazon.device.messaging.permission.SEND">
            <intent-filter>
                <action android:name="com.amazon.device.messaging.intent.REGISTRATION" />
                <action android:name="com.amazon.device.messaging.intent.RECEIVE" />
                <category android:name="[アプリのパッケージ名]" />
            </intent-filter>
        </receiver>
        <!-- ここまで追加 -->
    </applicaton>
</manifest>

次に、以下のような AdmReceiver クラスを作成します。(@Override を指定しているところは適宜変更してください)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package [アプリのパッケージ名];

/** import 略 **/

/**
 * ADM
 */

public class AdmListenerService extends BoltzMessengerAdmListenerService {
    
    public static class MessageAlertReceiver extends ADMMessageReceiver {
        public MessageAlertReceiver() {
            super(AdmListenerService.class);
        }
    }

    /**
     * アプリを開くインテントを作成します
     */
    @Override
    protected Intent createOpenIntent(String messageId) {
        return MessageDetailActivity.createIntent(this, messageId);
    }

    /**
     * 通知に表示するタイトルを指定します
     */
    @Override
    protected String getNotificationTitle() {
        Resources resources = getResources();
        return resources.getString(R.string.app_name);
    }

    /**
     * 通知に表示するアイコンを指定します
     */
    @Override
    protected int getSmallIconResourceId() {
        return R.drawable.ic_notification;
    }

    /**
     * 通知に表示するアイコン(大)を指定します
     */
    @Override
    protected Bitmap getLargeIconBitmap() {
        return null;
    }

    /**
     * 通知に表示する色を指定します
     */
    @Override
    protected int getNotificationColor() {
        return getResources().getColor(R.color.notification_color);
    }
}

ご不明な点はありませんか?

機能の詳細、導入のご検討、お見積もり依頼などは、お気軽にお問い合わせください。
担当者から追ってご連絡いたします。

お問い合わせはこちら