uniApp打包的手机app如果用户没开启通知权限、引导用户开启

封装一个setPermissions.js文件

复制代码
/**
 * 如果用户没开启通知权限、引导用户开启 */
export function setPermissions() {
	// #ifdef APP-PLUS 
	if (plus.os.name == 'Android') {
		var main = plus.android.runtimeMainActivity();
		var pkName = main.getPackageName();
		var uid = main.getApplicationInfo().plusGetAttribute("uid");
		var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
		if (NotificationManagerCompat == null) {
			NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat");
		}
		var areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled();
		if (!areNotificationsEnabled) {
			uni.showModal({
				title: '通知权限开启提醒',
				content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!',
				showCancel: true,
				confirmText: '去设置',
				confirmColor:'#36d',
				cancelText:'暂不',
				cancelColor:'#999'
				success: function(res) {
					if (res.confirm) {
						var Intent = plus.android.importClass('android.content.Intent');
						var Build = plus.android.importClass("android.os.Build");
						if (Build.VERSION.SDK_INT >= 26) {
							var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
							intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
						} else if (Build.VERSION.SDK_INT >= 21) {
							var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
							intent.putExtra("app_package", pkName);
							intent.putExtra("app_uid", uid);
						} else {
							intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
							var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
							intent.setData(uri);
						}
						main.startActivity(intent);
					}
				}
				
			});
		}
	} else if (plus.os.name == 'iOS') {
		var isOn = undefined;
		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);
		if (isOn == false) {
			uni.showModal({
				title: '通知权限开启提醒',
				content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!',
				showCancel: true,
				confirmText: '去设置',
				confirmColor:'#36d',
				cancelText:'暂不',
				cancelColor:'#999'
				success: function(res) {
					if (res.confirm) {
						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);
					}
				}
			});
		}
	}
	// #endif 
}

把他引用到咱们项目的公共组件中或首页:

复制代码
// 引入setPermissions.js文件
import {
		setPermissions
	} from '@/util/setPermissions.js';

调用!

复制代码
/** 引导用户 打开消息推送*/
					setPermissions()
相关推荐
1024小神1 小时前
关于在ios系统中签名并安装ipa文件的五种方法,PakePlus打包的ipa文件可以看看
macos·ios·cocoa
漂亮_大男孩1 小时前
conda|如何通过命令行在mac上下载conda
macos·conda
止观止4 小时前
VS Code 二次开发:跨平台图标定制全攻略
linux·windows·vscode·macos
小瓶盖_tl6 小时前
在Mac上安装CocoaPods问题处理
macos·xcode·cocoapods
游戏开发爱好者87 小时前
苹果iOS26系统升级:液态玻璃与智能功能全解析
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
Aftery的博客9 小时前
flutter项目打包macOS桌面程序dmg
flutter·macos
心灵宝贝9 小时前
4K Wallpaper mac v2.7.dmg 安装教程(Mac电脑详细安装步骤4K壁纸Mac下载安装)
macos
2501_9159184114 小时前
iOS 26 App 性能测试|性能评测|iOS 26 性能对比:实战策略
android·macos·ios·小程序·uni-app·cocoa·iphone
wulitoud17 小时前
[自荐]一款mac电脑历史剪切板工具,类似著名的Paste
macos
Digitally20 小时前
如何通过 5 种有效方法同步 Android 和 Mac
android·macos