feat:修改push通知配置

This commit is contained in:
zheng020 2026-06-16 22:28:53 +08:00
parent b2c044a282
commit 347f39c570
4 changed files with 453 additions and 315 deletions

View File

@ -1,117 +1,255 @@
<script>
import { getGlobalSocket } from '@/utils/socket'
import { emitAppReturnFromBackground } from '@/utils/backgroundRefreshBus.js'
import { getGlobalSocket } from "@/utils/socket";
import { emitAppReturnFromBackground } from "@/utils/backgroundRefreshBus.js";
// storage key
const HIDE_TIME_KEY = 'app_last_hide_time'
const HIDE_TIME_KEY = "app_last_hide_time";
export default {
onLaunch: function() {
console.log('App Launch')
// AI Chat
},
onShow: function() {
console.log('App Show')
this.handleBackgroundReturn()
},
onHide: function() {
console.log('App Hide')
// WebSocket
this.closeWebSocket()
// onShow ""
uni.setStorageSync(HIDE_TIME_KEY, Date.now())
},
methods: {
initWebSocket() {
const token = uni.getStorageSync('access_token')
if (token) {
console.log('初始化全局 WebSocket 连接')
const globalSocket = getGlobalSocket()
globalSocket.init(token)
}
},
closeWebSocket() {
console.log('关闭全局 WebSocket 连接')
const globalSocket = getGlobalSocket()
globalSocket.closeAll()
},
/**
* 处理"从后台切回前台"事件
* 通过 storage 中的上次隐藏时间判断本次 onShow 是否由后台返回触发
* 若是则通知所有订阅了 useBackgroundRefresh 的页面执行刷新
*/
handleBackgroundReturn() {
const lastHide = uni.getStorageSync(HIDE_TIME_KEY) || 0
if (!lastHide) return
// onShow
uni.removeStorageSync(HIDE_TIME_KEY)
//
if (Date.now() - lastHide < 0) return
emitAppReturnFromBackground()
}
}
}
onLaunch: function () {
console.log("App Launch");
// AI Chat
this.setPermissions();
},
onShow: function () {
console.log("App Show");
this.handleBackgroundReturn();
this.getAllNotice();
},
onHide: function () {
console.log("App Hide");
// WebSocket
this.closeWebSocket();
// onShow ""
uni.setStorageSync(HIDE_TIME_KEY, Date.now());
//
this.getAllNotice();
},
methods: {
initWebSocket() {
const token = uni.getStorageSync("access_token");
if (token) {
console.log("初始化全局 WebSocket 连接");
const globalSocket = getGlobalSocket();
globalSocket.init(token);
}
},
closeWebSocket() {
console.log("关闭全局 WebSocket 连接");
const globalSocket = getGlobalSocket();
globalSocket.closeAll();
},
/**
* 处理"从后台切回前台"事件
* 通过 storage 中的上次隐藏时间判断本次 onShow 是否由后台返回触发
* 若是则通知所有订阅了 useBackgroundRefresh 的页面执行刷新
*/
handleBackgroundReturn() {
const lastHide = uni.getStorageSync(HIDE_TIME_KEY) || 0;
if (!lastHide) return;
// onShow
uni.removeStorageSync(HIDE_TIME_KEY);
//
if (Date.now() - lastHide < 0) return;
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.v4androidx
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>
<template>
<view class="app-container">
</view>
<view class="app-container"> </view>
</template>
<style>
/*每个页面公共css */
/*每个页面公共css */
/* 引入 TheMiladiatorRegular 字体 */
@font-face {
font-family: 'TheMiladiatorRegular';
src: url('/static/fonts/The Miladiator Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
font-display: swap;
}
/* 引入 TheMiladiatorRegular 字体 */
@font-face {
font-family: "TheMiladiatorRegular";
src: url("/static/fonts/The Miladiator Regular.ttf") format("truetype");
font-weight: normal;
font-style: normal;
font-display: swap;
}
/* 引入 ZaoZiGongFangJianHei-1 字体 */
@font-face {
font-family: 'ZaoZiGongFangJianHei-1';
src: url('/static/fonts/ZaoZiGongFangJianHei-1.ttf') format('truetype');
font-weight: normal;
font-style: normal;
font-display: swap;
}
/* 引入 ZaoZiGongFangJianHei-1 字体 */
@font-face {
font-family: "ZaoZiGongFangJianHei-1";
src: url("/static/fonts/ZaoZiGongFangJianHei-1.ttf") format("truetype");
font-weight: normal;
font-style: normal;
font-display: swap;
}
/* 引入 ZaoZiGongFangJianHei-1 字体 */
@font-face {
font-family: 'JDLTYuanTiJian';
src: url('/static/fonts/JDLTYuanTiJian.ttf') format('truetype');
font-weight: normal;
font-style: normal;
font-display: swap;
}
/* 引入 ZaoZiGongFangJianHei-1 字体 */
@font-face {
font-family: "JDLTYuanTiJian";
src: url("/static/fonts/JDLTYuanTiJian.ttf") format("truetype");
font-weight: normal;
font-style: normal;
font-display: swap;
}
/* 圆体 JDLTYuanTiJian.ttf 在部分 Android WebView 上报 OTS/cmap 解析失败,暂不 @font-face 加载,避免控制台告警与渲染异常 */
/* 圆体 JDLTYuanTiJian.ttf 在部分 Android WebView 上报 OTS/cmap 解析失败,暂不 @font-face 加载,避免控制台告警与渲染异常 */
/* 全局字体设置 */
body {
font-family:
'JDLTYuanTiJian',
-apple-system,
BlinkMacSystemFont,
'PingFang SC',
'Hiragino Sans GB',
'Microsoft YaHei',
'Noto Sans SC',
sans-serif;
}
/* 全局字体设置 */
body {
font-family:
"JDLTYuanTiJian",
-apple-system,
BlinkMacSystemFont,
"PingFang SC",
"Hiragino Sans GB",
"Microsoft YaHei",
"Noto Sans SC",
sans-serif;
}
/* App 容器 */
.app-container {
width: 100%;
min-height: 100vh;
position: relative;
}
/* App 容器 */
.app-container {
width: 100%;
min-height: 100vh;
position: relative;
}
.page-content {
width: 100%;
min-height: 100vh;
}
.page-content {
width: 100%;
min-height: 100vh;
}
</style>

View File

@ -1,217 +1,217 @@
{
"name" : "TopFans",
"appid" : "__UNI__F199FF4",
"description" : "",
"versionName" : "1.0.5",
"versionCode" : 114,
"transformPx" : false,
/* 5+App */
"app-plus" : {
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"statusbar" : {
"immersed" : true
},
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/* */
"modules" : {
"VideoPlayer" : {},
"Camera" : {},
"Speech" : {},
"Push" : {}
},
"nativePlugins" : {
"imengyu-UniAndroidGyro" : {
"__plugin_info__" : {
"name" : "imengyu-UniAndroidGyro",
"description" : "APP端陀螺仪数据采集",
"platforms" : "Android,iOS",
"url" : "",
"android_package_name" : "",
"ios_bundle_id" : "",
"isCloud" : false,
"bought" : -1,
"pid" : "",
"parameters" : {}
}
}
},
/* */
"distribute" : {
/* android */
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.INTERNET\"/>"
],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a" ]
},
/* ios */
"ios" : {
"dSYMs" : false,
"privacyDescription" : {
"NSCameraUsageDescription" : "我们需要访问相机以便您拍摄头像",
"NSPhotoLibraryUsageDescription" : "我们需要访问相册以便您选择图片",
"NSMicrophoneUsageDescription" : "我们需要访问麦克风以便您使用语音输入功能",
"NSSpeechRecognitionUsageDescription" : "我们需要使用语音识别以便将您的语音转换为文字"
}
},
/* SDK */
"sdkConfigs" : {
"speech" : {
"baidu" : {
"appid" : "122745637",
"apikey" : "l2FgEjJBl96gUsAEQ6nf0asA",
"secretkey" : "1i5Aj8FwL3i11LYPeXMRwRWycictWq2X"
}
},
"push" : {},
"statics" : {},
"ad" : {}
},
"icons" : {
"android" : {
"hdpi" : "unpackage/res/icons/72x72.png",
"xhdpi" : "unpackage/res/icons/96x96.png",
"xxhdpi" : "unpackage/res/icons/144x144.png",
"xxxhdpi" : "unpackage/res/icons/192x192.png"
},
"ios" : {
"appstore" : "unpackage/res/icons/1024x1024.png",
"ipad" : {
"app" : "unpackage/res/icons/76x76.png",
"app@2x" : "unpackage/res/icons/152x152.png",
"notification" : "unpackage/res/icons/20x20.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"proapp@2x" : "unpackage/res/icons/167x167.png",
"settings" : "unpackage/res/icons/29x29.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"spotlight" : "unpackage/res/icons/40x40.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png"
},
"iphone" : {
"app@2x" : "unpackage/res/icons/120x120.png",
"app@3x" : "unpackage/res/icons/180x180.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"notification@3x" : "unpackage/res/icons/60x60.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"settings@3x" : "unpackage/res/icons/87x87.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png",
"spotlight@3x" : "unpackage/res/icons/120x120.png"
}
}
}
},
"uniStatistics" : {
"enable" : true
}
},
/* */
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true,
"uniStatistics" : {
"enable" : false
}
},
"mp-alipay" : {
"usingComponents" : true,
"uniStatistics" : {
"enable" : false
}
},
"mp-baidu" : {
"usingComponents" : true,
"uniStatistics" : {
"enable" : false
}
},
"mp-toutiao" : {
"usingComponents" : true,
"uniStatistics" : {
"enable" : false
}
},
"uniStatistics" : {
"enable" : false,
"version" : "2"
},
"vueVersion" : "3",
"app-harmony" : {
"uniStatistics" : {
"enable" : false
}
},
"h5" : {
"uniStatistics" : {
"enable" : true
}
},
"mp-harmony" : {
"uniStatistics" : {
"enable" : false
}
},
"mp-jd" : {
"uniStatistics" : {
"enable" : false
}
},
"mp-kuaishou" : {
"uniStatistics" : {
"enable" : false
}
},
"mp-lark" : {
"uniStatistics" : {
"enable" : false
}
},
"mp-qq" : {
"uniStatistics" : {
"enable" : false
}
},
"mp-xhs" : {
"uniStatistics" : {
"enable" : false
}
},
"quickapp-webview-huawei" : {
"uniStatistics" : {
"enable" : false
}
},
"quickapp-webview-union" : {
"uniStatistics" : {
"enable" : false
}
}
"name": "TopFans",
"appid": "__UNI__F199FF4",
"description": "",
"versionName": "1.0.5",
"versionCode": 114,
"transformPx": false,
/* 5+App */
"app-plus": {
"usingComponents": true,
"nvueStyleCompiler": "uni-app",
"compilerVersion": 3,
"statusbar": {
"immersed": true
},
"splashscreen": {
"alwaysShowBeforeRender": true,
"waiting": true,
"autoclose": true,
"delay": 0
},
/* */
"modules": {
"VideoPlayer": {},
"Camera": {},
"Speech": {},
"Push": {}
},
"nativePlugins": {
"imengyu-UniAndroidGyro": {
"__plugin_info__": {
"name": "imengyu-UniAndroidGyro",
"description": "APP端陀螺仪数据采集",
"platforms": "Android,iOS",
"url": "",
"android_package_name": "",
"ios_bundle_id": "",
"isCloud": false,
"bought": -1,
"pid": "",
"parameters": {}
}
}
},
/* */
"distribute": {
/* android */
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.INTERNET\"/>"
],
"abiFilters": ["armeabi-v7a", "arm64-v8a"]
},
/* ios */
"ios": {
"dSYMs": false,
"privacyDescription": {
"NSCameraUsageDescription": "我们需要访问相机以便您拍摄头像",
"NSPhotoLibraryUsageDescription": "我们需要访问相册以便您选择图片",
"NSMicrophoneUsageDescription": "我们需要访问麦克风以便您使用语音输入功能",
"NSSpeechRecognitionUsageDescription": "我们需要使用语音识别以便将您的语音转换为文字"
}
},
/* SDK */
"sdkConfigs": {
"speech": {
"baidu": {
"appid": "122745637",
"apikey": "l2FgEjJBl96gUsAEQ6nf0asA",
"secretkey": "1i5Aj8FwL3i11LYPeXMRwRWycictWq2X"
}
},
"push": {},
"statics": {},
"ad": {}
},
"icons": {
"android": {
"hdpi": "unpackage/res/icons/72x72.png",
"xhdpi": "unpackage/res/icons/96x96.png",
"xxhdpi": "unpackage/res/icons/144x144.png",
"xxxhdpi": "unpackage/res/icons/192x192.png"
},
"ios": {
"appstore": "unpackage/res/icons/1024x1024.png",
"ipad": {
"app": "unpackage/res/icons/76x76.png",
"app@2x": "unpackage/res/icons/152x152.png",
"notification": "unpackage/res/icons/20x20.png",
"notification@2x": "unpackage/res/icons/40x40.png",
"proapp@2x": "unpackage/res/icons/167x167.png",
"settings": "unpackage/res/icons/29x29.png",
"settings@2x": "unpackage/res/icons/58x58.png",
"spotlight": "unpackage/res/icons/40x40.png",
"spotlight@2x": "unpackage/res/icons/80x80.png"
},
"iphone": {
"app@2x": "unpackage/res/icons/120x120.png",
"app@3x": "unpackage/res/icons/180x180.png",
"notification@2x": "unpackage/res/icons/40x40.png",
"notification@3x": "unpackage/res/icons/60x60.png",
"settings@2x": "unpackage/res/icons/58x58.png",
"settings@3x": "unpackage/res/icons/87x87.png",
"spotlight@2x": "unpackage/res/icons/80x80.png",
"spotlight@3x": "unpackage/res/icons/120x120.png"
}
}
}
},
"uniStatistics": {
"enable": true
}
},
/* */
"quickapp": {},
/* */
"mp-weixin": {
"appid": "",
"setting": {
"urlCheck": false
},
"usingComponents": true,
"uniStatistics": {
"enable": false
}
},
"mp-alipay": {
"usingComponents": true,
"uniStatistics": {
"enable": false
}
},
"mp-baidu": {
"usingComponents": true,
"uniStatistics": {
"enable": false
}
},
"mp-toutiao": {
"usingComponents": true,
"uniStatistics": {
"enable": false
}
},
"uniStatistics": {
"enable": false,
"version": "2"
},
"vueVersion": "3",
"app-harmony": {
"uniStatistics": {
"enable": false
}
},
"h5": {
"uniStatistics": {
"enable": true
}
},
"mp-harmony": {
"uniStatistics": {
"enable": false
}
},
"mp-jd": {
"uniStatistics": {
"enable": false
}
},
"mp-kuaishou": {
"uniStatistics": {
"enable": false
}
},
"mp-lark": {
"uniStatistics": {
"enable": false
}
},
"mp-qq": {
"uniStatistics": {
"enable": false
}
},
"mp-xhs": {
"uniStatistics": {
"enable": false
}
},
"quickapp-webview-huawei": {
"uniStatistics": {
"enable": false
}
},
"quickapp-webview-union": {
"uniStatistics": {
"enable": false
}
}
}

View File

@ -1,7 +1,7 @@
'use strict';
const uniPush = uniCloud.getPushManager({
appId: "__UNI__9B0F7C5" // 你的应用appId
appId: "__UNI__F199FF4" // 你的应用appId
})
exports.main = async (event) => {
console.log(event)