您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
uniapp推送教程002通知权限手动都无法勾选?(安卓13的权限细节)
发布时间:2024-08-27 19:07:47编辑:雪饮阅读()
-
上篇中了解了uniapp中基于unipush2.0获取推送客户端id的情况,其实unipush2.0分为离线通知和在线通知,那么我的理解就是不管是离线通知还是在线通知,最终通知到哪里?app内部还是外部(手机通知栏),这个其实我们也可以自己决定的。
Uniapp有uni.createPushMessage可以创建消息到通知栏。
但前提你需要有通知权限。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
这三条权限,特别是第三条,这是安卓13,特别是targetSdk=33时所必须的。
否则你即便手动去允许授权都是勾选不了的。
说什么根据我的要求,我要求什么了?我都不记得。
然后更改了权限清单,要重新打包一个自定义基座,再次在新的自定义基座运行。
然后你可能根据需要添加动态申请通知权限的授权
setPermissions() {
// #ifdef APP-PLUS
if (plus.os.name == 'Android') { // 判断是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();
// 未开通‘允许通知’权限,则弹窗提醒开通,并点击确认后,跳转到系统设置页面进行设置
if (!areNotificationsEnabled) {
uni.showModal({
title: '通知权限开启提醒',
content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!',
showCancel: false,
confirmText: '去设置',
success: function(res) {
if (res.confirm) {
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) {
console.log("手动设置通知进入这里了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
console.log("手动设置通知进入这里了21");
var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
intent.putExtra("app_package", pkName);
intent.putExtra("app_uid", uid);
} else {
console.log("手动设置通知进入这里了<21");
//(<21)其他--跳转到该应用管理的详情页
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') { // 判断是ISO
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: false,
confirmText: '去设置',
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
}
这个我这里是在app.vue里面的onLaunch里面调用this.setPermissions();的。
理论上其他地方调用应该也是可以的。
关键字词:uniapp,推送,unipush2.0,unipush,无法勾选
相关文章
- uniapp如何做推送?unipush2.0使用教程001获取推送id
- uniapp、php生成pdf
- uniapp调用原生安卓方法(原生端安卓端noActivity)
- uniapp实现语音识别(百度语音识别引擎)(粤语)
- uniapp利用canvas绘制阿姆斯勒量表测试(用户点选线条
- uniapp的ios模拟器调试(无需ios真机及mac电脑)
- HBuilder X的uniapp项目运行到ios模拟器(ios16.4)(无
- uniapp中处理从webview中支付同步回调到app中
- 33_尚硅谷_Docker_本地镜像推送到阿里云
- uniapp系列之webview加载html 动态创建webview 非url