@triniwiz/nativescript-klaviyo-push-sdk
Version:
Klaviyo NativeScript Push Notifications SDK
164 lines • 7.37 kB
JavaScript
import { Application, Device, Utils } from '@nativescript/core';
let lastActivity;
let requestPermissionLauncher;
const _permissionQueue = [];
function register(args) {
if (!lastActivity) {
// Some activities do not implement activity result API
if (args.activity.registerForActivityResult) {
lastActivity = new WeakRef(args.activity);
requestPermissionLauncher = args.activity.registerForActivityResult(new androidx.activity.result.contract.ActivityResultContracts.RequestPermission(), new androidx.activity.result.ActivityResultCallback({
onActivityResult(isGranted) {
_permissionQueue.forEach((callback) => {
callback.resolve(isGranted ? 0 : 1);
});
_permissionQueue.splice(0);
},
}));
}
else {
Application.android.once('activityCreated', register);
}
}
}
Application.android.once('activityCreated', register);
Application.android.on('activityDestroyed', (args) => {
const activity = lastActivity?.get?.();
if (activity && args.activity === activity) {
requestPermissionLauncher?.unregister?.();
lastActivity = undefined;
Application.android.once('activityCreated', register);
}
});
export class KlaviyoPush {
getCurrentToken() {
return new Promise((resolve, reject) => {
io.github.triniwiz.plugins.klaviyo.push.KlaviyoPush.getToken(new io.github.triniwiz.plugins.klaviyo.push.KlaviyoPush.Callback({
onSuccess(result) {
resolve(result);
},
onError(error) {
const err = new Error(error?.getMessage?.() || 'Failed to getToken');
err.native = error;
reject(err);
},
}));
});
}
hasPermission() {
const context = Utils.android.getApplicationContext();
if (parseInt(Device.sdkVersion) >= 33) {
if (androidx.core.content.ContextCompat.checkSelfPermission(context, android.Manifest.permission.POST_NOTIFICATIONS) === android.content.pm.PackageManager.PERMISSION_GRANTED) {
return Promise.resolve(0);
}
else {
return Promise.resolve(1);
}
}
return Promise.resolve(androidx.core.app.NotificationManagerCompat.from(Utils.android.getApplicationContext()).areNotificationsEnabled() ? 0 : 1);
}
registerDeviceForRemoteMessages() {
return Promise.resolve();
}
requestPermission(permissions) {
if (parseInt(Device.sdkVersion) >= 33) {
const activity = Application.android.foregroundActivity || Application.android.startActivity;
return new Promise((resolve, reject) => {
const requestPermission = (activity) => {
Application.android.on('activityRequestPermissions', (event) => {
if (event.requestCode === 1001) {
if (event.grantResults && event.grantResults.length > 0 && event.grantResults[0] === android.content.pm.PackageManager.PERMISSION_GRANTED) {
resolve(0);
}
else {
reject(1);
}
}
});
const perms = Array.create('java.lang.String', 1);
perms[0] = android.Manifest.permission.POST_NOTIFICATIONS;
activity.requestPermissions(perms, 1001);
};
if (!activity) {
Application.android.once('activityCreated', (args) => {
requestPermission(args.activity);
});
}
else {
requestPermission(activity);
}
});
}
return this.hasPermission();
}
unregisterDeviceForRemoteMessages() {
return Promise.resolve();
}
get isDeviceRegisteredForRemoteMessages() {
return androidx.core.app.NotificationManagerCompat.from(Utils.android.getApplicationContext()).areNotificationsEnabled();
}
static getInstance() {
const instance = this._instance || (this._instance = new KlaviyoPush());
const ref = new WeakRef(instance);
if (!KlaviyoPush._onToken) {
KlaviyoPush._onToken = new io.github.triniwiz.plugins.klaviyo.push.KlaviyoPush.Callback({
onSuccess(token) {
const owner = ref.get();
if (owner && owner.onToken) {
owner.onToken(token);
}
},
onError(error) { },
});
io.github.triniwiz.plugins.klaviyo.push.KlaviyoPush.setOnTokenListener(KlaviyoPush._onToken);
}
if (!KlaviyoPush._onMessage) {
KlaviyoPush._onMessage = new io.github.triniwiz.plugins.klaviyo.push.KlaviyoPush.Callback({
onSuccess(message) {
const owner = ref.get();
if (owner && owner.onMessage) {
try {
owner.onMessage(Utils.dataDeserialize(message), message);
}
catch (error) { }
}
},
onError(error) { },
});
io.github.triniwiz.plugins.klaviyo.push.KlaviyoPush.setOnMessageListener(KlaviyoPush._onMessage);
}
if (!KlaviyoPush._onNonKlaviyoMessageListener) {
KlaviyoPush._onNonKlaviyoMessageListener = new io.github.triniwiz.plugins.klaviyo.push.KlaviyoPush.Callback({
onSuccess(message) {
const owner = ref.get();
if (owner && owner.onNonKlaviyoMessageListener) {
try {
owner.onNonKlaviyoMessageListener(Utils.dataDeserialize(message));
}
catch (error) { }
}
},
onError(error) { },
});
io.github.triniwiz.plugins.klaviyo.push.KlaviyoPush.setOnNonKlaviyoMessageListener(KlaviyoPush._onNonKlaviyoMessageListener);
}
if (!KlaviyoPush._onKlaviyoCustomDataMessage) {
KlaviyoPush._onKlaviyoCustomDataMessage = new io.github.triniwiz.plugins.klaviyo.push.KlaviyoPush.Callback2({
onSuccess(data, message) {
const owner = ref.get();
if (owner && owner.onKlaviyoCustomDataMessage) {
try {
owner.onKlaviyoCustomDataMessage(Utils.dataDeserialize(data), Utils.dataDeserialize(message));
}
catch (error) { }
}
},
onError(error) { },
});
io.github.triniwiz.plugins.klaviyo.push.KlaviyoPush.setOnCustomDataMessageListener(KlaviyoPush._onKlaviyoCustomDataMessage);
}
return instance;
}
}
export { AuthorizationStatus } from './common';
//# sourceMappingURL=index.android.js.map