UNPKG

@triniwiz/nativescript-klaviyo-push-sdk

Version:
224 lines 9.93 kB
import { Application, ApplicationSettings, Device, Utils } from '@nativescript/core'; import { AuthorizationStatus } from './common'; const REMOTE_NOTIFICATIONS_REGISTRATION_STATUS = 'io.github.triniwiz.klaviyo.notifications.status'; export class KlaviyoPush { constructor() { this._getTokenQeueue = []; } get showNotificationsWhenInForeground() { return NSCKlaviyoPush.showNotificationsWhenInForeground; } set showNotificationsWhenInForeground(value) { NSCKlaviyoPush.showNotificationsWhenInForeground = value; } _hasPermission(resolve, reject) { if (parseInt(Device.osVersion) >= 10) { UNUserNotificationCenter.currentNotificationCenter().getNotificationSettingsWithCompletionHandler((settings) => { let status = AuthorizationStatus.NOT_DETERMINED; switch (settings.authorizationStatus) { case 2 /* UNAuthorizationStatus.Authorized */: status = AuthorizationStatus.AUTHORIZED; break; case 1 /* UNAuthorizationStatus.Denied */: status = AuthorizationStatus.DENIED; break; case 4 /* UNAuthorizationStatus.Ephemeral */: status = AuthorizationStatus.EPHEMERAL; break; case 3 /* UNAuthorizationStatus.Provisional */: status = AuthorizationStatus.PROVISIONAL; break; case 0 /* UNAuthorizationStatus.NotDetermined */: status = AuthorizationStatus.NOT_DETERMINED; break; } resolve(status); }); } else { resolve(AuthorizationStatus.AUTHORIZED); } } hasPermission() { return new Promise((resolve, reject) => { this._hasPermission(resolve, reject); }); } registerDeviceForRemoteMessages() { return new Promise((resolve, reject) => { if (NSCKlaviyoPush.isSimulator()) { ApplicationSettings.setBoolean(REMOTE_NOTIFICATIONS_REGISTRATION_STATUS, true); resolve(); } NSCKlaviyoPush.registerDeviceForRemoteMessagesCallback = (result, error) => { if (error) { const err = new Error(error?.localizedDescription); err.native = error; if (this._getTokenQeueue.length > 0) { this._getTokenQeueue.forEach((item) => { item.reject(err); }); this._getTokenQeueue.splice(0); } reject(err); } else { resolve(); } }; if (UIApplication?.sharedApplication) { UIApplication?.sharedApplication?.registerForRemoteNotifications?.(); } else { const cb = (args) => { UIApplication?.sharedApplication?.registerForRemoteNotifications?.(); Application.off('launch', cb); }; Application.on('launch', cb); } }); } requestPermission(permissions) { return new Promise((resolve, reject) => { const version = parseInt(Device.osVersion); if (version >= 10) { let options = UNAuthorizationOptionNone; if (permissions?.ios?.alert ?? true) { options = options | 4 /* UNAuthorizationOptions.Alert */; } if (permissions?.ios?.badge ?? true) { options = options | 1 /* UNAuthorizationOptions.Badge */; } if (permissions?.ios?.sound ?? true) { options = options | 2 /* UNAuthorizationOptions.Sound */; } if (permissions?.ios?.carPlay ?? true) { options = options | 8 /* UNAuthorizationOptions.CarPlay */; } if (version >= 12) { if (permissions?.ios?.criticalAlert) { options = options | 16 /* UNAuthorizationOptions.CriticalAlert */; } if (permissions?.ios?.provisional) { options = options | 64 /* UNAuthorizationOptions.Provisional */; } } if (version >= 13 && version <= 15) { options = options | 128 /* UNAuthorizationOptions.Announcement */; } UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptionsCompletionHandler(options, (result, error) => { if (error) { const err = new Error(error?.localizedDescription); err.native = error; reject(err); reject(err); } else { this._hasPermission(resolve, reject); } }); } else { const notificationTypes = 2 /* UIUserNotificationType.Sound */ | 4 /* UIUserNotificationType.Alert */ | 1 /* UIUserNotificationType.Badge */; const settings = UIUserNotificationSettings.settingsForTypesCategories(notificationTypes, null); UIApplication.sharedApplication.registerUserNotificationSettings(settings); this._hasPermission(resolve, reject); } }); } unregisterDeviceForRemoteMessages() { return new Promise((resolve, reject) => { try { UIApplication.sharedApplication.unregisterForRemoteNotifications(); ApplicationSettings.setBoolean(REMOTE_NOTIFICATIONS_REGISTRATION_STATUS, false); resolve(); } catch (e) { reject(e); } }); } get isDeviceRegisteredForRemoteMessages() { return UIApplication.sharedApplication.registeredForRemoteNotifications; } getCurrentToken() { return new Promise(async (resolve, reject) => { if (!NSCKlaviyoPush.isSimulator() && !UIApplication.sharedApplication.registeredForRemoteNotifications) { reject(new Error('You must be registered for remote messages before calling getToken, see MessagingCore.getInstance().registerDeviceForRemoteMessages()')); return; } if (!this._APNSTokenString) { if ((await this.hasPermission()) === AuthorizationStatus.DENIED) { reject(new Error('Device is unauthorized to receive an APNSToken token.')); return; } this._getTokenQeueue.push({ resolve, reject }); return; } resolve(this._APNSTokenString); }); } static getInstance() { const instance = this._instance || (this._instance = new KlaviyoPush()); const ref = new WeakRef(instance); if (!KlaviyoPush._onToken) { KlaviyoPush._onToken = (token) => { instance._APNSToken = token; instance._APNSTokenString = NSCKlaviyoPush.APNSTokenToString(token); const owner = ref.deref(); if (owner && owner.onToken) { owner.onToken(instance._APNSTokenString); } if (instance._getTokenQeueue.length > 0) { instance._getTokenQeueue.forEach((item) => { item.resolve(instance._APNSTokenString); }); instance._getTokenQeueue.splice(0); } }; NSCKlaviyoPush.onTokenCallback = KlaviyoPush._onToken; } if (!KlaviyoPush._onMessage) { KlaviyoPush._onMessage = (message, completion) => { const owner = ref.deref(); if (owner && owner.onMessage) { try { owner.onMessage(Utils.dataDeserialize(message), message); } catch (error) { } } completion(); }; NSCKlaviyoPush.onMessageCallback = KlaviyoPush._onMessage; } if (!KlaviyoPush._onNonKlaviyoMessageListener) { KlaviyoPush._onNonKlaviyoMessageListener = (message, completion) => { const owner = ref.deref(); if (owner && owner.onNonKlaviyoMessageListener) { try { owner.onNonKlaviyoMessageListener(Utils.dataDeserialize(message)); } catch (error) { } } completion; }; NSCKlaviyoPush.onNonKlaviyoMessageCallback = KlaviyoPush._onNonKlaviyoMessageListener; } if (!KlaviyoPush._onKlaviyoCustomDataMessage) { KlaviyoPush._onKlaviyoCustomDataMessage = (data, message, completion) => { const owner = ref.deref(); if (owner && owner.onKlaviyoCustomDataMessage) { try { owner.onKlaviyoCustomDataMessage(Utils.dataDeserialize(data), Utils.dataDeserialize(message)); } catch (error) { } } completion(); }; NSCKlaviyoPush.onCustomDataMessageCallback = KlaviyoPush._onKlaviyoCustomDataMessage; } return instance; } } export { AuthorizationStatus } from './common'; //# sourceMappingURL=index.ios.js.map