プッシュ通知の設定: Android (v3.1.1以前)

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

プッシュ通知機能のソースコード追加

AndroidManifest.xml を変更する

次の内容をapp/src/main/AndroidManifest.xmlmanifestタグ直下に追加します。

<permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
 <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />

次の内容をapp/src/main/AndroidManifest.xmlapplicationタグの中に追加します。

  <receiver
    android:name="net.p_lucky.logpush.GCMReceiver"
    android:exported="true"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="${applicationId}" />
    </intent-filter>
</receiver>

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

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);

GCMを用いる他のSDKと同時に利用する場合

<receiver />を複数登録すると先に呼ばれるreceiverにより挙動が変化します。<receiver />の複数登録は避けましょう。

本 SDK に含まれるGCMReceiverは、他のreceiverにイベントを転送することができます。

次のようにapp/src/main/AndroidManifest.xmlにてnet.p_lucky.logpush.ReceiverHub.RECEIVERSに他のreceiverを指定することで、イベントが転送できます。 他の SDK と同時に利用するときは、他の SDK によって提供されるreceivernet.p_lucky.logpush.ReceiverHub.RECEIVERSに指定します。

<receiver
   android:name="net.p_lucky.logpush.GCMReceiver"
   android:exported="true"
   android:permission="com.google.android.c2dm.permission.SEND" >
   <intent-filter>
       <action android:name="com.google.android.c2dm.intent.RECEIVE" />
       <category android:name="\${applicationId}" />
   </intent-filter>
   
   <!-- com.example.OtherReceiver1 と com.example.OtherReceiver2 にイベントを転送 -->
   <meta-data
       android:name="net.p_lucky.logpush.ReceiverHub.RECEIVERS"
       android:value="com.example.OtherReceiver1, com.example.OtherReceiver2" />
</receiver>

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

デフォルトではアプリのアイコン (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>

サーバーキーの登録

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

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

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

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