urbanairship-react-native
Version:
Airship plugin for React Native apps.
1,430 lines (1,292 loc) • 37.4 kB
text/typescript
/* Copyright Airship and Contributors */
'use strict'
import { NativeModules, Platform } from "react-native"
import { CustomEvent } from "./CustomEvent";
import { TagGroupEditor, TagGroupOperation } from "./TagGroupEditor";
import { AttributeEditor, AttributeOperation } from "./AttributeEditor";
import { UAEventEmitter } from "./UAEventEmitter";
import { SubscriptionListEditor, SubscriptionListUpdate} from "./SubscriptionListEditor";
import { ScopedSubscriptionListEditor, ScopedSubscriptionListUpdate} from "./ScopedSubscriptionListEditor";
import { JsonObject, JsonValue } from "./Json";
import { SubscriptionLists, SubscriptionListType } from "./SubscriptionLists";
/**
* @hidden
*/
const UrbanAirshipModule = NativeModules.UrbanAirshipReactModule
/**
* @hidden
*/
const EventEmitter = new UAEventEmitter()
/**
* Enum of internal event type names used by UAEventEmitter
* @hidden
*/
enum InternalEventType {
Registration = "com.urbanairship.registration",
NotificationResponse = "com.urbanairship.notification_response",
PushReceived = "com.urbanairship.push_received",
DeepLink = "com.urbanairship.deep_link",
InboxUpdated = "com.urbanairship.inbox_updated",
NotificationOptInStatus = "com.urbanairship.notification_opt_in_status",
ShowInbox = "com.urbanairship.show_inbox",
ConversationUpdated = "com.urbanairship.conversation_updated",
OpenChat = "com.urbanairship.open_chat",
OpenPreferenceCenter = "com.urbanairship.open_preference_center"
}
/**
* Enum of event type names.
*/
export enum EventType {
/**
* Notification response event. On Android, this event will be dispatched
* in the background for background notifications actions.
*/
NotificationResponse = "notificationResponse",
/**
* Push received event. On Android, this event will only be dispatched
* in the background if the app is able to start a service or by sending a
* high priority FCM message.
*/
PushReceived = "pushReceived",
/**
* Register event.
*/
Register = "register",
/**
* Registration event.
*/
Registration = "registration",
/**
* Deep link event.
*/
DeepLink = "deepLink",
/**
* Notification opt-in status event.
*/
NotificationOptInStatus = "notificationOptInStatus",
/**
* Inbox updated event.
*/
InboxUpdated = "inboxUpdated",
/**
* Show inbox event.
*/
ShowInbox = "showInbox",
/**
* Chat conversation updated.
*/
ConversationUpdated = "conversationUpdated",
/**
* Open chat event.
*/
OpenChat = "openChat",
/**
* Open preference center event.
*/
OpenPreferenceCenter = "openPreferenceCenter"
}
/**
* Inbox message object.
*/
export interface InboxMessage {
/**
* The message ID. Needed to display, mark as read, or delete the message.
*/
id: string
/**
* The message title.
*/
title: string
/**
* The message sent date in milliseconds.
*/
sentDate: number
/**
* Optional - The icon url for the message.
*/
listIconUrl: string
/**
* The unread / read status of the message.
*/
isRead: boolean
/**
* The deleted status of the message.
*/
isDeleted: boolean
/**
* String to String map of any message extras.
*/
extras: Record<string, string>
}
/**
* Event fired when a push is received.
*/
export interface PushReceivedEvent {
/**
* The alert.
*/
alert?: string
/**
* The title.
*/
title?: string
/**
* The notification ID.
*/
notificationId: string
/**
* The notification extras.
*/
extras: JsonObject
}
/**
* Event fired when the user initiates a notification response.
*/
export interface NotificationResponseEvent {
/**
* The push notification.
*/
notification: PushReceivedEvent
/**
* The action button ID, if available.
*/
actionId?: string
/**
* Indicates whether the response was a foreground action.
* This value is always if the user taps the main notification,
* otherwise it is defined by the notification action button.
*/
isForeground: boolean
}
/**
* Airship config environment
*/
export interface ConfigEnvironment {
/**
* App key.
*/
appKey: string
/**
* App secret.
*/
appSecret: string
/**
* Optional log level.
*/
logLevel?: LogLevel
}
/**
* Possible sites.
*/
export type Site = "us" | "eu";
/**
* Log levels.
*/
export type LogLevel = "verbose" | "debug" | "info" | "warning" | "error" | "none";
/**
* Airship config
*/
export interface AirshipConfig {
/**
* Default environment.
*/
default?: ConfigEnvironment,
/**
* Development environment. Overrides default environment if inProduction is false.
*/
development?: ConfigEnvironment,
/**
* Production environment. Overrides default environment if inProduction is true.
*/
production?: ConfigEnvironment,
/**
* Cloud site.
*/
site?: Site
/**
* Switches the environment from development or production. If the value is not
* set, Airship will determine the value at runtime.
*/
inProduction?: boolean,
/**
* URL allow list.
*/
urlAllowList?: string[],
/**
* URL allow list for open URL scope.
*/
urlAllowListScopeOpenUrl?: string[],
/**
* URL allow list for JS bridge injection.
*/
urlAllowListScopeJavaScriptInterface?: string[],
/**
* Enables channel capture feature.
* This config is enabled by default.
*/
isChannelCaptureEnabled?: boolean
/**
* Whether to suppress console error messages about missing allow list entries during takeOff.
* This config is disabled by default.
*/
suppressAllowListError?: boolean
/**
* Enables delayed channel creation.
*/
isChannelCreationDelayEnabled?: boolean,
/**
* Initial config URL for custom Airship domains. The URL
* should also be added to the urlAllowList.
*/
initialConfigUrl?: String,
/**
* Enables/disables requiring initial remote config fetch before
* creating a channel.
* @deprecated This config is enabled by default.
*/
requireInitialRemoteConfigEnabled?: boolean,
/**
* Enabled features. Defaults to all.
*/
enabledFeatures?: Feature[],
/**
* Chat config. Only needed with the chat module.
*/
chat?:{
webSocketUrl: string,
url: string
}
/**
* iOS config.
*/
ios?: {
/**
* itunesId for rate app and app store deep links.
*/
itunesId?: string
},
/**
* Android config.
*/
android?: {
/**
* App store URI
*/
appStoreUri?: string,
/**
* Fcm app name if using multiple FCM projects.
*/
fcmFirebaseAppName?: string,
/**
* Notification config.
*/
notificationConfig?: NotificationConfigAndroid
}
}
/**
* Subscription Scope types.
*/
export enum SubscriptionScope {
App = "app",
Web = "web",
Sms = "sms",
Email = "email"
}
/**
* iOS options
*/
export namespace iOS {
/**
* Enum of notification options. iOS only.
*/
export enum NotificationOption {
/**
* Alerts.
*/
Alert = "alert",
/**
* Sounds.
*/
Sound = "sound",
/**
* Badges.
*/
Badge = "badge",
/**
* Car play.
*/
CarPlay = "carPlay",
/**
* Critical Alert.
*/
CriticalAlert = "criticalAlert",
/**
* Provides app notification settings.
*/
ProvidesAppNotificationSettings = "providesAppNotificationSettings",
/**
* Provisional.
*/
Provisional = "provisional"
}
/**
* Enum of foreground notification options.
*/
export enum ForegroundPresentationOption {
/**
* Alerts.
*/
Alert = "alert",
/**
* Sounds.
*/
Sound = "sound",
/**
* Badges.
*/
Badge = "badge"
}
/**
* Enum of authorized notification settings.
*/
export enum AuthorizedNotificationSetting {
/**
* Alerts.
*/
Alert = "alert",
/**
* Sounds.
*/
Sound = "sound",
/**
* Badges.
*/
Badge = "badge",
/**
* CarPlay.
*/
CarPlay = "carPlay",
/**
* Lock screen.
*/
LockScreen = "lockScreen",
/**
* Notification center.
*/
NotificationCenter = "notificationCenter",
/**
* Critical alert.
*/
CriticalAlert = "criticalAlert",
/**
* Announcement.
*/
Announcement = "announcement",
/**
* Scheduled delivery.
*/
ScheduledDelivery = "scheduledDelivery",
/**
* Time sensitive.
*/
TimeSensitive = "timeSensitive"
}
/**
* Enum of authorized status.
*/
export enum AuthorizedNotificationStatus {
/**
* Not determined.
*/
NotDetermined = "notDetermined",
/**
* Denied.
*/
Denied = "denied",
/**
* Authorized.
*/
Authorized = "authorized",
/**
* Provisional.
*/
Provisional = "provisional",
/**
* Ephemeral.
*/
Ephemeral = "ephemeral"
}
}
export interface NotificationStatus {
/**
* If airship is opted in for push notifications are not.
*/
airshipOptIn: boolean
/**
* If notifications are enabled on Airship or not.
*/
airshipEnabled: boolean
/**
* If notifications are enabled in the app settings or not.
*/
systemEnabled: boolean
/**
* iOS status.
*/
ios?: {
/**
* Authorized settings.
*/
authorizedSettings: [iOS.AuthorizedNotificationSetting],
/**
* Authorized status.
*/
authorizedStatus: iOS.AuthorizedNotificationStatus
}
}
/**
* Enum of notification options. iOS only.
* @deprecated This enum is poorly named and refers to foreground presentation
* options instead of notification options. Use iOS.ForegroundPresentationOption instead.
*/
export type NotificationOptionsIOS = iOS.ForegroundPresentationOption
/**
* A map of notification options. iOS only.
* @deprecated Not used.
*/
export type NotificationOptionsMapIOS = { [option in iOS.ForegroundPresentationOption]: boolean }
/**
* A map of foreground notification options. iOS only.
* @deprecated Use iOS.ForegroundPresentationOption[] instead of a map.
*/
export type ForegroundNotificationOptionsIOS = { [option in iOS.ForegroundPresentationOption]: boolean | null | undefined }
/**
* Enum of authorized notification settings. iOS only.
* @deprecated Use iOS.AuthorizedNotificationSetting instead.
*/
export type AuthorizedNotificationSettingsIOS = iOS.AuthorizedNotificationSetting
/**
* A map of authorized notification settings.
* @deprecated Use [iOS.AuthorizedNotificationSetting] instead.
*/
export type iOSAuthorizedNotificationSettingsMap = { [setting in iOS.AuthorizedNotificationSetting]: boolean }
/**
* Event fired when the notification opt-in status changes.
*/
export interface NotificationOptInStatusEvent {
/**
* Whether the user is opted in to notifications.
*/
optIn: boolean
/**
* The authorized notification settings map. iOS only.
* @deprecated Use authorizedSettings instead.
*/
authorizedNotificationSettings?: [AuthorizedNotificationSettingsIOS]
/**
* The authorized notification settings. iOS only.
*/
authorizedSettings?: [iOS.AuthorizedNotificationSetting]
}
/**
* Event fired when the inbox is updated.
*/
export interface InboxUpdatedEvent {
/**
* The unread message count.
*/
messageUnreadCount: number
/**
* The total message count.
*/
messageCount: number
}
/**
* Event fired when the message center requests the inbox to be displayed.
*/
export interface ShowInboxEvent {
/**
* The message ID, if available.
*/
messageId?: string
}
/**
* Event fired when a deep link is opened.
*/
export interface DeepLinkEvent {
/**
* The deep link string.
*/
deepLink: string
}
/**
* Event fired when a preference center requests to be displayed.
*/
export interface OpenPreferenceCenterEvent {
/**
* The preference center Id.
*/
preferenceCenterId: string
}
/**
* A listener subscription.
*/
export class Subscription {
onRemove: () => void
constructor(onRemove: () => void) {
this.onRemove = onRemove
}
/**
* Removes the listener.
*/
remove(): void {
this.onRemove()
}
}
/**
* Event fired when a channel registration occurs.
*/
export interface RegistrationEvent {
/**
* The channel ID.
*/
channelId: string
/**
* The registration token. The registration token might be undefined
* if registration is currently in progress, if the app is not setup properly
* for remote notifications, if running on an iOS simulator, or if running on
* an Android device that has an outdated or missing version of Google Play Services.
*/
registrationToken?: string
}
/**
* Converts between public and internal event types.
* @hidden
*/
function convertEventEnum(type: EventType): string {
if (type === EventType.NotificationResponse) {
return InternalEventType.NotificationResponse
} else if (type === EventType.PushReceived) {
return InternalEventType.PushReceived
} else if (type === EventType.Register || type === EventType.Registration) {
return InternalEventType.Registration
} else if (type == EventType.DeepLink) {
return InternalEventType.DeepLink
} else if (type == EventType.NotificationOptInStatus) {
return InternalEventType.NotificationOptInStatus
} else if (type == EventType.InboxUpdated) {
return InternalEventType.InboxUpdated
} else if (type == EventType.ShowInbox) {
return InternalEventType.ShowInbox
} else if (type == EventType.ConversationUpdated) {
return InternalEventType.ConversationUpdated
} else if (type == EventType.OpenChat) {
return InternalEventType.OpenChat
} else if (type == EventType.OpenPreferenceCenter) {
return InternalEventType.OpenPreferenceCenter
}
throw new Error("Invalid event name: " + type)
}
function convertFeatureEnum(feature: String): Feature {
if (feature == "FEATURE_NONE") {
return Feature.FEATURE_NONE
} else if (feature == "FEATURE_IN_APP_AUTOMATION") {
return Feature.FEATURE_IN_APP_AUTOMATION
} else if (feature == "FEATURE_MESSAGE_CENTER") {
return Feature.FEATURE_MESSAGE_CENTER
} else if (feature == "FEATURE_PUSH") {
return Feature.FEATURE_PUSH
} else if (feature == "FEATURE_CHAT") {
return Feature.FEATURE_CHAT
} else if (feature == "FEATURE_ANALYTICS") {
return Feature.FEATURE_ANALYTICS
} else if (feature == "FEATURE_TAGS_AND_ATTRIBUTES") {
return Feature.FEATURE_TAGS_AND_ATTRIBUTES
} else if (feature == "FEATURE_CONTACTS") {
return Feature.FEATURE_CONTACTS
} else if (feature == "FEATURE_LOCATION") {
return Feature.FEATURE_LOCATION
} else if (feature == "FEATURE_ALL") {
return Feature.FEATURE_ALL
}
throw new Error("Invalid feature name: " + feature)
}
/**
* Android notification config.
*/
export interface NotificationConfigAndroid {
/**
* The icon resource name.
*/
icon?: string
/**
* The large icon resource name.
*/
largeIcon?: string
/**
* The default android notification channel ID.
*/
defaultChannelId?: string
/**
* The accent color. Must be a hex value #AARRGGBB.
*/
accentColor?: string
}
/**
* Enum of authorized Features.
*/
export enum Feature {
FEATURE_NONE = "FEATURE_NONE",
FEATURE_IN_APP_AUTOMATION = "FEATURE_IN_APP_AUTOMATION",
FEATURE_MESSAGE_CENTER = "FEATURE_MESSAGE_CENTER",
FEATURE_PUSH = "FEATURE_PUSH",
FEATURE_CHAT = "FEATURE_CHAT",
FEATURE_ANALYTICS = "FEATURE_ANALYTICS",
FEATURE_TAGS_AND_ATTRIBUTES = "FEATURE_TAGS_AND_ATTRIBUTES",
FEATURE_CONTACTS = "FEATURE_CONTACTS",
FEATURE_LOCATION = "FEATURE_LOCATION",
FEATURE_ALL = "FEATURE_ALL"
}
/**
* The main Airship API.
*/
export class UrbanAirship {
/**
* Calls takeOff. If Airship is already initialized the new config will be applied on next app init.
*
* @param config The airship config.
* @return A promise with the result. The result will be true if Airship is initialized, otherwise false.
*/
static takeOff(config: AirshipConfig): Promise<boolean> {
return UrbanAirshipModule.takeOff(config)
}
/**
* Checks if Airship is initialized.
*
* @return A promise with the result. The result will be true if Airship is initialized, otherwise false.
*/
static isFlying(): Promise<boolean> {
return UrbanAirshipModule.isFlying()
}
/**
* Sets the Android notification config. Values not set will fallback to any values set in the airship config options.
*
* @param config The notification config object.
*/
static setAndroidNotificationConfig(config: NotificationConfigAndroid) {
UrbanAirshipModule.setAndroidNotificationConfig(config)
}
/**
* Sets user notifications enabled. The first time user notifications are enabled
* on iOS, it will prompt the user for notification permissions.
*
* @param enabled true to enable notifications, false to disable.
*/
static setUserNotificationsEnabled(enabled: boolean) {
UrbanAirshipModule.setUserNotificationsEnabled(enabled)
}
/**
* Checks if user notifications are enabled or not.
*
* @return A promise with the result.
*/
static isUserNotificationsEnabled(): Promise<boolean> {
return UrbanAirshipModule.isUserNotificationsEnabled()
}
/**
* Sets the SDK features that will be enabled. The rest of the features will be disabled.
*
* If all features are disabled the SDK will not make any network requests or collect data.
*
* @note All features are enabled by default.
* @param feature An array of `Features` to enable.
* @return A promise that returns true if the enablement was authorized.
*/
static setEnabledFeatures(features: Feature[]): Promise<boolean> {
return UrbanAirshipModule.setEnabledFeatures(features)
}
/**
* Gets a Feature array with the enabled features.
*
* @return A promise that returns the enabled features as a Feature array.
*/
static getEnabledFeatures(): Promise<Feature[]> {
return new Promise((resolve, reject) => {
UrbanAirshipModule.getEnabledFeatures().then((features: String[]) => {
var convertedFeatures: Feature[] = new Array()
for (const feature of features){
convertedFeatures.push(convertFeatureEnum(feature))
}
resolve(convertedFeatures)
}), (error: Error) => {
reject(error)
}
})
}
/**
* Enables one or many features.
*
* @param feature An array of `Feature` to enable.
* @return A promise that returns true if the enablement was authorized.
*/
static enableFeature(features: Feature[]): Promise<boolean> {
return UrbanAirshipModule.enableFeature(features)
}
/**
* Disables one or many features.
*
* @param feature An array of `Feature` to disable.
* @return A promise that returns true if the disablement was authorized.
*/
static disableFeature(features: Feature[]): Promise<boolean> {
return UrbanAirshipModule.disableFeature(features)
}
/**
* Checks if a given feature is enabled or not.
*
* @return A promise that returns true if the features are enabled, false otherwise.
*/
static isFeatureEnabled(features: Feature[]): Promise<boolean> {
return UrbanAirshipModule.isFeatureEnabled(features)
}
/**
* Enables user notifications.
*
* @return A promise that returns true if enablement was authorized
* or false if enablement was rejected
*/
static enableUserPushNotifications(): Promise<boolean> {
return UrbanAirshipModule.enableUserPushNotifications()
}
/**
* Enables channel creation if `channelCreationDelayEnabled` was
* enabled in the config.
*/
static enableChannelCreation() {
UrbanAirshipModule.enableChannelCreation()
}
/**
* Gets the count of Unread messages in the inbox.
*/
static getUnreadMessageCount(): Promise<number> {
return UrbanAirshipModule.getUnreadMessagesCount();
}
/**
* Checks if app notifications are enabled or not. Its possible to have `userNotificationsEnabled`
* but app notifications being disabled if the user opted out of notifications.
*
* @return A promise with the result.
* @deprecated Use getNotificationStatus() instead.
*/
static isUserNotificationsOptedIn(): Promise<boolean> {
return UrbanAirshipModule.isUserNotificationsOptedIn()
}
/**
* Checks if app notifications are enabled at a system level or not. Its possible to have `userNotificationsEnabled`
* but app notifications being disabled if the user opted out of notifications.
*
* @return A promise with the result.
* @deprecated Use getNotificationStatus() instead.
*/
static isSystemNotificationsEnabledForApp(): Promise<boolean> {
return UrbanAirshipModule.isSystemNotificationsEnabledForApp()
}
/**
* Gets the notification status for the app.
*
* @return A promise with the result.
*/
static getNotificationStatus(): Promise<NotificationStatus> {
return UrbanAirshipModule.getNotificationStatus()
}
/**
* Gets the status of the specified Notification Channel.
* This method is only supported on Android. iOS will throw an error.
*
* @param channel The channel's name.
* @return A promise with the result.
*/
static getNotificationChannelStatus(channel: string): Promise<string> {
if (Platform.OS != 'android') {
throw new Error("This method is only supported on Android devices.")
}
return UrbanAirshipModule.getNotificationChannelStatus(channel)
}
/**
* Sets the named user.
*
* @param namedUser The named user string, or null/undefined to clear the named user.
*/
static setNamedUser(namedUser: string | null | undefined) {
UrbanAirshipModule.setNamedUser(namedUser)
}
/**
* Gets the named user.
*
* @return A promise with the result.
*/
static getNamedUser(): Promise<string | null | undefined> {
return UrbanAirshipModule.getNamedUser()
}
/**
* Adds a channel tag.
*
* @param tag A channel tag.
*/
static addTag(tag: string) {
UrbanAirshipModule.addTag(tag)
}
/**
* Removes a channel tag.
*
* @param tag A channel tag.
*/
static removeTag(tag: string) {
UrbanAirshipModule.removeTag(tag)
}
/**
* Gets the channel tags.
*
* @return A promise with the result.
*/
static getTags(): Promise<string[]> {
return UrbanAirshipModule.getTags()
}
/**
* Gets the subscription lists.
*
* @param types The types of subscription lists. Values: `channel`, `contact` (default: [`channel`]).
* @return A promise with the result.
*/
static getSubscriptionLists(types?: [...SubscriptionListType[]]): Promise<SubscriptionLists> {
return UrbanAirshipModule.getSubscriptionLists(types ?? ['channel']);
}
/**
* Creates an editor to modify the named user tag groups.
*
* @return A tag group editor instance.
* @deprecated Replaced by {@link editContactTagGroups()}.
*/
static editNamedUserTagGroups(): TagGroupEditor {
return this.editContactTagGroups()
}
/**
* Creates an editor to modify the contact tag groups.
*
* @return A tag group editor instance.
*/
static editContactTagGroups(): TagGroupEditor {
return new TagGroupEditor((operations: TagGroupOperation[]) => {
UrbanAirshipModule.editContactTagGroups(operations)
})
}
/**
* Creates an editor to modify the channel tag groups.
*
* @return A tag group editor instance.
*/
static editChannelTagGroups(): TagGroupEditor {
return new TagGroupEditor((operations: TagGroupOperation[]) => {
UrbanAirshipModule.editChannelTagGroups(operations)
})
}
/**
* Creates an editor to modify the channel attributes.
*
* @return An attribute editor instance.
*/
static editChannelAttributes(): AttributeEditor {
return new AttributeEditor((operations: AttributeOperation[]) => {
UrbanAirshipModule.editChannelAttributes(operations)
})
}
/**
* Creates an editor to modify the named user attributes.
*
* @return An attribute editor instance.
* @deprecated Replaced by {@link editContactAttributes()}.
*/
static editNamedUserAttributes(): AttributeEditor {
return this.editContactAttributes()
}
/**
* Creates an editor to modify the contact attributes.
*
* @return An attribute editor instance.
*/
static editContactAttributes(): AttributeEditor {
return new AttributeEditor((operations: AttributeOperation[]) => {
UrbanAirshipModule.editContactAttributes(operations)
})
}
/**
* Edit the subscription List.
*
* @return A promise with the result.
* @deprecated Replaced by {@link editChannelSubscriptionLists()}.
*/
static editSubscriptionLists(): SubscriptionListEditor {
return this.editChannelSubscriptionLists()
}
/**
* Edit the subscription lists associated with the current Channel.
*
* @return A promise with the result.
*/
static editChannelSubscriptionLists(): SubscriptionListEditor {
return new SubscriptionListEditor((subscriptionListUpdates: SubscriptionListUpdate[]) => {
UrbanAirshipModule.editChannelSubscriptionLists(subscriptionListUpdates)
})
}
/**
* Edit the subscription lists associated with the current Contact.
*
* @return A promise with the result.
*/
static editContactSubscriptionLists(): ScopedSubscriptionListEditor {
return new ScopedSubscriptionListEditor((subscriptionListUpdates: ScopedSubscriptionListUpdate[]) => {
UrbanAirshipModule.editContactSubscriptionLists(subscriptionListUpdates)
})
}
/**
* Enables or disables analytics.
*
* Disabling analytics will delete any locally stored events
* and prevent any events from uploading. Features that depend on analytics being
* enabled may not work properly if it's disabled (reports, region triggers,
* location segmentation, push to local time).
*
* @param enabled true to enable notifications, false to disable.
*/
static setAnalyticsEnabled(enabled: boolean) {
UrbanAirshipModule.setAnalyticsEnabled(enabled)
}
/**
* Checks if analytics is enabled or not.
*
* @return A promise with the result.
*/
static isAnalyticsEnabled(): Promise<boolean> {
return UrbanAirshipModule.isAnalyticsEnabled()
}
/**
* Initiates screen tracking for a specific app screen, must be called once per tracked screen.
*
* @param screen The screen's string identifier
*/
static trackScreen(screen: string) {
UrbanAirshipModule.trackScreen(screen)
}
/**
* Gets the channel ID.
*
* @return A promise with the result.
*/
static getChannelId(): Promise<string | null | undefined> {
return UrbanAirshipModule.getChannelId()
}
/**
* Gets the registration token.
*
* @return A promise with the result. The registration token might be undefined
* if registration is currently in progress, if the app is not setup properly
* for remote notifications, if running on an iOS simulator, or if running on
* an Android device that has an outdated or missing version of Google Play Services.
*/
static getRegistrationToken(): Promise<string | null | undefined> {
return UrbanAirshipModule.getRegistrationToken()
}
/**
* Associates an identifier for the Connect data stream.
*
* @param key The identifier's key.
* @param id The identifier's id, or null/undefined to clear.
*/
static associateIdentifier(key: string, id?: string) {
UrbanAirshipModule.associateIdentifier(key, id)
}
/**
* Adds a custom event.
*
* @param event The custom event.
* @return A promise that returns null if resolved, or an Error if the
* custom event is rejected.
*/
static addCustomEvent(event: CustomEvent): Promise<null | Error> {
const actionArg = {
event_name: event._name,
event_value: event._value,
transaction_id: event._transactionId,
properties: event._properties
}
return new Promise((resolve, reject) => {
UrbanAirshipModule.runAction("add_custom_event_action", actionArg).then(() => {
resolve(null)
}, (error: Error) => {
reject(error)
})
})
}
/**
* Runs an Urban Airship action.
*
* @param name The name of the action.
* @param value The action's value.
* @return A promise that returns the action result if the action
* successfully runs, or the Error if the action was unable to be run.
*/
static runAction(name: string, value?: JsonValue): Promise<JsonValue | Error> {
return UrbanAirshipModule.runAction(name, value)
}
/**
* Sets the foreground presentation options for iOS.
* This method is only supported on iOS. Android will no-op.
*
* @param options The array of foreground presentation options.
*/
static setForegroundPresentationOptions(options: ForegroundNotificationOptionsIOS | [iOS.ForegroundPresentationOption]) {
if (Platform.OS == 'ios') {
if (Array.isArray(options)) {
return UrbanAirshipModule.setForegroundPresentationOptions(options)
} else {
var converted = []
if (options.alert) {
converted.push(iOS.ForegroundPresentationOption.Alert)
}
if (options.badge) {
converted.push(iOS.ForegroundPresentationOption.Badge)
}
if (options.sound) {
converted.push(iOS.ForegroundPresentationOption.Sound)
}
return UrbanAirshipModule.setForegroundPresentationOptions(converted)
}
}
}
/**
* Sets the notification options for iOS.
* This method is only supported on iOS. Android will no-op.
*
* @param options The array of notification options.
*/
static setNotificationOptions(options: [iOS.NotificationOption]) {
if (Platform.OS == 'ios') {
return UrbanAirshipModule.setNotificationOptions(options)
}
}
/**
* Adds a listener for an Urban Airship event.
*
* @param eventType The event type. Either EventType.NotificationResponse, EventType.PushReceived,
* EventType.Register, EventType.Registration, EventType.DeepLink, EventType.NotificationOptInStatus,
* EventType.InboxUpdated, or EventType.ShowInbox.
* @param listener The event listener.
* @return A subscription.
*/
static addListener(eventType: EventType, listener: (...args: any[]) => any): Subscription {
EventEmitter.addListener(convertEventEnum(eventType), listener)
return new Subscription(() => {
UrbanAirship.removeListener(eventType, listener)
})
}
/**
* Removes a listener for an Urban Airship event.
*
* @param eventType The event type. Either EventType.NotificationResponse, EventType.PushReceived,
* EventType.Register, EventType.Registration, EventType.DeepLink, EventType.NotificationOptInStatus,
* EventType.InboxUpdated, or EventType.ShowInbox.
* @param listener The event listener. Should be a reference to the function passed into addListener.
*/
static removeListener(eventType: EventType, listener: (...args: any[]) => any) {
EventEmitter.removeListener(convertEventEnum(eventType), listener)
}
/**
* Removes all listeners for Urban Airship events.
*
* @param eventType The event type. Either EventType.NotificationResponse, EventType.PushReceived,
* EventType.Register, EventType.Registration, EventType.DeepLink, EventType.NotificationOptInStatus,
* EventType.InboxUpdated, or EventType.ShowInbox.
*/
static removeAllListeners(eventType: EventType) {
EventEmitter.removeAllListeners(convertEventEnum(eventType))
}
/**
* Enables or disables autobadging on iOS. Badging is not supported for Android.
*
* @param enabled Whether or not to enable autobadging.
*/
static setAutobadgeEnabled(enabled: boolean) {
if (Platform.OS == 'ios') {
UrbanAirshipModule.setAutobadgeEnabled(enabled)
} else {
console.log("This feature is not supported on this platform.")
}
}
/**
* Checks to see if autobadging on iOS is enabled. Badging is not supported for Android.
*
* @return A promise with the result, either true or false.
*/
static isAutobadgeEnabled(): Promise<boolean> {
if (Platform.OS == 'ios') {
return UrbanAirshipModule.isAutobadgeEnabled()
} else {
console.log("This feature is not supported on this platform.")
return new Promise(resolve => resolve(false))
}
}
/**
* Sets the badge number for iOS. Badging is not supported for Android.
*
* @param badgeNumber The badge number.
*/
static setBadgeNumber(badgeNumber: number) {
if (Platform.OS == 'ios') {
UrbanAirshipModule.setBadgeNumber(badgeNumber)
} else {
console.log("This feature is not supported on this platform.")
}
}
/**
* Gets the current badge number for iOS. Badging is not supported for Android
* and this method will always return 0.
*
* @return A promise with the result.
*/
static getBadgeNumber(): Promise<number> {
if (Platform.OS != 'ios') {
console.log("This feature is not supported on this platform.")
}
return UrbanAirshipModule.getBadgeNumber()
}
/**
* Displays the default message center.
*/
static displayMessageCenter() {
UrbanAirshipModule.displayMessageCenter()
}
/**
* Dismisses the default message center.
*/
static dismissMessageCenter() {
UrbanAirshipModule.dismissMessageCenter()
}
/**
* Displays an inbox message.
*
* @param messageId The id of the message to be displayed.
* @return A promise with the result.
*/
static displayMessage(messageId: string): Promise<boolean> {
return UrbanAirshipModule.displayMessage(messageId)
}
/**
* Dismisses the currently displayed inbox message.
*/
static dismissMessage() {
UrbanAirshipModule.dismissMessage()
}
/**
* Retrieves the current inbox messages.
*
* @return A promise with the result.
*/
static getInboxMessages(): Promise<InboxMessage[]> {
return UrbanAirshipModule.getInboxMessages()
}
/**
* Deletes an inbox message.
*
* @param messageId The id of the message to be deleted.
* @return A promise with the result.
*/
static deleteInboxMessage(messageId: string): Promise<boolean> {
return UrbanAirshipModule.deleteInboxMessage(messageId)
}
/**
* Marks an inbox message as read.
*
* @param messageId The id of the message to be marked as read.
* @return A promise with the result.
*/
static markInboxMessageRead(messageId: string): Promise<boolean> {
return UrbanAirshipModule.markInboxMessageRead(messageId)
}
/**
* Forces the inbox to refresh. This is normally not needed as the inbox will
* automatically refresh on foreground or when a push arrives that's associated
* with a message.
*
* @return{Promise.<boolean>} A promise with the result.
*/
static refreshInbox(): Promise<boolean> {
return UrbanAirshipModule.refreshInbox()
}
/**
* Sets the default behavior when the message center is launched from a push
* notification. If set to false the message center must be manually launched.
*
* @param enabled true to automatically launch the default message center, false to disable.
*/
static setAutoLaunchDefaultMessageCenter(enabled: boolean) {
UrbanAirshipModule.setAutoLaunchDefaultMessageCenter(enabled)
}
/**
* Overriding the locale.
*
* @param localeIdentifier The locale identifier.
*/
static setCurrentLocale(localeIdentifier: String) {
UrbanAirshipModule.setCurrentLocale(localeIdentifier)
}
/**
* Getting the locale currently used by Airship.
*
*/
static getCurrentLocale(): Promise<String> {
return UrbanAirshipModule.getCurrentLocale()
}
/**
* Resets the current locale.
*
*/
static clearLocale() {
UrbanAirshipModule.clearLocale()
}
/**
* Gets all the active notifications for the application.
* Supported on Android Marshmallow (23)+ and iOS 10+.
*
* @return A promise with the result.
*/
static getActiveNotifications(): Promise<PushReceivedEvent[]> {
return UrbanAirshipModule.getActiveNotifications()
}
/**
* Clears all notifications for the application.
* Supported on Android and iOS 10+. For older iOS devices, you can set
* the badge number to 0 to clear notifications.
*/
static clearNotifications() {
UrbanAirshipModule.clearNotifications()
}
/**
* Clears a specific notification.
* Supported on Android and iOS 10+.
*
* @param identifier The notification identifier. The identifier will be
* available in the PushReceived event and in the active notification response
* under the "notificationId" field.
*/
static clearNotification(identifier: string) {
UrbanAirshipModule.clearNotification(identifier)
}
/**
* Sets the in-app message display interval on the default display coordinator.
*
* @param seconds The minimum number of seconds between message displays.
*/
static setInAppAutomationDisplayInterval(seconds: number) {
UrbanAirshipModule.setInAppAutomationDisplayInterval(seconds)
}
}