【uniapp上线应用商店】关于用户禁止使用权限后,48小时之内APP重新打开时不得再次申请权限 实现

重复申请权限原因:

我的app项目有定位功能,每次首页加载完成会自动获取定位信息,导致app频繁调用权限 

解决思路:

 首先需要关闭自动获取定位的方法,解决每次进入申请权限问题。利用本地存储,当用户第一次拒绝以后,将拒绝当前时间存储到本地,每次进入app获取本地存储的时间与当前时间对比,来判断要不要再次申请权限。利用uniapp插件手动调起获取权限弹窗,获取定位授权后再手动调用定位方法。

解决方案:

1.关闭首页获取定位方法

   我的调用获取位置信息函数在onload里,先注释掉,由于没有用到位置权限,app每次打开不会去申请权限,再使用uniapp插件市场中手动调用权限方法,插件链接App权限判断和提示 - DCloud 插件市场

2.利用插件方法手动调起权限申请

把插件导入项目,项目中会多出permission.js文件,该文件为插件封装的判断权限和一些调起权限申请的方法

在项目首页中引入:

import permision from "@/js_sdk/wa-permission/permission.js"

自己试了一下发现permision中的requestAndroidPermission方法可以调起权限申请,在首页的methods中引入requestAndroidPermission方法

methods: {
			async requestAndroidPermission(permisionID) {
				var result = await permision.requestAndroidPermission(permisionID)
				var strStatus
				if (result == 1) {
					strStatus = "已获得授权"
                    //这里判断,如果用户已经定位授权,去调用自己获取位置的方法
					this.locations = true;
					this.get_area();
				} else if (result == 0) {
					strStatus = "未获得授权"
                    //用户拒绝授权,将本次拒绝时间存储到本地
					uni.setStorageSync('expirationTime', Date.parse(new Date()) / 1000)
				} else {
					strStatus = "被永久拒绝权限"
				}
				this.$refs.popup.close()
			}
}
 3.每次进入页面检查权限
onReady() {
            //获取本地存储
			let stor = uni.getStorageSync('expirationTime')
			if (stor) {
                //超过48小时,移除本地存储
				if ((stor + (3600 * 24 * 2)) < Date.parse(new Date()) / 1000) { //过期了
					uni.removeStorageSync('expirationTime')
					console.log('存储过期了,调用权限'); 
                    //插件方法,调起权限权限授权弹窗
                   this.requestAndroidPermission('android.permission.ACCESS_FINE_LOCATION')
				    //这个是我自定义的权限使用说明弹窗
                    this.$refs.popup.open('top')
				} else {
                    //没超过48小时,不做操作
					console.log('存储没过期,我还不能调用权限');
				}
			} else {
				console.log('没用检测到本地存储,调用权限');
				this.requestAndroidPermission('android.permission.ACCESS_FINE_LOCATION')
				this.$refs.popup.open('top')
			}
		},

实现

   1.首次进入app,检查本地存储,没有本地存储,就去发起权限申请,用户同意就手动调用获取位置的方法

  2.首次进入app,检查本地存储,没有本地存储,发起权限申请,用户点击拒绝,将拒绝时间存入本地,此时app没有获取定位权限

  3.再次进入app,检查本地存储,本地存储存在并且时间没有超过48小时,不调用权限申请,此时app没有获取定位权限

  4.再次进入app,检查本地存储,本地存储存超过48小时,删除本地存储,距离上次手动拒绝超过48小时,利用uniapp插件手动发起权限申请,重复第一步操作。实现功能!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值