All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.firebase.messaging.MulticastMessage Maven / Gradle / Ivy

/*
 * Copyright 2019 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.firebase.messaging;

import static com.google.common.base.Preconditions.checkArgument;

import com.google.api.client.util.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.firebase.internal.NonNull;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Represents a message that can be sent to multiple devices via Firebase Cloud Messaging (FCM).
 * Contains payload information as well as the list of device registration tokens to which the
 * message should be sent. A single {@code MulticastMessage} may contain up to 500 registration
 * tokens.
 *
 * 

Instances of this class are thread-safe and immutable. Use {@link MulticastMessage.Builder} * to create new instances. See {@link FirebaseMessaging#sendMulticast(MulticastMessage)} for * details on how to send the message to FCM for multicast delivery. * *

This class and the associated Builder retain the order of tokens. Therefore the order of * the responses list obtained by calling {@link BatchResponse#getResponses()} on the return value * of {@link FirebaseMessaging#sendMulticast(MulticastMessage)} corresponds to the order in which * tokens were added to the {@link MulticastMessage.Builder}. */ public class MulticastMessage { private final List tokens; private final Map data; private final Notification notification; private final AndroidConfig androidConfig; private final WebpushConfig webpushConfig; private final ApnsConfig apnsConfig; private MulticastMessage(Builder builder) { this.tokens = builder.tokens.build(); checkArgument(!this.tokens.isEmpty(), "at least one token must be specified"); checkArgument(this.tokens.size() <= 500, "no more than 500 tokens can be specified"); for (String token : this.tokens) { checkArgument(!Strings.isNullOrEmpty(token), "none of the tokens can be null or empty"); } this.data = builder.data.isEmpty() ? null : ImmutableMap.copyOf(builder.data); this.notification = builder.notification; this.androidConfig = builder.androidConfig; this.webpushConfig = builder.webpushConfig; this.apnsConfig = builder.apnsConfig; } List getMessageList() { Message.Builder builder = Message.builder() .setNotification(this.notification) .setAndroidConfig(this.androidConfig) .setApnsConfig(this.apnsConfig) .setWebpushConfig(this.webpushConfig); if (this.data != null) { builder.putAllData(this.data); } ImmutableList.Builder messages = ImmutableList.builder(); for (String token : this.tokens) { messages.add(builder.setToken(token).build()); } return messages.build(); } /** * Creates a new {@link MulticastMessage.Builder}. * * @return A {@link MulticastMessage.Builder} instance. */ public static Builder builder() { return new Builder(); } public static class Builder { private final ImmutableList.Builder tokens = ImmutableList.builder(); private final Map data = new HashMap<>(); private Notification notification; private AndroidConfig androidConfig; private WebpushConfig webpushConfig; private ApnsConfig apnsConfig; private Builder() {} /** * Adds a token to which the message should be sent. Up to 500 tokens can be specified on * a single instance of {@link MulticastMessage}. * * @param token A non-null, non-empty Firebase device registration token. * @return This builder. */ public Builder addToken(@NonNull String token) { this.tokens.add(token); return this; } /** * Adds a collection of tokens to which the message should be sent. Up to 500 tokens can be * specified on a single instance of {@link MulticastMessage}. * * @param tokens Collection of Firebase device registration tokens. * @return This builder. */ public Builder addAllTokens(@NonNull Collection tokens) { this.tokens.addAll(tokens); return this; } /** * Sets the notification information to be included in the message. * * @param notification A {@link Notification} instance. * @return This builder. */ public Builder setNotification(Notification notification) { this.notification = notification; return this; } /** * Sets the Android-specific information to be included in the message. * * @param androidConfig An {@link AndroidConfig} instance. * @return This builder. */ public Builder setAndroidConfig(AndroidConfig androidConfig) { this.androidConfig = androidConfig; return this; } /** * Sets the Webpush-specific information to be included in the message. * * @param webpushConfig A {@link WebpushConfig} instance. * @return This builder. */ public Builder setWebpushConfig(WebpushConfig webpushConfig) { this.webpushConfig = webpushConfig; return this; } /** * Sets the information specific to APNS (Apple Push Notification Service). * * @param apnsConfig An {@link ApnsConfig} instance. * @return This builder. */ public Builder setApnsConfig(ApnsConfig apnsConfig) { this.apnsConfig = apnsConfig; return this; } /** * Adds the given key-value pair to the message as a data field. Key or the value may not be * null. * * @param key Name of the data field. Must not be null. * @param value Value of the data field. Must not be null. * @return This builder. */ public Builder putData(@NonNull String key, @NonNull String value) { this.data.put(key, value); return this; } /** * Adds all the key-value pairs in the given map to the message as data fields. None of the * keys or values may be null. * * @param map A non-null map of data fields. Map must not contain null keys or values. * @return This builder. */ public Builder putAllData(@NonNull Map map) { this.data.putAll(map); return this; } /** * Creates a new {@link MulticastMessage} instance from the parameters set on this builder. * * @return A new {@link MulticastMessage} instance. * @throws IllegalArgumentException If any of the parameters set on the builder are invalid. */ public MulticastMessage build() { return new MulticastMessage(this); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy