Skip to content

fix(fcm): Increase the multicast request count limit to 500. #321

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 23, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ protected String execute() throws FirebaseMessagingException {
* <p>The responses list obtained by calling {@link BatchResponse#getResponses()} on the return
* value corresponds to the order of input messages.
*
* @param messages A non-null, non-empty list containing up to 100 messages.
* @param messages A non-null, non-empty list containing up to 500 messages.
* @return A {@link BatchResponse} indicating the result of the operation.
* @throws FirebaseMessagingException If an error occurs while handing the messages off to FCM for
* delivery. An exception here indicates a total failure -- i.e. none of the messages in the
Expand All @@ -171,7 +171,7 @@ public BatchResponse sendAll(
* <p>The responses list obtained by calling {@link BatchResponse#getResponses()} on the return
* value corresponds to the order of input messages.
*
* @param messages A non-null, non-empty list containing up to 100 messages.
* @param messages A non-null, non-empty list containing up to 500 messages.
* @param dryRun A boolean indicating whether to perform a dry run (validation only) of the send.
* @return A {@link BatchResponse} indicating the result of the operation.
* @throws FirebaseMessagingException If an error occurs while handing the messages off to FCM for
Expand All @@ -186,7 +186,7 @@ public BatchResponse sendAll(
/**
* Similar to {@link #sendAll(List)} but performs the operation asynchronously.
*
* @param messages A non-null, non-empty list containing up to 100 messages.
* @param messages A non-null, non-empty list containing up to 500 messages.
* @return @return An {@code ApiFuture} that will complete with a {@link BatchResponse} when
* the messages have been sent.
*/
Expand All @@ -197,7 +197,7 @@ public ApiFuture<BatchResponse> sendAllAsync(@NonNull List<Message> messages) {
/**
* Similar to {@link #sendAll(List, boolean)} but performs the operation asynchronously.
*
* @param messages A non-null, non-empty list containing up to 100 messages.
* @param messages A non-null, non-empty list containing up to 500 messages.
* @param dryRun A boolean indicating whether to perform a dry run (validation only) of the send.
* @return @return An {@code ApiFuture} that will complete with a {@link BatchResponse} when
* the messages have been sent, or when the emulation has finished.
Expand Down Expand Up @@ -284,8 +284,8 @@ private CallableOperation<BatchResponse, FirebaseMessagingException> sendAllOp(

final List<Message> immutableMessages = ImmutableList.copyOf(messages);
checkArgument(!immutableMessages.isEmpty(), "messages list must not be empty");
checkArgument(immutableMessages.size() <= 100,
"messages list must not contain more than 100 elements");
checkArgument(immutableMessages.size() <= 500,
"messages list must not contain more than 500 elements");
final FirebaseMessagingClient messagingClient = getMessagingClient();
return new CallableOperation<BatchResponse,FirebaseMessagingException>() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
/**
* 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 100 registration
* message should be sent. A single {@code MulticastMessage} may contain up to 500 registration
* tokens.
*
* <p>Instances of this class are thread-safe and immutable. Use {@link MulticastMessage.Builder}
Expand All @@ -55,7 +55,7 @@ public class MulticastMessage {
private MulticastMessage(Builder builder) {
this.tokens = builder.tokens.build();
checkArgument(!this.tokens.isEmpty(), "at least one token must be specified");
checkArgument(this.tokens.size() <= 100, "no more than 100 tokens can 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");
}
Expand Down Expand Up @@ -103,7 +103,7 @@ public static class Builder {
private Builder() {}

/**
* Adds a token to which the message should be sent. Up to 100 tokens can be specified on
* 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.
Expand All @@ -115,7 +115,7 @@ public Builder addToken(@NonNull String token) {
}

/**
* Adds a collection of tokens to which the message should be sent. Up to 100 tokens can be
* 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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,16 +114,16 @@ public void testSendAll() throws Exception {
}

@Test
public void testSendHundred() throws Exception {
public void testSendFiveHundred() throws Exception {
List<Message> messages = new ArrayList<>();
for (int i = 0; i < 100; i++) {
for (int i = 0; i < 500; i++) {
messages.add(Message.builder().setTopic("foo-bar-" + (i % 10)).build());
}

BatchResponse response = FirebaseMessaging.getInstance().sendAll(messages, true);

assertEquals(100, response.getResponses().size());
assertEquals(100, response.getSuccessCount());
assertEquals(500, response.getResponses().size());
assertEquals(500, response.getSuccessCount());
assertEquals(0, response.getFailureCount());
for (SendResponse sendResponse : response.getResponses()) {
if (!sendResponse.isSuccessful()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ public void testSendAllWithTooManyMessages() throws FirebaseMessagingException {
MockFirebaseMessagingClient client = MockFirebaseMessagingClient.fromMessageId(null);
FirebaseMessaging messaging = getMessagingForSend(Suppliers.ofInstance(client));
ImmutableList.Builder<Message> listBuilder = ImmutableList.builder();
for (int i = 0; i < 101; i++) {
for (int i = 0; i < 501; i++) {
listBuilder.add(Message.builder().setTopic("topic").build());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,12 @@ public void testNoTokens() {
@Test
public void testTooManyTokens() {
MulticastMessage.Builder builder = MulticastMessage.builder();
for (int i = 0; i < 101; i++) {
for (int i = 0; i < 501; i++) {
builder.addToken("token" + i);
}
try {
builder.build();
fail("No error thrown for more than 100 tokens");
fail("No error thrown for more than 500 tokens");
} catch (IllegalArgumentException expected) {
// expected
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ public void sendAll() throws FirebaseMessagingException {
String registrationToken = "YOUR_REGISTRATION_TOKEN";

// [START send_all]
// Create a list containing up to 100 messages.
// Create a list containing up to 500 messages.
List<Message> messages = Arrays.asList(
Message.builder()
.setNotification(new Notification("Price drop", "5% off all electronics"))
Expand Down