/**
 * 判断Push是否开启
 */
function isTurnedOnPush() {
	var isOn = undefined;
	try {
		if ('iOS' == plus.os.name) {
			var types = 0;
			var app = plus.ios.invoke('UIApplication', 'sharedApplication');
			var settings = plus.ios.invoke(app, 'currentUserNotificationSettings');
			if (settings) {
				types = settings.plusGetAttribute('types');
				plus.ios.deleteObject(settings);
			} else {
				types = plus.ios.invoke(app, 'enabledRemoteNotificationTypes');
			}
			plus.ios.deleteObject(app);
			isOn = (0 != types);
		} else {
			var main = plus.android.runtimeMainActivity();
			var manager = plus.android.invoke('com.igexin.sdk.PushManager', 'getInstance');
			isOn = plus.android.invoke(manager, 'isPushTurnedOn', main);
		}
	} catch (e) {
		console.error('exception in isTurnedOnPush@dc-push!!');
	}
	return isOn;
}

/**
 * 判断通知权限是否开启
 */
function isAreNotificationsEnabled() {
	var isOn = undefined;
	try {
		if ('iOS' == plus.os.name) {
			var UIApplication = plus.ios.import("UIApplication");
			var app = UIApplication.sharedApplication();
			var enabledTypes = 0;
			if (app.currentUserNotificationSettings) {
				var settings = app.currentUserNotificationSettings();
				enabledTypes = settings.plusGetAttribute("types");
			} else {
				//针对低版本ios系统  
				enabledTypes = app.enabledRemoteNotificationTypes();
			}
			plus.ios.deleteObject(app);
			if (0 == enabledTypes) {
				console.log('----未开启通知权限');
				isOn = false
			} else {
				console.log('++++已开启通知权限');
				isOn = true
			}
		} else {
			var main = plus.android.runtimeMainActivity();
			var pkName = main.getPackageName();
			var NotificationManagerCompat =  plus.android.importClass("androidx.core.app.NotificationManagerCompat");
			var packageNames = NotificationManagerCompat.from(main);
			console.log(packageNames);
			if (packageNames.areNotificationsEnabled()) {
				console.log('++++已开启通知权限');
				isOn = true
			} else {
				console.log('----未开启通知权限');
				isOn = false
			}
		}
	} catch (e) {
		console.error('exception in isAreNotificationsEnabled!!', e);
	}
	return isOn;
}

/**
 * 打开Push
 * Android平台 - 打开个推(UniPush)的推送通道
 * iOS平台 - 如果开启通知功能,则打开应用的设置页面引导用户开启通知
 */
function turnOnPush() {
	try {
		if ('iOS' == plus.os.name) {
			// 如果设置中没有开启通知,则打开应用的设置界面
			if (!isTurnedOnPush()) {
				settingInIos();
			}
		} else {
			var main = plus.android.runtimeMainActivity();
			var manager = plus.android.invoke('com.igexin.sdk.PushManager', 'getInstance');
			plus.android.invoke(manager, 'turnOnPush', main);
		}
	} catch (e) {
		console.error('exception in turnOnPush@dc-push!!');
	}
}

/**
 * 关闭Push
 * Android平台 - 关闭个推(UniPush)的推送通道
 * iOS平台 - 不做任何操作
 */
function trunOffPush() {
	try {
		if ('iOS' == plus.os.name) {
			// 这里不做任何操作(不引导用户关闭应用的推送能力),应该通知业务服务器不向此用户下发推送消息
		} else {
			var main = plus.android.runtimeMainActivity();
			var manager = plus.android.invoke('com.igexin.sdk.PushManager', 'getInstance');
			plus.android.invoke(manager, 'turnOffPush', main);
		}
	} catch (e) {
		console.error('exception in trunOffPush@dc-push!!');
	}
}

/**
 * iOS平台打开应用设置界面
 */
function settingInIos() {
	try {
		if ('iOS' == plus.os.name) {
			var app = plus.ios.invoke('UIApplication', 'sharedApplication');
			var setting = plus.ios.invoke('NSURL', 'URLWithString:', 'app-settings:');
			plus.ios.invoke(app, 'openURL:', setting);
			plus.ios.deleteObject(setting);
			plus.ios.deleteObject(app);
		}
	} catch (e) {
		console.error('exception in settingInIos@dc-push!!');
	}
}

export default{
	isOn: isTurnedOnPush,
	iosSetting: settingInIos,
	on: turnOnPush,
	off: trunOffPush,
	isNotOn: isAreNotificationsEnabled
}
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐