firebase通知句柄数据消息背景

时间:2017-10-14 03:06:38

标签: android firebase-notifications

enter image description here   enter image description here

当我的应用处于后台(被杀或暂停到后台)或onMessageReceived回叫时,我可以发送通知数据消息   感谢。

1 个答案:

答案 0 :(得分:0)

是。可以做到这一点。查看参考Firebase Notification Github Repo

推送通知将基于两件事触发

  • 发送到特定设备(基于fcm令牌)
  • 发送到设备组(基于订阅的主题)
将调用

onMessageReceived(RemoteMessage remoteMessage)如果在设备中收到消息

可以访问远程消息并根据需要和要求执行操作

我尽量保持初始开发的简单性

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    // Do nothing if message is null
    if (remoteMessage == null) return;

    // Data exists
    if (remoteMessage.getData().size() > 0) {
        // To show the notification pass the entire remote message as string 
        sendNotification(remoteMessage.getData().toString());

        // if you've JSON string then decode and handle accordingly
        // Sample
        /**
            try {
                JSONObject json = new JSONObject(remoteMessage.getData().toString());
                sendNotification(JSONObject json); // Need to add method to the class to handle this
            } catch (Exception e) {
                Log.e(TAG, "Exception: " + e.getMessage());
            }           

        */
    }

    /**
     * Create and show a simple notification containing the received FCM message.
     * @param messageBody FCM message body received.
     */
    private void sendNotification(String messageBody) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                PendingIntent.FLAG_ONE_SHOT);

        String channelId = getString(R.string.default_notification_channel_id);
        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder =
                new NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.drawable.ic_stat_ic_notification)
                .setContentTitle("FCM Message")
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }
}