@triniwiz/nativescript-klaviyo-push-sdk
Version:
Klaviyo NativeScript Push Notifications SDK
224 lines • 9.93 kB
JavaScript
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