UNPKG

wonderpush-cordova-sdk

Version:

Mobile push notification delivery with the WonderPush service. The WonderPush Cordova SDK is compatible with iOS and Android.

569 lines (503 loc) 19.3 kB
export interface WonderPushDelegate { urlForDeepLink?: (url: string, callback: (url?: string) => void) => void; onNotificationOpened?: (notification: object, buttonIndex: number) => void; onNotificationReceived?: (notification: object) => void; } export interface WonderPushChannel { id: string; groupId?: string; name?: string; description?: string; bypassDnd?: boolean; showBadge?: boolean; importance?: number; lights?: boolean; lightColor?: number; vibrate?: boolean; sound?: boolean; soundUri?: string; lockscreenVisibility?: number; vibrateInSilentMode?: boolean; color?: number; localOnly?: boolean; } export interface WonderPushChannelGroup { id: string; name?: string; } export interface UserPreferences { /** * Get the default channel id * @returns {Promise<string>} */ getDefaultChannelId(): Promise<string>; /** * Set the default channel id * @param {string} id * @returns {Promise<void>} */ setDefaultChannelId(id: string): Promise<void>; /** * Get a channel group * @param {string} groupId * @returns {Promise<WonderPushChannelGroup | null>} */ getChannelGroup(groupId: string): Promise<WonderPushChannelGroup | null>; /** * Get a channel * @param {string} channelId * @returns {Promise<WonderPushChannel | null>} */ getChannel(channelId: string): Promise<WonderPushChannel | null>; /** * Create, update and remove channel existing groups to match the given channel groups * @param {WonderPushChannelGroup[]} channelGroups * @returns {Promise<void>} */ setChannelGroups(channelGroups: WonderPushChannelGroup[]): Promise<void>; /** * Create, update and remove channels to match the given channels * @param {WonderPushChannel[]} channels * @returns {Promise<void>} */ setChannels(channels: WonderPushChannel[]): Promise<void>; /** * Create or update a channel group * @param {WonderPushChannelGroup} channelGroup * @returns {Promise<void>} */ putChannelGroup(channelGroup: WonderPushChannelGroup): Promise<void>; /** * Create or update a channel * @param {WonderPushChannel} channel * @returns {Promise<void>} */ putChannel(channel: WonderPushChannel): Promise<void>; /** * Remove a channel group * @param {string} groupId * @returns {Promise<void>} */ removeChannelGroup(groupId: string): Promise<void>; /** * Remove a channel * @param {string} channelId * @returns {Promise<void>} */ removeChannel(channelId: string): Promise<void>; } /** * @name Push Notifications - WonderPush * @description * * Send unlimited push notifications to iOS and Android devices. * * Get started in minutes: [Ionic Quickstart Guide](https://docs.wonderpush.com/docs/ionic-quickstart). * * Advanced segmentation, automation and personalization of push messages for €1 per 1000 subscribers. * * Requires the Cordova plugin `wonderpush-cordova-sdk`. * * [WonderPush push notifications](https://www.wonderpush.com) are the most effective way * to retain your users and grow your audience while remaining fully GDPR compliant. * * @usage * ```typescript * import { WonderPush } from 'wonderpush-cordova-sdk'; * * // Subscribe user * WonderPush.subscribeToNotifications() * .then(() => console.log("User subscribed to notifications")) * .catch((error: any) => console.error(error)); * * * // Send an event (a purchase in this example) * WonderPush.sendEvent('purchase', { * float_price: 12.99, * string_sku: "X123456" * }); * * // Tag users (as customers) * WonderPush.addTag('customer'); * * // Personalize * // 1. Store user details. * // 2. Use those details to create segments. * // 3. Include those details in your notifications. * WonderPush.putProperties({ * string_name: 'John D.', * int_age: 24 * }); * * // GDPR * // 1. set REQUIRES_USER_CONSENT=true to enable GDPR compliance. * // 2. WonderPush doesn't start until setUserConsent(true) is called. * const onClick = (userConsent: boolean) => WonderPush.setUserConsent(userConsent); * * // Listen to notification clicks * document.addEventListener('wonderpush.notificationOpen', function(event) { * console.log('Notification opened', event.notification); * if (event.notificationType === 'data') { * console.log('Silent notification', event.notification); * } * }); * ``` * * @interfaces * WonderPushChannel * WonderPushChannelGroup */ type SuccessCallback = () => void; type FailureCallback = (e: Error) => void; export interface WonderPushPlugin { /** * Initializes the WonderPush SDK * @param clientId * @param clientSecret */ initialize(clientId: string, clientSecret: string): Promise<void>; /** * Initializes the SDK and remembers credentials for subsequent auto-initialization. * You can disable AUTO_INIT or instead use `"USE_REMEMBERED"` as a value for the Client ID and Client Secret. * This is aimed at enabling complex integration scenarios where the Client ID and Client Secret are resolved dynamically and reused ever after. * If you provide a null value, the credential will be forgotten and the SDK won't be initialized. * @param clientId * @param clientSecret */ function initializeAndRememberCredentials(clientId: string|null, clientSecret: string|null): Promise<void>; /** * Returns the remembered Client ID given to `initializeAndRememberCredentials()`. * There is no similar getter for the Client Secret. * @returns The remembered Client ID if both a non-empty Client ID and Client Secret were last remembered, `null` otherwise. */ function getRememberedClientId(): Promise<string|null>; /** * Whether the SDK has been initialized. * * The SDK is ready when it is initialized with its Client ID and Client Secret. * @returns {Promise<boolean>} */ isInitialized(): Promise<boolean>; /** * Sets the user id, used to identify a single identity across multiple devices, * and to correctly identify multiple users on a single device. * * If not called, the last used user id it assumed. Defaulting to `null` if none is known. * * Upon changing userId, the access token is wiped, so avoid unnecessary calls, like calling with `null` * just before calling with a user id. * * @param {?string} userId - The user id, unique to your application. * Use `null` for anonymous users. * * You are strongly encouraged to use your own unique internal identifier. * @returns {Promise<void>} */ setUserId(userId: string | null): Promise<void>; /** * Controls native SDK logging. * @param {boolean} enabled - Whether to enable logs. * @returns {Promise<void>} */ setLogging(enabled: boolean): Promise<void>; /** * Sets up a delegate for tighter integration, or removes it. * @param {?WonderPushDelegate} delegate - The delegate to set, or `null` to remove it. * @returns {Promise<void>} */ setDelegate(delegate: WonderPushDelegate | null): Promise<void>; /** * Gets the current delegate. * @returns {Promise<WonderPushDelegate | null>} A promise with the delegate of null */ getDelegate(): Promise<WonderPushDelegate | null>; /** * Returns the userId currently in use, `null` by default. * @returns {Promise<string | null>} A promise with the user ID or null */ getUserId(): Promise<string | null>; /** * Returns the installationId identifying your application on a device, bond to a specific userId. * If you want to store this information on your servers, keep the corresponding userId with it. * Will return `null` until the SDK is properly initialized. * @returns {Promise<string | null>} A promise with the installation ID or null */ getInstallationId(): Promise<string | null>; /** * Returns the unique device identifier * @returns {Promise<string | null>} A promise with the device ID or null */ getDeviceId(): Promise<string | null>; /** * Returns the push token. * @returns {Promise<string | null>} A promise with the push token or `null` */ getPushToken(): Promise<string | null>; /** * Returns the currently used access token. * Returns `null` until the SDK is properly initialized. * This together with your client secret gives entire control to the current installation and associated user, you should not disclose it unnecessarily. * @returns {Promise<string | null>} */ getAccessToken(): Promise<string | null>; /** * Send an event to be tracked to WonderPush. * * @param {string} type - The event type, or name. Event types starting with an `@` character are reserved. * @param {?object} [attributes] - An object containing custom properties to be attached to the event. * The keys should be prefixed according to the type of their values. * You can find the details in the [Concepts > Custom fields](https://www.wonderpush.com/docs/guide/custom-fields) section of the documentation. * @returns {Promise<void>} */ trackEvent(type: string, attributes: { [key: string]: any }): Promise<void>; /** * Adds one or more tags to the installation. * @param {string|string[]} tag - The tags to add to the installation. You can use either a single string argument or an array of strings. * @returns {Promise<void>} */ addTag(tag: string | string[]): Promise<void>; /** * Removes one or more tags from the installation. * @param {string|string[]} tag - The tags to remove from the installation. You can use either a single string argument or an array of strings. * @returns {Promise<void>} */ removeTag(tag: string | string[]): Promise<void>; /** * Removes all tags from the installation. * @returns {Promise<void>} */ removeAllTags(): Promise<void>; /** * Returns all the tags of the installation. * @returns {Promise<string[]>} */ getTags(): Promise<string[]>; /** * Tests whether the installation has the given tag attached to it. * @param {string} tag - The tag to test. * @returns {Promise<boolean>} */ hasTag(tag: string): Promise<boolean>; /** * Sets the value to a given installation property. * * The previous value is replaced entirely. * Setting `undefined` or `null` has the same effect as {@link cordova.plugins.WonderPush#unsetProperty}. * * @param {string} field - The name of the property to set * @param value * @returns {Promise<void>} */ setProperty(field: string, value: any): Promise<void>; /** * Removes the value of a given installation property. * * The previous value is replaced with `null`. * * @param {string} field - The name of the property * @returns {Promise<void>} */ unsetProperty(field: string): Promise<void>; /** * Adds the value to a given installation property. * * The stored value is made an array if not already one. * If the given value is an array, all its values are added. * If a value is already present in the stored value, it won't be added. * * @param {string} field - The name of the property * @param value * @returns {Promise<void>} */ addProperty(field: string, value: any): Promise<void>; /** * Removes the value from a given installation property. * * The stored value is made an array if not already one. * If the given value is an array, all its values are removed. * If a value is present multiple times in the stored value, they will all be removed. * * @param {string} field - The name of the property * @param value * @returns {Promise<void>} */ removeProperty(field: string, value: any): Promise<void>; /** * Returns the value of a given installation property. * * If the property stores an array, only the first value is returned. * This way you don't have to deal with potential arrays if that property is not supposed to hold one. * Returns `null` if the property is absent or has an empty array value. * * @param {string} field - The name of the property to read values from * @returns {Promise<any>} */ getPropertyValue(field: string): Promise<any>; /** * Returns an array of the values of a given installation property. * * If the property does not store an array, an array is returned nevertheless. * This way you don't have to deal with potential scalar values if that property is supposed to hold an array. * Returns an empty array instead of `null` if the property is absent. * Returns an array wrapping any scalar value held by the property. * * @param {string} field - The name of the property to read values from * @returns {Promise<any[]>} */ getPropertyValues(field: string): Promise<any[]>; /** * Returns the latest known custom properties attached to the current installation object stored by WonderPush. * @returns {Promise<{[p: string]: any}>} */ getProperties(): Promise<{ [key: string]: any }>; /** * Updates the properties attached to the current installation object stored by WonderPush. * * In order to remove a value, use `null`. * * @param {{[p: string]: any}} properties. The keys should be prefixed according to the type of their values. You can find the details in the [Segmentation > Properties](https://docs.wonderpush.com/docs/properties#section-custom-properties) section of the documentation. * @returns {Promise<void>} */ putProperties(properties: { [key: string]: any }): Promise<void>; /** * Subscribes to push notification and registers the device token with WondePush. * * On iOS, you **must** call the following method at least once to make the notification visible to the user. * * - You can call this method multiple times. The user is only prompted for permission by iOS once. * - There is no need to call this method if the permission has already been granted, but it does not harm either. * - If the permission has been denied in the OS, the user will stay soft opt-out. * * Because in iOS you only have *one* chance for prompting the user, you should find a good timing for that. * For a start, you can systematically call it when the application starts, so that the user will be prompted directly at the first launch. * * @param {boolean|undefined} fallbackToSettings - When true, WonderPush will show a dialog prompting the user to go to settings and activate push notifications * @return {Promise<void>} Returns a promise that resolves upon successful subscription */ subscribeToNotifications(fallbackToSettings?:boolean): Promise<void>; /** * Returns whether the notifications are enabled. * @returns {Promise<boolean>} */ isSubscribedToNotifications(): Promise<boolean>; /** * Unsubscribes from push notification. * This method marks the user as soft opt-out. * * @returns {Promise<void>} */ unsubscribeFromNotifications(): Promise<void>; /** * Reads user consent state. * Returns undefined if no explicit consent was set. * @returns {Promise<boolean>} */ getUserConsent(): Promise<boolean>; /** * Provides or withdraws user consent. * If the `requiresUserConsent` initialization option is true, * the whole SDK is paused and no data is sent to WonderPush, until consent is provided. * @param {boolean} consent - * @returns {Promise<void>} */ setUserConsent(consent: boolean): Promise<void>; /** * Remove any local storage and ask the WonderPush servers to delete any data associated with the all local installations and related users. * @returns {Promise<void>} */ clearAllData(): Promise<void>; /** * Ask the WonderPush servers to delete any event associated with the all local installations. * @returns {Promise<void>} */ clearEventsHistory(): Promise<void>; /** * Ask the WonderPush servers to delete any custom data associated with the all local installations and related users. * * @returns {Promise<void>} */ clearPreferences(): Promise<void>; /** * Initiates the download of all user remote and local data. * * @returns {Promise<void>} */ downloadAllData(): Promise<void>; /** * UserPreferences part of the WonderPush SDK. * This is only available on Android. On other platforms the methods are implemented by nothing. */ UserPreferences: UserPreferences; /** * Gets the user's country, either as previously stored, or as guessed from the system. * @returns {Promise<string>} */ getCountry(): Promise<string>; /** * Overrides the user's country. You should use an ISO 3166-1 alpha-2 country code. Defaults to getting the country code from the system default locale. * Use `null` to disable the override. * @param {string} country * @returns {Promise<void>} */ setCountry(country: string): Promise<void>; /** * Gets the user's currency, either as previously stored, or as guessed from the system. * @returns {Promise<string>} */ getCurrency(): Promise<string>; /** * Overrides the user's currency. You should use an ISO 4217 currency code. Defaults to getting the currency code from the system default locale. * Use `null` to disable the override. * @param {string} currency - * @returns {Promise<void>} */ setCurrency(currency: string): Promise<void>; /** * Gets the user's locale, either as previously stored, or as guessed from the system. * @returns {Promise<string>} */ getLocale(): Promise<string>; /** * Overrides the user's locale. * You should use an `xx-XX` form of RFC 1766, composed of a lowercase ISO 639-1 language code, an underscore or a dash, and an uppercase ISO 3166-1 alpha-2 country code. * Defaults to getting the locale code from the system default locale. * Use `null` to disable the override. * @param {string} locale - * @returns {Promise<void>} */ setLocale(locale: string): Promise<void>; /** * Gets the user's time zone, either as previously stored, or as guessed from the system. * @returns {Promise<string>} */ getTimeZone(): Promise<string>; /** * You should use an IANA time zone database codes, `Continent/Country` style preferably, abbreviations like `CET`, `PST`, `UTC`, which have the drawback of changing on daylight saving transitions. * Defaults to getting the time zone code from the system default locale. * Use `null` to disable the override. * @param {string} timeZone - * @returns {Promise<void>} */ setTimeZone(timeZone: string): Promise<void>; /** * Enables the collection of the user's geolocation. * @returns {Promise<void>} */ enableGeolocation(): Promise<void>; /** * Disables the collection of the user's geolocation. * @returns {Promise<void>} */ disableGeolocation(): Promise<void>; /** * Overrides the user's geolocation. * Using this method you can have the user's location be set to wherever you want. * This may be useful to use a pre-recorded location. * @param {number} latitude * @param {number} longitude * @returns {Promise<void>} */ setGeolocation(latitude: number, longitude: number): Promise<void>; } export declare const WonderPush: WonderPushPlugin; export default WonderPush;