管理者メッセージの受信
プッシュ通知を受け取るには、AndroidManifest.xml
でメッセージ受け取り用に指定した FirebaseMessagingService または BroadcastReceiver を実装します。この際、ヘルパー API を利用できます。
管理者メッセージを受け取り、内容をパースする例を以下に挙げます。実装方法は FCM と JPush で異なります。
-
public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { // Get the push message. Map<String, String> payload = remoteMessage.getData(); ReceivedMessage message = PushMessageBundleHelper.parse(payload); // Get the sender of the push message. KiiUser sender = message.getSender(); // Refresh the sender and then access it. // Determine the push notification type and start parsing. PushMessageBundleHelper.MessageType type = message.pushMessageType(); switch (type) { case PUSH_TO_APP: // Handle the "Push to App" message. break; case PUSH_TO_USER: // Handle the "Push to User" message. break; case DIRECT_PUSH: // Extract field values set in the developer portal. long when = message.getMessage().getLong("when"); String app_specific_string = message.getMessage().getString("app_specific_key1"); long app_specific_long = message.getMessage().getLong("app_specific_key2"); break; } } }
-
public class KiiPushBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Get the message type for JPush. String jpushMessageType = intent.getAction(); if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(jpushMessageType)) { // Get the message as a Bundle instance. Bundle extras = intent.getExtras(); // Get the message as a ReceivedMessage instance by parsing the bundle. ReceivedMessage message = PushMessageBundleHelper.parse(extras); // Get the sender of the push message. KiiUser sender = message.getSender(); // Refresh the sender and then access it. // Determine the push notification type and start parsing. PushMessageBundleHelper.MessageType type = message.pushMessageType(); switch (type) { case PUSH_TO_APP: // Handle the "Push to App" message. break; case PUSH_TO_USER: // Handle the "Push to User" message. break; case DIRECT_PUSH: // Extract field values set in the developer portal. long when = message.getMessage().getLong("when"); String app_specific_string = message.getMessage().getString("app_specific_key1"); long app_specific_long = message.getMessage().getLong("app_specific_key2"); break; } } } }
FCM では FirebaseMessagingService
のサブクラスとして実装します。onMessageReceived
メソッドの引数で得られたペイロードを PushMessageBundleHelper.parse
メソッドに渡して、ReceivedMessage を作成します。
JPush では BroadcastReceiver
のサブクラスとして実装します。onReceive
メソッドで、通知がプッシュメッセージの受信であることを確認した後、第 2 引数の Intent から intent.getExtras()
を利用し、プッシュメッセージのペイロードを Bundle で受信できます。Bundle を PushMessageBundleHelper.parse
メソッドに渡して ReceivedMessage を作成します。
ReceivedMessage を作成後、以下の方法でプッシュメッセージの詳細を取得できます。
getSender
メソッドを実行して、プッシュメッセージの送信者を取得。pushMessageType
メソッドを実行して、プッシュメッセージの種別を判別。
("Direct Push" の場合、種別は "DIRECT_PUSH")getMessage
メソッドを実行してメッセージの Bundle を取得し、その他の既定フィールドやアプリ定義フィールドの値を取得。
プッシュ通知を期待どおりに受け取れない場合、トラブルシューティング を参考に問題を解決してください。また、プッシュ通知設定チュートリアル にあるシンプルな実装によって、プッシュ通知の動作だけを検証することもできます。
ステータスバーへの表示
Android では、プッシュ通知を受信しても onMessageReceived
メソッド、または、onReceive
メソッドが呼ばれるだけです。特に、ステータスバーにメッセージを表示したいような場合は、自分で作り込む必要があります。実装のヒントは、プッシュ通知の実装ヒント をご覧ください。
プッシュメッセージの例
以下は、FCM からのプッシュメッセージを受け取ったとき、remoteMessage.getData()
によって取得できるデータのイメージです。Direct Push では、開発者ポータルから指定した追加データ(ここでは Key1
= Value1
)を上記のメソッドによって取得できます。これらのデータの詳細は Javadoc を参照してください。
{
Key1 = Value1,
collapse_key = do_not_collapse,
from = 123456789012
}