feat:修改push通知配置
This commit is contained in:
parent
b2c044a282
commit
347f39c570
206
frontend/App.vue
206
frontend/App.vue
@ -1,39 +1,45 @@
|
|||||||
<script>
|
<script>
|
||||||
import { getGlobalSocket } from '@/utils/socket'
|
import { getGlobalSocket } from "@/utils/socket";
|
||||||
import { emitAppReturnFromBackground } from '@/utils/backgroundRefreshBus.js'
|
import { emitAppReturnFromBackground } from "@/utils/backgroundRefreshBus.js";
|
||||||
|
|
||||||
// 记录上次隐藏时间的 storage key
|
// 记录上次隐藏时间的 storage key
|
||||||
const HIDE_TIME_KEY = 'app_last_hide_time'
|
const HIDE_TIME_KEY = "app_last_hide_time";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
onLaunch: function () {
|
onLaunch: function () {
|
||||||
console.log('App Launch')
|
console.log("App Launch");
|
||||||
// 不在这里初始化 AI Chat 连接,由各页面自行管理
|
// 不在这里初始化 AI Chat 连接,由各页面自行管理
|
||||||
|
this.setPermissions();
|
||||||
},
|
},
|
||||||
onShow: function () {
|
onShow: function () {
|
||||||
console.log('App Show')
|
console.log("App Show");
|
||||||
this.handleBackgroundReturn()
|
this.handleBackgroundReturn();
|
||||||
|
|
||||||
|
this.getAllNotice();
|
||||||
},
|
},
|
||||||
onHide: function () {
|
onHide: function () {
|
||||||
console.log('App Hide')
|
console.log("App Hide");
|
||||||
// 关闭所有 WebSocket 连接
|
// 关闭所有 WebSocket 连接
|
||||||
this.closeWebSocket()
|
this.closeWebSocket();
|
||||||
// 记录切到后台的时间,用于 onShow 时判断是否"从后台返回"
|
// 记录切到后台的时间,用于 onShow 时判断是否"从后台返回"
|
||||||
uni.setStorageSync(HIDE_TIME_KEY, Date.now())
|
uni.setStorageSync(HIDE_TIME_KEY, Date.now());
|
||||||
|
|
||||||
|
// 应用进入后台时创建本地通知
|
||||||
|
this.getAllNotice();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
initWebSocket() {
|
initWebSocket() {
|
||||||
const token = uni.getStorageSync('access_token')
|
const token = uni.getStorageSync("access_token");
|
||||||
if (token) {
|
if (token) {
|
||||||
console.log('初始化全局 WebSocket 连接')
|
console.log("初始化全局 WebSocket 连接");
|
||||||
const globalSocket = getGlobalSocket()
|
const globalSocket = getGlobalSocket();
|
||||||
globalSocket.init(token)
|
globalSocket.init(token);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
closeWebSocket() {
|
closeWebSocket() {
|
||||||
console.log('关闭全局 WebSocket 连接')
|
console.log("关闭全局 WebSocket 连接");
|
||||||
const globalSocket = getGlobalSocket()
|
const globalSocket = getGlobalSocket();
|
||||||
globalSocket.closeAll()
|
globalSocket.closeAll();
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* 处理"从后台切回前台"事件
|
* 处理"从后台切回前台"事件
|
||||||
@ -41,21 +47,153 @@ export default {
|
|||||||
* 若是,则通知所有订阅了 useBackgroundRefresh 的页面执行刷新
|
* 若是,则通知所有订阅了 useBackgroundRefresh 的页面执行刷新
|
||||||
*/
|
*/
|
||||||
handleBackgroundReturn() {
|
handleBackgroundReturn() {
|
||||||
const lastHide = uni.getStorageSync(HIDE_TIME_KEY) || 0
|
const lastHide = uni.getStorageSync(HIDE_TIME_KEY) || 0;
|
||||||
if (!lastHide) return
|
if (!lastHide) return;
|
||||||
// 清理标记,避免下次普通 onShow(如首次启动)误触发
|
// 清理标记,避免下次普通 onShow(如首次启动)误触发
|
||||||
uni.removeStorageSync(HIDE_TIME_KEY)
|
uni.removeStorageSync(HIDE_TIME_KEY);
|
||||||
// 时间异常保护
|
// 时间异常保护
|
||||||
if (Date.now() - lastHide < 0) return
|
if (Date.now() - lastHide < 0) return;
|
||||||
emitAppReturnFromBackground()
|
emitAppReturnFromBackground();
|
||||||
|
},
|
||||||
|
// 获取消息列表,刚进页面时,在钩子内触发
|
||||||
|
getAllNotice() {
|
||||||
|
// 1 获取客户端推送标识信息 cid , 必须要获取到cid后才能接收推送信息
|
||||||
|
uni.getPushClientId({
|
||||||
|
success: (res) => {
|
||||||
|
// 将获取到的cid存起来,方便其它页面从缓存中获取
|
||||||
|
uni.setStorageSync("cid", res.cid);
|
||||||
|
console.log("客户端推送标识:", res.cid);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// 2 启动监听推送消息事件
|
||||||
|
uni.onPushMessage((res) => {
|
||||||
|
const { type, data } = res;
|
||||||
|
if (type == "click") {
|
||||||
|
console.log('"click"-从系统推送服务点击消息启动应用事件;', res);
|
||||||
|
if (!data?.payload?.url) {
|
||||||
|
console.log(data)
|
||||||
|
uni.reLaunch({
|
||||||
|
// url: "/pagesA/index/index",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: data.payload.url,
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (type == "receive") {
|
||||||
|
console.log('"receive"-应用从推送服务器接收到推送消息事件', res);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
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) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} 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
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view class="app-container">
|
<view class="app-container"> </view>
|
||||||
</view>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@ -63,8 +201,8 @@ export default {
|
|||||||
|
|
||||||
/* 引入 TheMiladiatorRegular 字体 */
|
/* 引入 TheMiladiatorRegular 字体 */
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'TheMiladiatorRegular';
|
font-family: "TheMiladiatorRegular";
|
||||||
src: url('/static/fonts/The Miladiator Regular.ttf') format('truetype');
|
src: url("/static/fonts/The Miladiator Regular.ttf") format("truetype");
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-display: swap;
|
font-display: swap;
|
||||||
@ -72,8 +210,8 @@ export default {
|
|||||||
|
|
||||||
/* 引入 ZaoZiGongFangJianHei-1 字体 */
|
/* 引入 ZaoZiGongFangJianHei-1 字体 */
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'ZaoZiGongFangJianHei-1';
|
font-family: "ZaoZiGongFangJianHei-1";
|
||||||
src: url('/static/fonts/ZaoZiGongFangJianHei-1.ttf') format('truetype');
|
src: url("/static/fonts/ZaoZiGongFangJianHei-1.ttf") format("truetype");
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-display: swap;
|
font-display: swap;
|
||||||
@ -81,8 +219,8 @@ export default {
|
|||||||
|
|
||||||
/* 引入 ZaoZiGongFangJianHei-1 字体 */
|
/* 引入 ZaoZiGongFangJianHei-1 字体 */
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'JDLTYuanTiJian';
|
font-family: "JDLTYuanTiJian";
|
||||||
src: url('/static/fonts/JDLTYuanTiJian.ttf') format('truetype');
|
src: url("/static/fonts/JDLTYuanTiJian.ttf") format("truetype");
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-display: swap;
|
font-display: swap;
|
||||||
@ -93,13 +231,13 @@ export default {
|
|||||||
/* 全局字体设置 */
|
/* 全局字体设置 */
|
||||||
body {
|
body {
|
||||||
font-family:
|
font-family:
|
||||||
'JDLTYuanTiJian',
|
"JDLTYuanTiJian",
|
||||||
-apple-system,
|
-apple-system,
|
||||||
BlinkMacSystemFont,
|
BlinkMacSystemFont,
|
||||||
'PingFang SC',
|
"PingFang SC",
|
||||||
'Hiragino Sans GB',
|
"Hiragino Sans GB",
|
||||||
'Microsoft YaHei',
|
"Microsoft YaHei",
|
||||||
'Noto Sans SC',
|
"Noto Sans SC",
|
||||||
sans-serif;
|
sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const uniPush = uniCloud.getPushManager({
|
const uniPush = uniCloud.getPushManager({
|
||||||
appId: "__UNI__9B0F7C5" // 你的应用appId
|
appId: "__UNI__F199FF4" // 你的应用appId
|
||||||
})
|
})
|
||||||
exports.main = async (event) => {
|
exports.main = async (event) => {
|
||||||
console.log(event)
|
console.log(event)
|
||||||
Loading…
Reference in New Issue
Block a user