Skip to main content

Notifications

Jest allows developers to schedule notification messages to re-engage players and drive retention. Using the Jest SDK, you can customize a notification's text, call to action (CTA), and image.

The Jest platform handles messaging infrastructure and delivery, subsidizing 100% of messaging costs and abstracting away operational complexity. This includes managing regulated messaging requirements such as consent collection, required disclosures, and robust opt-out mechanisms.

For guidance on designing effective notification strategies, copywriting, and scheduling patterns, see Notifications best practices.

Notification channels

There are two notification delivery channels on Jest: the platform Library tab and SMS / RCS text messages.

Library tab

When your game is Approved and set to Public, all scheduled notifications appear in the Jest platform Library tab.

SMS / RCS messages

Jest may also deliver notifications via SMS or RCS. Channel selection is based on availability and the user's messaging settings.

Library notification
Library notification
SMS notification
SMS notification
RCS notification
RCS notification

Notification mechanics

Jest games use the Jest SDK notification methods to schedule notifications. At the scheduled time, notifications are shown in the Library tab on Jest.com.

Once per day, Jest selects at most one scheduled notification per user across all games on the platform to deliver to the user's messaging inbox. The platform selects the notification most likely to convert, taking into account the priority provided by the SDK. Delivery time is determined per user based on the scheduled time defined by the game and observed engagement patterns, while respecting compliance requirements. Messages are delivered via SMS or RCS, depending on availability and user preferences.

Notifications API

Here is some example code to demonstrate scheduling notifications on the Jest gaming platform.

note

The Jest platform will only send notifications to registered users. You can check a user's status with Player.isRegistered and prompt players to log in via the SDK.

RichNotifications.ScheduleNotification

To schedule a notification, use this method with the Options class. The method throws for local shape validation errors, then returns a JestSDKTask for JavaScript bridge dispatch. Do not treat task completion as confirmation that the platform will eventually deliver the notification.

Notifications can only be scheduled up to 7 days ahead. scheduledInDays must be between 1 and 7 days (inclusive), and date must be within the next 7 days. Unity validates the required shape of the request, while the JavaScript SDK and server enforce platform policy limits.

Notifications can be scheduled in one of two ways:

  • Exact scheduling using date, which ensures the notification becomes eligible for delivery after the specified date and time. Note that delivery is not guaranteed at the exact scheduled moment, as messaging must comply with mandated quiet hours and other delivery constraints.
  • Fuzzy scheduling using scheduledInDays, which schedules a notification 1 to 7 days from now and allows the platform to determine an appropriate delivery time for each user.

Exact scheduling is suited for fixed events or deadlines where timing matters. Fuzzy scheduling is intended for notifications that are relevant within a given day, allowing the platform to determine an appropriate delivery time for each user.

var notifications = JestSDK.Instance.RichNotifications;

// Schedule for specific date/time (exact scheduling)
await notifications.ScheduleNotification(new RichNotifications.Options
{
body = "Your energy is full!",
ctaText = "Play Now",
notificationPriority = RichNotifications.Severity.High,
identifier = "energy_full",
date = DateTime.Now.AddHours(4)
});

// Schedule using fuzzy timing (1-7 days from now)
await notifications.ScheduleNotification(new RichNotifications.Options
{
body = "We miss you! Come back for a special reward.",
ctaText = "Claim Reward",
notificationPriority = RichNotifications.Severity.Medium,
identifier = "comeback_day3",
scheduledInDays = 3
});

Options properties

PropertyTypeRequiredDescription
bodystringYesThe main text of the notification. Must be 1-2000 characters.
ctaTextstringYesCall-to-action button text. Must be 1-50 characters.
identifierstringYesUnique identifier for rescheduling or unscheduling.
dateDateTime*Exact date/time to schedule. Must be within 7 days. Mutually exclusive with scheduledInDays.
scheduledInDaysint?*Days from now to schedule (1-7). Mutually exclusive with date.
titlestringNoOptional title shown above the body. Must be at most 200 characters.
notificationPrioritySeverityNoPriority level: Low, Medium, High, or Critical. Default is Low.
assetReferencestringNoReference to a pre-approved asset (image or video). Preferred over imageReference.
imageReferencestringNoDeprecated. Use assetReference instead. Still honored as a fallback.
entryPayloadDataDictionary<string, object>NoCustom data payload attached to the notification.

* Either date or scheduledInDays must be provided, but not both.

Priority levels

public enum Severity
{
Low, // Low priority notification
Medium, // Medium priority notification
High, // High priority notification
Critical // Critical priority notification
}

Attaching assets

To attach an asset (image or video) to your notification, first upload and submit it for approval in the Manage images section of the Developer Console. Only approved assets can be referenced in notifications.

await notifications.ScheduleNotification(new RichNotifications.Options
{
body = "Your daily reward is ready!",
ctaText = "Collect",
notificationPriority = RichNotifications.Severity.Medium,
identifier = "daily_reward",
scheduledInDays = 1,
assetReference = "daily_reward_banner"
});

If an assetReference is invalid, unapproved, or archived, the notification will use your game's Hero image as a fallback and log an error in the Events page. If assetReference is not set, it will also fall back to the Hero image.

note

imageReference is deprecated in favor of assetReference. Existing code using imageReference continues to work — the SDK uses assetReference when both are set.

Attaching entry payload

You can attach custom data to notifications that will be passed to the game when the player opens the notification:

await notifications.ScheduleNotification(new RichNotifications.Options
{
body = "Your farm needs attention!",
ctaText = "Visit Farm",
notificationPriority = RichNotifications.Severity.High,
identifier = "farm_reminder",
scheduledInDays = 1,
entryPayloadData = new Dictionary<string, object>
{
{ "notification_type", "farm_reminder" },
{ "day", 1 }
}
});

RichNotifications.UnscheduleNotification

To unschedule an already scheduled notification, use this method with the notification's unique identifier. The method throws for local validation errors, then returns a JestSDKTask for JavaScript bridge dispatch.

var notifications = JestSDK.Instance.RichNotifications;

await notifications.UnscheduleNotification("energy_full");

If you schedule a notification with an existing identifier, the original notification will be unscheduled and replaced with the new one. You don't need to unschedule the original notification first.

Moderation and delivery constraints

Notifications are subject to platform review and moderation. Content that violates the Acceptable Use Policy may be blocked from delivery. For more details, see Review and moderation.