uniapp:检查通知权限,并提示是否打开,点击跳转设置,开启通知权限

getQuanxian() {
	let platform = uni.getSystemInfoSync().platform; //首先判断app是安卓还是ios
	console.log(platform);
	if (platform == "ios") { //这里是ios的方法
		console.log("我是iOS");
		var UIApplication = plus.ios.import("UIApplication");
		var app = UIApplication.sharedApplication();
		var enabledTypes = 0;
		if (app.currentUserNotificationSettings) {
			var settings = app.currentUserNotificationSettings();
			enabledTypes = settings.plusGetAttribute("types");
			console.log("enabledTypes1:" + enabledTypes);
			if (enabledTypes == 0) { //如果enabledTypes = 0 就是通知权限没有开启
				uni.showModal({
					title: '提示',
					content: '是否前往打开通知权限',
					success: res => {
						if (res.confirm) {
							this.openTongZhi()
						} else if (res.cancel) {
							console.log('用户点击取消');
						}
					}
				});
			} else {
				uni.showToast({
					title: '已开启',
					icon: "none"
				})
			}
		}
		plus.ios.deleteObject(settings);
	} else if (platform == "android") { //下面是安卓的方法
		console.log("我是安卓", plus.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"
		);
		//android.support.v4升级为androidx
		if (NotificationManagerCompat == null) {
			NotificationManagerCompat = plus.android.importClass(
				"androidx.core.app.NotificationManagerCompat"
			);
		}
		var areNotificationsEnabled =
			NotificationManagerCompat.from(main).areNotificationsEnabled();
		console.log(areNotificationsEnabled);
		// 未开通‘允许通知’权限,则弹窗提醒开通,并点击确认后,跳转到系统设置页面进行设置
		if (!areNotificationsEnabled) {
			this.tongzhi = true; //这里也一样未开启权限,弹出弹窗
		}
		if (areNotificationsEnabled) {
			uni.showToast({
				title: '已开启',
				icon: "none"
			})
		} else {
			uni.showModal({
				title: '提示',
				content: '是否前往打开通知权限',
				success: res => {
					if (res.confirm) {
						this.openTongZhi()
					} else if (res.cancel) {
						console.log('用户点击取消');
					}
				}
			});
		}
	}
},
openTongZhi() { //弹窗按钮绑定方法
	let platform = uni.getSystemInfoSync().platform; //获取安卓还是ios
	if (platform == "ios") { //如果机型是ios,ios由于权限问题,可能需要手动开启
		var UIApplication = plus.ios.import("UIApplication");
		var app = UIApplication.sharedApplication();
		var settings = app.currentUserNotificationSettings();
		enabledTypes = settings.plusGetAttribute("types");
		var NSURL2 = plus.ios.import("NSURL");
		var setting2 = NSURL2.URLWithString("app-settings:");
		var application2 = UIApplication.sharedApplication();
		application2.openURL(setting2);
		plus.ios.deleteObject(setting2);
		plus.ios.deleteObject(NSURL2);
		plus.ios.deleteObject(application2);
		plus.ios.deleteObject(settings);
	} else if (platform == "android") { //如果机型是安卓
		var main = plus.android.runtimeMainActivity();
		var pkName = main.getPackageName();
		var uid = main.getApplicationInfo().plusGetAttribute("uid");
		var Intent = plus.android.importClass("android.content.Intent");
		var Build = plus.android.importClass("android.os.Build");
		//android 8.0引导
		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) { //判断安卓系统版本
			//android 5.0-7.0
			var intent = new Intent("android.settings.APP_NOTIFICATION_SETTINGS");
			intent.putExtra("app_package", pkName);
			intent.putExtra("app_uid", uid);
		} else {
			//(<21)其他--跳转到该应用管理的详情页
			intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
			var uri = Uri.fromParts(
				"package",
				mainActivity.getPackageName(),
				null
			);
			intent.setData(uri);
		}
		// 跳转到该应用的系统通知设置页
		main.startActivity(intent);
	}
},
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UniApp 是一种基于 Vue.js 的跨平台开发框架,它可以帮助开发者快速构建跨平台的移动应用。在 UniApp 中,可以通过一些方式来进行权限管理。 1. 页面级权限控制:可以在路由配置中设置页面级别的权限,只有具备相应权限的用户才能访问该页面。可以通过在路由配置中设置 `meta` 字段来实现,例如: ```javascript { path: '/home', name: 'home', component: Home, meta: { requiresAuth: true // 需要登录才能访问 } } ``` 在页面跳转时,可以在全局路由守卫中判断用户是否具备相应权限,如果没有则进行拦截。 2. 功能级权限控制:可以根据用户角色或权限在页面内部进行功能级别的权限控制。可以在组件内部根据用户角色或权限进行判断,然后展示或隐藏相应的功能按钮或组件。 3. API 权限控制:如果应用需要调用后端接口,并且需要对接口进行权限控制,可以在后端接口中添加权限验证逻辑。前端在调用接口前,先通过登录获取用户信息,然后将用户信息或权限信息传递给后端进行验证,后端根据验证结果返回相应的数据。 需要注意的是,在前端进行的权限控制只是一种辅助手段,真正的权限验证应该在后端进行。前端的权限控制只是为了提高用户体验和安全性,避免未授权的用户进行某些操作。 以上是一些常见的 UniApp 权限管理方式,具体的实现方式可以根据项目需求和开发团队的实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值