プッシュ通知の設定: Android

このページはLogBase Android SDK バージョン 4.0.0 以上のプッシュ通知機能実装手順になります。 LogBase Android SDK バージョン 3.1.1 以前を利用する場合はこちらを参照してください。

Firebaseの導入

LogBase でプッシュ通知機能を利用するには Firebase のセットアップを行う必要があります。

プロジェクトの作成

Firebase Console よりプロジェクトを新規で追加します。

サーバーキーの登録

作成したプロジェクトで「プロジェクトの設定」を選択します。

「クラウド メッセージング」タブを選択し、表示されたページからサーバーキーのトークンをコピーしてください。

LogBase 管理画面の「設定」→「プッシュ通知証明書」を選択し、Android プッシュ通知証明書の欄の「編集」ボタンを押します。 開いたモーダルの入力欄に上でコピーしたトークンをペーストし「保存」ボタンを押してください。

なお、サーバーキーが有効になるまで5分程度かかることがあるため、エラーが出る場合は時間をおいて再度お試しください。

アプリへのFirebaseの導入

Android プロジェクトに Firebase を追加する の「Firebaseを手動で追加する」の手順に従い、アプリにFirebaseを導入してください。

なお、「SDK を追加する」項の implementation 'com.google.firebase:firebase-core: で始まる行は不要です。

プッシュ通知機能のコードを追加する

AndroidManifest.xml を編集する

次の内容をapp/src/main/AndroidManifest.xmlapplicationタグの子要素として追加します。

<service android:name="net.p_lucky.logpush.LogBaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

カスタムフィールドを扱う

LogBase SDK では、カスタムフィールドを用いてプッシュ通知に任意の情報を追加することができます。

カスタムフィールドを処理するにはLogBaseParamsを構築してCustomFieldHandlerを実装したオブジェクトを渡し、 それをLogBaseInitializer.initialize()の第二引数に渡します。CustomFieldHandler#handleCustomField()はカスタムフィールドが指定されている通知を開封したときのみ呼びだされます。

import android.support.annotation.NonNull;
import net.p_lucky.logpush.CustomFieldHandler;
import org.json.JSONObject;

// onCreate() での初期化時に CustomFieldHandler を LogBaseParams に渡す
CustomFieldHandler customFieldHandler = new CustomFieldHandler() {
    @Override
    public void handleCustomField(@NonNull JSONObject customField) {
        Log.i(TAG, "customField: " + customField);
    }
};
LogBaseParams logbaseParams = LogBaseParams.builder()
        .customFieldHandler(customFieldHandler)
        .build();
services = LogBaseInitializer.initialize(this, logbaseParams);

プッシュ受信時の挙動をカスタマイズする(例: FCMを用いる他のSDKと併用する場合)

com.google.firebase.MESSAGING_EVENTに対応する<service /> を複数登録すると先に呼ばれるServiceにより挙動が変化します。これらの<service />の複数登録は避けてください。

FCM を用いる他の SDK と併用したい場合など、プッシュ受信時の挙動をカスタマイズしたい場合は以下のように実装してください。

  1. LogBaseMessagingServiceを継承したクラスを作成します。onMessageReceivedメソッドをオーバーライドし、当該メソッドで追加したいメッセージのハンドリング処理を実装します。
import com.google.firebase.messaging.RemoteMessage;
import net.p_lucky.logpush.LogBaseMessagingService;

public class MyLogBaseMessagingService extends LogBaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage); // LogBaseより送信した通知が表示されます

        // Handle message
    }
}
  1. 上でAndroidManifest.xmlに追加したservicenamenet.p_lucky.logpush.LogBaseMessagingServiceから1で作成したクラス名に変更してください。

通知アイコンを指定する場合

デフォルトではアプリのアイコン (AndroidManifest.xml<application />タグのandroid:icon属性) が通知アイコンとして用いられます。

アプリのアイコンとは別の通知アイコンを指定したい場合は、AndroidManifest.xml<application />直下に<meta-data android:name="net.p_lucky.logpush.icon" />を指定します。

android:valueで通知アイコンのリソース名を指定します。 この場合 mipmap または drawable にある該当名のアイコンが用いられます。

<meta-data android:name="net.p_lucky.logpush.icon" android:value="my_notification_icon" />

android:valueの代わりにandroid:resourceでリソースを参照することもできます。

<meta-data android:name="net.p_lucky.logpush.icon" android:resource="@mipmap/my_notification_icon" />

Android Lollipop (API Level 21) 以降の端末向けには、別の通知アイコンを指定することが可能です。 詳しくは FAQ: 通知アイコンが真っ白になってしまう の「解決策3: アルファチャネルだけのアイコンを別途指定する」をご確認ください。

NotificationChannel (Android 8.0) について

Android 8.0より導入された NotificationChannel に関し、本 SDK ではチャネル名を日本語では「お知らせ」、それ以外の言語では「Notification」としています。

チャネル名を変更する場合は以下の内容をxmlに追加します。 なお、アプリが多言語対応を行なっているかで記述箇所が異なります。ご注意ください。

  • 多言語対応を行なっていない場合
    app/src/main/res/values/logbase.xmlに追加します。
  • 多言語対応を行なっている場合
    各言語用の strings.xml(例: app/src/main/res/values-ja/strings.xml)に追加します。
<resources>
     <string name="logpush_default_channel_name">通知</string>
</resources>