Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
software.amazon.awssdk.services.pinpoint.model.GCMMessage Maven / Gradle / Ivy
Go to download
The AWS Java SDK for Amazon Pinpoint module holds the client classes that are used for communicating
with Amazon Pinpoint Service
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
* the License. A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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 software.amazon.awssdk.services.pinpoint.model;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Function;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.core.SdkField;
import software.amazon.awssdk.core.SdkPojo;
import software.amazon.awssdk.core.protocol.MarshallLocation;
import software.amazon.awssdk.core.protocol.MarshallingType;
import software.amazon.awssdk.core.traits.ListTrait;
import software.amazon.awssdk.core.traits.LocationTrait;
import software.amazon.awssdk.core.traits.MapTrait;
import software.amazon.awssdk.core.util.DefaultSdkAutoConstructMap;
import software.amazon.awssdk.core.util.SdkAutoConstructMap;
import software.amazon.awssdk.utils.ToString;
import software.amazon.awssdk.utils.builder.CopyableBuilder;
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
/**
*
* Specifies the settings for a one-time message that's sent directly to an endpoint through the GCM channel. The GCM
* channel enables Amazon Pinpoint to send messages to the Firebase Cloud Messaging (FCM), formerly Google Cloud
* Messaging (GCM), service.
*
*/
@Generated("software.amazon.awssdk:codegen")
public final class GCMMessage implements SdkPojo, Serializable, ToCopyableBuilder {
private static final SdkField ACTION_FIELD = SdkField. builder(MarshallingType.STRING).memberName("Action")
.getter(getter(GCMMessage::actionAsString)).setter(setter(Builder::action))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Action").build()).build();
private static final SdkField BODY_FIELD = SdkField. builder(MarshallingType.STRING).memberName("Body")
.getter(getter(GCMMessage::body)).setter(setter(Builder::body))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Body").build()).build();
private static final SdkField COLLAPSE_KEY_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("CollapseKey").getter(getter(GCMMessage::collapseKey)).setter(setter(Builder::collapseKey))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("CollapseKey").build()).build();
private static final SdkField> DATA_FIELD = SdkField
.> builder(MarshallingType.MAP)
.memberName("Data")
.getter(getter(GCMMessage::data))
.setter(setter(Builder::data))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Data").build(),
MapTrait.builder()
.keyLocationName("key")
.valueLocationName("value")
.valueFieldInfo(
SdkField. builder(MarshallingType.STRING)
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
.locationName("value").build()).build()).build()).build();
private static final SdkField ICON_REFERENCE_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("IconReference").getter(getter(GCMMessage::iconReference)).setter(setter(Builder::iconReference))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("IconReference").build()).build();
private static final SdkField IMAGE_ICON_URL_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("ImageIconUrl").getter(getter(GCMMessage::imageIconUrl)).setter(setter(Builder::imageIconUrl))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("ImageIconUrl").build()).build();
private static final SdkField IMAGE_URL_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("ImageUrl").getter(getter(GCMMessage::imageUrl)).setter(setter(Builder::imageUrl))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("ImageUrl").build()).build();
private static final SdkField PREFERRED_AUTHENTICATION_METHOD_FIELD = SdkField
. builder(MarshallingType.STRING)
.memberName("PreferredAuthenticationMethod")
.getter(getter(GCMMessage::preferredAuthenticationMethod))
.setter(setter(Builder::preferredAuthenticationMethod))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("PreferredAuthenticationMethod")
.build()).build();
private static final SdkField PRIORITY_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("Priority").getter(getter(GCMMessage::priority)).setter(setter(Builder::priority))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Priority").build()).build();
private static final SdkField RAW_CONTENT_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("RawContent").getter(getter(GCMMessage::rawContent)).setter(setter(Builder::rawContent))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("RawContent").build()).build();
private static final SdkField RESTRICTED_PACKAGE_NAME_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("RestrictedPackageName").getter(getter(GCMMessage::restrictedPackageName))
.setter(setter(Builder::restrictedPackageName))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("RestrictedPackageName").build())
.build();
private static final SdkField SILENT_PUSH_FIELD = SdkField. builder(MarshallingType.BOOLEAN)
.memberName("SilentPush").getter(getter(GCMMessage::silentPush)).setter(setter(Builder::silentPush))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("SilentPush").build()).build();
private static final SdkField SMALL_IMAGE_ICON_URL_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("SmallImageIconUrl").getter(getter(GCMMessage::smallImageIconUrl))
.setter(setter(Builder::smallImageIconUrl))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("SmallImageIconUrl").build()).build();
private static final SdkField SOUND_FIELD = SdkField. builder(MarshallingType.STRING).memberName("Sound")
.getter(getter(GCMMessage::sound)).setter(setter(Builder::sound))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Sound").build()).build();
private static final SdkField>> SUBSTITUTIONS_FIELD = SdkField
.>> builder(MarshallingType.MAP)
.memberName("Substitutions")
.getter(getter(GCMMessage::substitutions))
.setter(setter(Builder::substitutions))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Substitutions").build(),
MapTrait.builder()
.keyLocationName("key")
.valueLocationName("value")
.valueFieldInfo(
SdkField.> builder(MarshallingType.LIST)
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
.locationName("value").build(),
ListTrait
.builder()
.memberLocationName(null)
.memberFieldInfo(
SdkField. builder(MarshallingType.STRING)
.traits(LocationTrait.builder()
.location(MarshallLocation.PAYLOAD)
.locationName("member").build()).build())
.build()).build()).build()).build();
private static final SdkField TIME_TO_LIVE_FIELD = SdkField. builder(MarshallingType.INTEGER)
.memberName("TimeToLive").getter(getter(GCMMessage::timeToLive)).setter(setter(Builder::timeToLive))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("TimeToLive").build()).build();
private static final SdkField TITLE_FIELD = SdkField. builder(MarshallingType.STRING).memberName("Title")
.getter(getter(GCMMessage::title)).setter(setter(Builder::title))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Title").build()).build();
private static final SdkField URL_FIELD = SdkField. builder(MarshallingType.STRING).memberName("Url")
.getter(getter(GCMMessage::url)).setter(setter(Builder::url))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Url").build()).build();
private static final List> SDK_FIELDS = Collections.unmodifiableList(Arrays.asList(ACTION_FIELD, BODY_FIELD,
COLLAPSE_KEY_FIELD, DATA_FIELD, ICON_REFERENCE_FIELD, IMAGE_ICON_URL_FIELD, IMAGE_URL_FIELD,
PREFERRED_AUTHENTICATION_METHOD_FIELD, PRIORITY_FIELD, RAW_CONTENT_FIELD, RESTRICTED_PACKAGE_NAME_FIELD,
SILENT_PUSH_FIELD, SMALL_IMAGE_ICON_URL_FIELD, SOUND_FIELD, SUBSTITUTIONS_FIELD, TIME_TO_LIVE_FIELD, TITLE_FIELD,
URL_FIELD));
private static final long serialVersionUID = 1L;
private final String action;
private final String body;
private final String collapseKey;
private final Map data;
private final String iconReference;
private final String imageIconUrl;
private final String imageUrl;
private final String preferredAuthenticationMethod;
private final String priority;
private final String rawContent;
private final String restrictedPackageName;
private final Boolean silentPush;
private final String smallImageIconUrl;
private final String sound;
private final Map> substitutions;
private final Integer timeToLive;
private final String title;
private final String url;
private GCMMessage(BuilderImpl builder) {
this.action = builder.action;
this.body = builder.body;
this.collapseKey = builder.collapseKey;
this.data = builder.data;
this.iconReference = builder.iconReference;
this.imageIconUrl = builder.imageIconUrl;
this.imageUrl = builder.imageUrl;
this.preferredAuthenticationMethod = builder.preferredAuthenticationMethod;
this.priority = builder.priority;
this.rawContent = builder.rawContent;
this.restrictedPackageName = builder.restrictedPackageName;
this.silentPush = builder.silentPush;
this.smallImageIconUrl = builder.smallImageIconUrl;
this.sound = builder.sound;
this.substitutions = builder.substitutions;
this.timeToLive = builder.timeToLive;
this.title = builder.title;
this.url = builder.url;
}
/**
*
* The action to occur if the recipient taps the push notification. Valid values are:
*
*
*
*
* OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default
* action.
*
*
*
*
* DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the deep-linking
* features of the Android platform.
*
*
*
*
* URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you
* specify.
*
*
*
*
* If the service returns an enum value that is not available in the current SDK version, {@link #action} will
* return {@link Action#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from
* {@link #actionAsString}.
*
*
* @return The action to occur if the recipient taps the push notification. Valid values are:
*
*
*
* OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the
* default action.
*
*
*
*
* DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the
* deep-linking features of the Android platform.
*
*
*
*
* URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you
* specify.
*
*
* @see Action
*/
public final Action action() {
return Action.fromValue(action);
}
/**
*
* The action to occur if the recipient taps the push notification. Valid values are:
*
*
*
*
* OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the default
* action.
*
*
*
*
* DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the deep-linking
* features of the Android platform.
*
*
*
*
* URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you
* specify.
*
*
*
*
* If the service returns an enum value that is not available in the current SDK version, {@link #action} will
* return {@link Action#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from
* {@link #actionAsString}.
*
*
* @return The action to occur if the recipient taps the push notification. Valid values are:
*
*
*
* OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the
* default action.
*
*
*
*
* DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the
* deep-linking features of the Android platform.
*
*
*
*
* URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you
* specify.
*
*
* @see Action
*/
public final String actionAsString() {
return action;
}
/**
*
* The body of the notification message.
*
*
* @return The body of the notification message.
*/
public final String body() {
return body;
}
/**
*
* An arbitrary string that identifies a group of messages that can be collapsed to ensure that only the last
* message is sent when delivery can resume. This helps avoid sending too many instances of the same messages when
* the recipient's device comes online again or becomes active.
*
*
* Amazon Pinpoint specifies this value in the Firebase Cloud Messaging (FCM) collapse_key parameter when it sends
* the notification message to FCM.
*
*
* @return An arbitrary string that identifies a group of messages that can be collapsed to ensure that only the
* last message is sent when delivery can resume. This helps avoid sending too many instances of the same
* messages when the recipient's device comes online again or becomes active.
*
* Amazon Pinpoint specifies this value in the Firebase Cloud Messaging (FCM) collapse_key parameter when it
* sends the notification message to FCM.
*/
public final String collapseKey() {
return collapseKey;
}
/**
* For responses, this returns true if the service returned a value for the Data property. This DOES NOT check that
* the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). This is useful
* because the SDK will never return a null collection or map, but you may need to differentiate between the service
* returning nothing (or null) and the service returning an empty collection or map. For requests, this returns true
* if a value for the property was specified in the request builder, and false if a value was not specified.
*/
public final boolean hasData() {
return data != null && !(data instanceof SdkAutoConstructMap);
}
/**
*
* The JSON data payload to use for the push notification, if the notification is a silent push notification. This
* payload is added to the data.pinpoint.jsonBody object of the notification.
*
*
* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException.
*
*
* This method will never return null. If you would like to know whether the service returned this field (so that
* you can differentiate between null and empty), you can use the {@link #hasData} method.
*
*
* @return The JSON data payload to use for the push notification, if the notification is a silent push
* notification. This payload is added to the data.pinpoint.jsonBody object of the notification.
*/
public final Map data() {
return data;
}
/**
*
* The icon image name of the asset saved in your app.
*
*
* @return The icon image name of the asset saved in your app.
*/
public final String iconReference() {
return iconReference;
}
/**
*
* The URL of the large icon image to display in the content view of the push notification.
*
*
* @return The URL of the large icon image to display in the content view of the push notification.
*/
public final String imageIconUrl() {
return imageIconUrl;
}
/**
*
* The URL of an image to display in the push notification.
*
*
* @return The URL of an image to display in the push notification.
*/
public final String imageUrl() {
return imageUrl;
}
/**
*
* The preferred authentication method, with valid values "KEY" or "TOKEN". If a value isn't provided then the
* DefaultAuthenticationMethod is used.
*
*
* @return The preferred authentication method, with valid values "KEY" or "TOKEN". If a value isn't provided then
* the DefaultAuthenticationMethod is used.
*/
public final String preferredAuthenticationMethod() {
return preferredAuthenticationMethod;
}
/**
*
* para>normal – The notification might be delayed. Delivery is optimized for battery usage on the recipient's
* device. Use this value unless immediate delivery is required.
*
* /listitem>
*
* high – The notification is sent immediately and might wake a sleeping device.
*
* /para>
*
* Amazon Pinpoint specifies this value in the FCM priority parameter when it sends the notification message to FCM.
*
*
* The equivalent values for Apple Push Notification service (APNs) are 5, for normal, and 10, for high. If you
* specify an APNs value for this property, Amazon Pinpoint accepts and converts the value to the corresponding FCM
* value.
*
*
* @return para>normal – The notification might be delayed. Delivery is optimized for battery usage on the
* recipient's device. Use this value unless immediate delivery is required./listitem>
*
* high – The notification is sent immediately and might wake a sleeping device.
*
* /para>
*
* Amazon Pinpoint specifies this value in the FCM priority parameter when it sends the notification message
* to FCM.
*
*
* The equivalent values for Apple Push Notification service (APNs) are 5, for normal, and 10, for high. If
* you specify an APNs value for this property, Amazon Pinpoint accepts and converts the value to the
* corresponding FCM value.
*/
public final String priority() {
return priority;
}
/**
*
* The raw, JSON-formatted string to use as the payload for the notification message. If specified, this value
* overrides all other content for the message.
*
*
* @return The raw, JSON-formatted string to use as the payload for the notification message. If specified, this
* value overrides all other content for the message.
*/
public final String rawContent() {
return rawContent;
}
/**
*
* The package name of the application where registration tokens must match in order for the recipient to receive
* the message.
*
*
* @return The package name of the application where registration tokens must match in order for the recipient to
* receive the message.
*/
public final String restrictedPackageName() {
return restrictedPackageName;
}
/**
*
* Specifies whether the notification is a silent push notification, which is a push notification that doesn't
* display on a recipient's device. Silent push notifications can be used for cases such as updating an app's
* configuration or supporting phone home functionality.
*
*
* @return Specifies whether the notification is a silent push notification, which is a push notification that
* doesn't display on a recipient's device. Silent push notifications can be used for cases such as updating
* an app's configuration or supporting phone home functionality.
*/
public final Boolean silentPush() {
return silentPush;
}
/**
*
* The URL of the small icon image to display in the status bar and the content view of the push notification.
*
*
* @return The URL of the small icon image to display in the status bar and the content view of the push
* notification.
*/
public final String smallImageIconUrl() {
return smallImageIconUrl;
}
/**
*
* The sound to play when the recipient receives the push notification. You can use the default stream or specify
* the file name of a sound resource that's bundled in your app. On an Android platform, the sound file must reside
* in /res/raw/.
*
*
* @return The sound to play when the recipient receives the push notification. You can use the default stream or
* specify the file name of a sound resource that's bundled in your app. On an Android platform, the sound
* file must reside in /res/raw/.
*/
public final String sound() {
return sound;
}
/**
* For responses, this returns true if the service returned a value for the Substitutions property. This DOES NOT
* check that the value is non-empty (for which, you should check the {@code isEmpty()} method on the property).
* This is useful because the SDK will never return a null collection or map, but you may need to differentiate
* between the service returning nothing (or null) and the service returning an empty collection or map. For
* requests, this returns true if a value for the property was specified in the request builder, and false if a
* value was not specified.
*/
public final boolean hasSubstitutions() {
return substitutions != null && !(substitutions instanceof SdkAutoConstructMap);
}
/**
*
* The default message variables to use in the notification message. You can override the default variables with
* individual address variables.
*
*
* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException.
*
*
* This method will never return null. If you would like to know whether the service returned this field (so that
* you can differentiate between null and empty), you can use the {@link #hasSubstitutions} method.
*
*
* @return The default message variables to use in the notification message. You can override the default variables
* with individual address variables.
*/
public final Map> substitutions() {
return substitutions;
}
/**
*
* The amount of time, in seconds, that FCM should store and attempt to deliver the push notification, if the
* service is unable to deliver the notification the first time. If you don't specify this value, FCM defaults to
* the maximum value, which is 2,419,200 seconds (28 days).
*
*
* Amazon Pinpoint specifies this value in the FCM time_to_live parameter when it sends the notification message to
* FCM.
*
*
* @return The amount of time, in seconds, that FCM should store and attempt to deliver the push notification, if
* the service is unable to deliver the notification the first time. If you don't specify this value, FCM
* defaults to the maximum value, which is 2,419,200 seconds (28 days).
*
* Amazon Pinpoint specifies this value in the FCM time_to_live parameter when it sends the notification
* message to FCM.
*/
public final Integer timeToLive() {
return timeToLive;
}
/**
*
* The title to display above the notification message on the recipient's device.
*
*
* @return The title to display above the notification message on the recipient's device.
*/
public final String title() {
return title;
}
/**
*
* The URL to open in the recipient's default mobile browser, if a recipient taps the push notification and the
* value of the Action property is URL.
*
*
* @return The URL to open in the recipient's default mobile browser, if a recipient taps the push notification and
* the value of the Action property is URL.
*/
public final String url() {
return url;
}
@Override
public Builder toBuilder() {
return new BuilderImpl(this);
}
public static Builder builder() {
return new BuilderImpl();
}
public static Class extends Builder> serializableBuilderClass() {
return BuilderImpl.class;
}
@Override
public final int hashCode() {
int hashCode = 1;
hashCode = 31 * hashCode + Objects.hashCode(actionAsString());
hashCode = 31 * hashCode + Objects.hashCode(body());
hashCode = 31 * hashCode + Objects.hashCode(collapseKey());
hashCode = 31 * hashCode + Objects.hashCode(hasData() ? data() : null);
hashCode = 31 * hashCode + Objects.hashCode(iconReference());
hashCode = 31 * hashCode + Objects.hashCode(imageIconUrl());
hashCode = 31 * hashCode + Objects.hashCode(imageUrl());
hashCode = 31 * hashCode + Objects.hashCode(preferredAuthenticationMethod());
hashCode = 31 * hashCode + Objects.hashCode(priority());
hashCode = 31 * hashCode + Objects.hashCode(rawContent());
hashCode = 31 * hashCode + Objects.hashCode(restrictedPackageName());
hashCode = 31 * hashCode + Objects.hashCode(silentPush());
hashCode = 31 * hashCode + Objects.hashCode(smallImageIconUrl());
hashCode = 31 * hashCode + Objects.hashCode(sound());
hashCode = 31 * hashCode + Objects.hashCode(hasSubstitutions() ? substitutions() : null);
hashCode = 31 * hashCode + Objects.hashCode(timeToLive());
hashCode = 31 * hashCode + Objects.hashCode(title());
hashCode = 31 * hashCode + Objects.hashCode(url());
return hashCode;
}
@Override
public final boolean equals(Object obj) {
return equalsBySdkFields(obj);
}
@Override
public final boolean equalsBySdkFields(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof GCMMessage)) {
return false;
}
GCMMessage other = (GCMMessage) obj;
return Objects.equals(actionAsString(), other.actionAsString()) && Objects.equals(body(), other.body())
&& Objects.equals(collapseKey(), other.collapseKey()) && hasData() == other.hasData()
&& Objects.equals(data(), other.data()) && Objects.equals(iconReference(), other.iconReference())
&& Objects.equals(imageIconUrl(), other.imageIconUrl()) && Objects.equals(imageUrl(), other.imageUrl())
&& Objects.equals(preferredAuthenticationMethod(), other.preferredAuthenticationMethod())
&& Objects.equals(priority(), other.priority()) && Objects.equals(rawContent(), other.rawContent())
&& Objects.equals(restrictedPackageName(), other.restrictedPackageName())
&& Objects.equals(silentPush(), other.silentPush())
&& Objects.equals(smallImageIconUrl(), other.smallImageIconUrl()) && Objects.equals(sound(), other.sound())
&& hasSubstitutions() == other.hasSubstitutions() && Objects.equals(substitutions(), other.substitutions())
&& Objects.equals(timeToLive(), other.timeToLive()) && Objects.equals(title(), other.title())
&& Objects.equals(url(), other.url());
}
/**
* Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be
* redacted from this string using a placeholder value.
*/
@Override
public final String toString() {
return ToString.builder("GCMMessage").add("Action", actionAsString()).add("Body", body())
.add("CollapseKey", collapseKey()).add("Data", hasData() ? data() : null).add("IconReference", iconReference())
.add("ImageIconUrl", imageIconUrl()).add("ImageUrl", imageUrl())
.add("PreferredAuthenticationMethod", preferredAuthenticationMethod()).add("Priority", priority())
.add("RawContent", rawContent()).add("RestrictedPackageName", restrictedPackageName())
.add("SilentPush", silentPush()).add("SmallImageIconUrl", smallImageIconUrl()).add("Sound", sound())
.add("Substitutions", hasSubstitutions() ? substitutions() : null).add("TimeToLive", timeToLive())
.add("Title", title()).add("Url", url()).build();
}
public final Optional getValueForField(String fieldName, Class clazz) {
switch (fieldName) {
case "Action":
return Optional.ofNullable(clazz.cast(actionAsString()));
case "Body":
return Optional.ofNullable(clazz.cast(body()));
case "CollapseKey":
return Optional.ofNullable(clazz.cast(collapseKey()));
case "Data":
return Optional.ofNullable(clazz.cast(data()));
case "IconReference":
return Optional.ofNullable(clazz.cast(iconReference()));
case "ImageIconUrl":
return Optional.ofNullable(clazz.cast(imageIconUrl()));
case "ImageUrl":
return Optional.ofNullable(clazz.cast(imageUrl()));
case "PreferredAuthenticationMethod":
return Optional.ofNullable(clazz.cast(preferredAuthenticationMethod()));
case "Priority":
return Optional.ofNullable(clazz.cast(priority()));
case "RawContent":
return Optional.ofNullable(clazz.cast(rawContent()));
case "RestrictedPackageName":
return Optional.ofNullable(clazz.cast(restrictedPackageName()));
case "SilentPush":
return Optional.ofNullable(clazz.cast(silentPush()));
case "SmallImageIconUrl":
return Optional.ofNullable(clazz.cast(smallImageIconUrl()));
case "Sound":
return Optional.ofNullable(clazz.cast(sound()));
case "Substitutions":
return Optional.ofNullable(clazz.cast(substitutions()));
case "TimeToLive":
return Optional.ofNullable(clazz.cast(timeToLive()));
case "Title":
return Optional.ofNullable(clazz.cast(title()));
case "Url":
return Optional.ofNullable(clazz.cast(url()));
default:
return Optional.empty();
}
}
@Override
public final List> sdkFields() {
return SDK_FIELDS;
}
private static Function getter(Function g) {
return obj -> g.apply((GCMMessage) obj);
}
private static BiConsumer setter(BiConsumer s) {
return (obj, val) -> s.accept((Builder) obj, val);
}
public interface Builder extends SdkPojo, CopyableBuilder {
/**
*
* The action to occur if the recipient taps the push notification. Valid values are:
*
*
*
*
* OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the
* default action.
*
*
*
*
* DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the
* deep-linking features of the Android platform.
*
*
*
*
* URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you
* specify.
*
*
*
*
* @param action
* The action to occur if the recipient taps the push notification. Valid values are:
*
*
*
* OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is
* the default action.
*
*
*
*
* DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the
* deep-linking features of the Android platform.
*
*
*
*
* URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that
* you specify.
*
*
* @see Action
* @return Returns a reference to this object so that method calls can be chained together.
* @see Action
*/
Builder action(String action);
/**
*
* The action to occur if the recipient taps the push notification. Valid values are:
*
*
*
*
* OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is the
* default action.
*
*
*
*
* DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the
* deep-linking features of the Android platform.
*
*
*
*
* URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that you
* specify.
*
*
*
*
* @param action
* The action to occur if the recipient taps the push notification. Valid values are:
*
*
*
* OPEN_APP - Your app opens or it becomes the foreground app if it was sent to the background. This is
* the default action.
*
*
*
*
* DEEP_LINK - Your app opens and displays a designated user interface in the app. This action uses the
* deep-linking features of the Android platform.
*
*
*
*
* URL - The default mobile browser on the recipient's device opens and loads the web page at a URL that
* you specify.
*
*
* @see Action
* @return Returns a reference to this object so that method calls can be chained together.
* @see Action
*/
Builder action(Action action);
/**
*
* The body of the notification message.
*
*
* @param body
* The body of the notification message.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder body(String body);
/**
*
* An arbitrary string that identifies a group of messages that can be collapsed to ensure that only the last
* message is sent when delivery can resume. This helps avoid sending too many instances of the same messages
* when the recipient's device comes online again or becomes active.
*
*
* Amazon Pinpoint specifies this value in the Firebase Cloud Messaging (FCM) collapse_key parameter when it
* sends the notification message to FCM.
*
*
* @param collapseKey
* An arbitrary string that identifies a group of messages that can be collapsed to ensure that only the
* last message is sent when delivery can resume. This helps avoid sending too many instances of the same
* messages when the recipient's device comes online again or becomes active.
*
* Amazon Pinpoint specifies this value in the Firebase Cloud Messaging (FCM) collapse_key parameter when
* it sends the notification message to FCM.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder collapseKey(String collapseKey);
/**
*
* The JSON data payload to use for the push notification, if the notification is a silent push notification.
* This payload is added to the data.pinpoint.jsonBody object of the notification.
*
*
* @param data
* The JSON data payload to use for the push notification, if the notification is a silent push
* notification. This payload is added to the data.pinpoint.jsonBody object of the notification.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder data(Map data);
/**
*
* The icon image name of the asset saved in your app.
*
*
* @param iconReference
* The icon image name of the asset saved in your app.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder iconReference(String iconReference);
/**
*
* The URL of the large icon image to display in the content view of the push notification.
*
*
* @param imageIconUrl
* The URL of the large icon image to display in the content view of the push notification.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder imageIconUrl(String imageIconUrl);
/**
*
* The URL of an image to display in the push notification.
*
*
* @param imageUrl
* The URL of an image to display in the push notification.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder imageUrl(String imageUrl);
/**
*
* The preferred authentication method, with valid values "KEY" or "TOKEN". If a value isn't provided then the
* DefaultAuthenticationMethod is used.
*
*
* @param preferredAuthenticationMethod
* The preferred authentication method, with valid values "KEY" or "TOKEN". If a value isn't provided
* then the DefaultAuthenticationMethod is used.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder preferredAuthenticationMethod(String preferredAuthenticationMethod);
/**
*
* para>normal – The notification might be delayed. Delivery is optimized for battery usage on the recipient's
* device. Use this value unless immediate delivery is required.
*
* /listitem>
*
* high – The notification is sent immediately and might wake a sleeping device.
*
* /para>
*
* Amazon Pinpoint specifies this value in the FCM priority parameter when it sends the notification message to
* FCM.
*
*
* The equivalent values for Apple Push Notification service (APNs) are 5, for normal, and 10, for high. If you
* specify an APNs value for this property, Amazon Pinpoint accepts and converts the value to the corresponding
* FCM value.
*
*
* @param priority
* para>normal – The notification might be delayed. Delivery is optimized for battery usage on the
* recipient's device. Use this value unless immediate delivery is required./listitem>
*
* high – The notification is sent immediately and might wake a sleeping device.
*
* /para>
*
* Amazon Pinpoint specifies this value in the FCM priority parameter when it sends the notification
* message to FCM.
*
*
* The equivalent values for Apple Push Notification service (APNs) are 5, for normal, and 10, for high.
* If you specify an APNs value for this property, Amazon Pinpoint accepts and converts the value to the
* corresponding FCM value.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder priority(String priority);
/**
*
* The raw, JSON-formatted string to use as the payload for the notification message. If specified, this value
* overrides all other content for the message.
*
*
* @param rawContent
* The raw, JSON-formatted string to use as the payload for the notification message. If specified, this
* value overrides all other content for the message.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder rawContent(String rawContent);
/**
*
* The package name of the application where registration tokens must match in order for the recipient to
* receive the message.
*
*
* @param restrictedPackageName
* The package name of the application where registration tokens must match in order for the recipient to
* receive the message.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder restrictedPackageName(String restrictedPackageName);
/**
*
* Specifies whether the notification is a silent push notification, which is a push notification that doesn't
* display on a recipient's device. Silent push notifications can be used for cases such as updating an app's
* configuration or supporting phone home functionality.
*
*
* @param silentPush
* Specifies whether the notification is a silent push notification, which is a push notification that
* doesn't display on a recipient's device. Silent push notifications can be used for cases such as
* updating an app's configuration or supporting phone home functionality.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder silentPush(Boolean silentPush);
/**
*
* The URL of the small icon image to display in the status bar and the content view of the push notification.
*
*
* @param smallImageIconUrl
* The URL of the small icon image to display in the status bar and the content view of the push
* notification.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder smallImageIconUrl(String smallImageIconUrl);
/**
*
* The sound to play when the recipient receives the push notification. You can use the default stream or
* specify the file name of a sound resource that's bundled in your app. On an Android platform, the sound file
* must reside in /res/raw/.
*
*
* @param sound
* The sound to play when the recipient receives the push notification. You can use the default stream or
* specify the file name of a sound resource that's bundled in your app. On an Android platform, the
* sound file must reside in /res/raw/.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder sound(String sound);
/**
*
* The default message variables to use in the notification message. You can override the default variables with
* individual address variables.
*
*
* @param substitutions
* The default message variables to use in the notification message. You can override the default
* variables with individual address variables.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder substitutions(Map> substitutions);
/**
*
* The amount of time, in seconds, that FCM should store and attempt to deliver the push notification, if the
* service is unable to deliver the notification the first time. If you don't specify this value, FCM defaults
* to the maximum value, which is 2,419,200 seconds (28 days).
*
*
* Amazon Pinpoint specifies this value in the FCM time_to_live parameter when it sends the notification message
* to FCM.
*
*
* @param timeToLive
* The amount of time, in seconds, that FCM should store and attempt to deliver the push notification, if
* the service is unable to deliver the notification the first time. If you don't specify this value, FCM
* defaults to the maximum value, which is 2,419,200 seconds (28 days).
*
* Amazon Pinpoint specifies this value in the FCM time_to_live parameter when it sends the notification
* message to FCM.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder timeToLive(Integer timeToLive);
/**
*
* The title to display above the notification message on the recipient's device.
*
*
* @param title
* The title to display above the notification message on the recipient's device.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder title(String title);
/**
*
* The URL to open in the recipient's default mobile browser, if a recipient taps the push notification and the
* value of the Action property is URL.
*
*
* @param url
* The URL to open in the recipient's default mobile browser, if a recipient taps the push notification
* and the value of the Action property is URL.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder url(String url);
}
static final class BuilderImpl implements Builder {
private String action;
private String body;
private String collapseKey;
private Map data = DefaultSdkAutoConstructMap.getInstance();
private String iconReference;
private String imageIconUrl;
private String imageUrl;
private String preferredAuthenticationMethod;
private String priority;
private String rawContent;
private String restrictedPackageName;
private Boolean silentPush;
private String smallImageIconUrl;
private String sound;
private Map> substitutions = DefaultSdkAutoConstructMap.getInstance();
private Integer timeToLive;
private String title;
private String url;
private BuilderImpl() {
}
private BuilderImpl(GCMMessage model) {
action(model.action);
body(model.body);
collapseKey(model.collapseKey);
data(model.data);
iconReference(model.iconReference);
imageIconUrl(model.imageIconUrl);
imageUrl(model.imageUrl);
preferredAuthenticationMethod(model.preferredAuthenticationMethod);
priority(model.priority);
rawContent(model.rawContent);
restrictedPackageName(model.restrictedPackageName);
silentPush(model.silentPush);
smallImageIconUrl(model.smallImageIconUrl);
sound(model.sound);
substitutions(model.substitutions);
timeToLive(model.timeToLive);
title(model.title);
url(model.url);
}
public final String getAction() {
return action;
}
public final void setAction(String action) {
this.action = action;
}
@Override
public final Builder action(String action) {
this.action = action;
return this;
}
@Override
public final Builder action(Action action) {
this.action(action == null ? null : action.toString());
return this;
}
public final String getBody() {
return body;
}
public final void setBody(String body) {
this.body = body;
}
@Override
public final Builder body(String body) {
this.body = body;
return this;
}
public final String getCollapseKey() {
return collapseKey;
}
public final void setCollapseKey(String collapseKey) {
this.collapseKey = collapseKey;
}
@Override
public final Builder collapseKey(String collapseKey) {
this.collapseKey = collapseKey;
return this;
}
public final Map getData() {
if (data instanceof SdkAutoConstructMap) {
return null;
}
return data;
}
public final void setData(Map data) {
this.data = MapOf__stringCopier.copy(data);
}
@Override
public final Builder data(Map data) {
this.data = MapOf__stringCopier.copy(data);
return this;
}
public final String getIconReference() {
return iconReference;
}
public final void setIconReference(String iconReference) {
this.iconReference = iconReference;
}
@Override
public final Builder iconReference(String iconReference) {
this.iconReference = iconReference;
return this;
}
public final String getImageIconUrl() {
return imageIconUrl;
}
public final void setImageIconUrl(String imageIconUrl) {
this.imageIconUrl = imageIconUrl;
}
@Override
public final Builder imageIconUrl(String imageIconUrl) {
this.imageIconUrl = imageIconUrl;
return this;
}
public final String getImageUrl() {
return imageUrl;
}
public final void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
@Override
public final Builder imageUrl(String imageUrl) {
this.imageUrl = imageUrl;
return this;
}
public final String getPreferredAuthenticationMethod() {
return preferredAuthenticationMethod;
}
public final void setPreferredAuthenticationMethod(String preferredAuthenticationMethod) {
this.preferredAuthenticationMethod = preferredAuthenticationMethod;
}
@Override
public final Builder preferredAuthenticationMethod(String preferredAuthenticationMethod) {
this.preferredAuthenticationMethod = preferredAuthenticationMethod;
return this;
}
public final String getPriority() {
return priority;
}
public final void setPriority(String priority) {
this.priority = priority;
}
@Override
public final Builder priority(String priority) {
this.priority = priority;
return this;
}
public final String getRawContent() {
return rawContent;
}
public final void setRawContent(String rawContent) {
this.rawContent = rawContent;
}
@Override
public final Builder rawContent(String rawContent) {
this.rawContent = rawContent;
return this;
}
public final String getRestrictedPackageName() {
return restrictedPackageName;
}
public final void setRestrictedPackageName(String restrictedPackageName) {
this.restrictedPackageName = restrictedPackageName;
}
@Override
public final Builder restrictedPackageName(String restrictedPackageName) {
this.restrictedPackageName = restrictedPackageName;
return this;
}
public final Boolean getSilentPush() {
return silentPush;
}
public final void setSilentPush(Boolean silentPush) {
this.silentPush = silentPush;
}
@Override
public final Builder silentPush(Boolean silentPush) {
this.silentPush = silentPush;
return this;
}
public final String getSmallImageIconUrl() {
return smallImageIconUrl;
}
public final void setSmallImageIconUrl(String smallImageIconUrl) {
this.smallImageIconUrl = smallImageIconUrl;
}
@Override
public final Builder smallImageIconUrl(String smallImageIconUrl) {
this.smallImageIconUrl = smallImageIconUrl;
return this;
}
public final String getSound() {
return sound;
}
public final void setSound(String sound) {
this.sound = sound;
}
@Override
public final Builder sound(String sound) {
this.sound = sound;
return this;
}
public final Map> getSubstitutions() {
if (substitutions instanceof SdkAutoConstructMap) {
return null;
}
return substitutions;
}
public final void setSubstitutions(Map> substitutions) {
this.substitutions = MapOfListOf__stringCopier.copy(substitutions);
}
@Override
public final Builder substitutions(Map> substitutions) {
this.substitutions = MapOfListOf__stringCopier.copy(substitutions);
return this;
}
public final Integer getTimeToLive() {
return timeToLive;
}
public final void setTimeToLive(Integer timeToLive) {
this.timeToLive = timeToLive;
}
@Override
public final Builder timeToLive(Integer timeToLive) {
this.timeToLive = timeToLive;
return this;
}
public final String getTitle() {
return title;
}
public final void setTitle(String title) {
this.title = title;
}
@Override
public final Builder title(String title) {
this.title = title;
return this;
}
public final String getUrl() {
return url;
}
public final void setUrl(String url) {
this.url = url;
}
@Override
public final Builder url(String url) {
this.url = url;
return this;
}
@Override
public GCMMessage build() {
return new GCMMessage(this);
}
@Override
public List> sdkFields() {
return SDK_FIELDS;
}
}
}