プッシュ通知の設定: Android (v3.1.1以前)
このページはLogBase Android SDK バージョン 3.1.1 以下のプッシュ通知機能実装手順になります。 LogBase Android SDK バージョン 4.0.0 以上を利用する場合はこちらを参照してください。
プッシュ通知機能のソースコード追加
AndroidManifest.xml を変更する
次の内容をapp/src/main/AndroidManifest.xml
のmanifest
タグ直下に追加します。
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
次の内容をapp/src/main/AndroidManifest.xml
のapplication
タグの中に追加します。
<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 によって提供されるreceiver
をnet.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分程度かかることがあるため、エラーが出る場合は時間をおいて再度お試しください。