管理者メッセージの受信

プッシュ通知を受け取るには、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 を作成後、以下の方法でプッシュメッセージの詳細を取得できます。

  1. getSender メソッドを実行して、プッシュメッセージの送信者を取得。
  2. pushMessageType メソッドを実行して、プッシュメッセージの種別を判別。
    ("Direct Push" の場合、種別は "DIRECT_PUSH")
  3. getMessage メソッドを実行してメッセージの Bundle を取得し、その他の既定フィールドやアプリ定義フィールドの値を取得。

プッシュ通知を期待どおりに受け取れない場合、トラブルシューティング を参考に問題を解決してください。また、プッシュ通知設定チュートリアル にあるシンプルな実装によって、プッシュ通知の動作だけを検証することもできます。

ステータスバーへの表示

Android では、プッシュ通知を受信しても onMessageReceived メソッド、または、onReceive メソッドが呼ばれるだけです。特に、ステータスバーにメッセージを表示したいような場合は、自分で作り込む必要があります。実装のヒントは、プッシュ通知の実装ヒント をご覧ください。

プッシュメッセージの例

以下は、FCM からのプッシュメッセージを受け取ったとき、remoteMessage.getData() によって取得できるデータのイメージです。Direct Push では、開発者ポータルから指定した追加データ(ここでは Key1 = Value1)を上記のメソッドによって取得できます。これらのデータの詳細は Javadoc を参照してください。

{
    Key1 = Value1,
    collapse_key = do_not_collapse,
    from = 123456789012
}