From 48719b41db5fca5d8671c3af8fb1cfa922f4be67 Mon Sep 17 00:00:00 2001 From: zhouyanli <593579392@qq.com> Date: Mon, 29 Jun 2026 17:09:46 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=85=8D=E7=BD=AEpush=E4=BA=91=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pageSubPack/loginSub/pwd-login.vue | 2 +- .../cloudfunctions/push-send-butler/index.js | 152 ++++++++++++++++-- .../push-send-butler/package.json | 7 +- 3 files changed, 147 insertions(+), 14 deletions(-) diff --git a/wuye-manager-uniapp/pageSubPack/loginSub/pwd-login.vue b/wuye-manager-uniapp/pageSubPack/loginSub/pwd-login.vue index a91c421..7c45ca0 100644 --- a/wuye-manager-uniapp/pageSubPack/loginSub/pwd-login.vue +++ b/wuye-manager-uniapp/pageSubPack/loginSub/pwd-login.vue @@ -178,7 +178,7 @@ } uni.showLoading({ title: '登录中...', mask: true }); const push_cid = uni.getStorageSync('push_cid') - // console.log('cid',push_cid) + // console.log('登录cid',push_cid) let params = { username:phoneNumber.value, password:password.value, diff --git a/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/index.js b/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/index.js index 13153b1..a2953c2 100644 --- a/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/index.js +++ b/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/index.js @@ -1,14 +1,144 @@ 'use strict'; -const uniPush = uniCloud.getPushManager({ - appId: "__UNI__5F224F3" -}) +/** + * 推送云函数 + * 支持单推(cid)和群推(cids) + */ exports.main = async (event, context) => { - const res = await uniPush.sendMessage({ - push_clientid: event.cid, - title: "通知标题", - content: "通知内容", - force_notification: true - }) - return res -} + // HTTP 触发器接收的参数在 event.body 中(JSON 字符串),需要解析 + let requestData; + + if (event.body && typeof event.body === 'string') { + try { + requestData = JSON.parse(event.body); + console.log('成功解析 event.body'); + } catch (e) { + console.error('JSON 解析失败:', e.message); + return { + success: false, + error: { + code: 'ParseError', + message: '请求体 JSON 格式错误' + } + }; + } + } else if (event.body && typeof event.body === 'object') { + // 某些情况下 body 可能已经是对象 + requestData = event.body; + console.log('使用 event.body 对象'); + } else { + // 兼容直接传递参数的情况(非 HTTP 触发器调用或测试环境) + requestData = event; + console.log('使用 event 对象(兼容模式)'); + } + + console.log('请求数据:', JSON.stringify(requestData)); + + // 从解析后的数据中解构参数 + const { appId, cids, cid, title, content, payload, request_id } = requestData; + + // 参数校验 + if (!appId || typeof appId !== 'string') { + console.error('appId 无效:', appId, '类型:', typeof appId); + return { + success: false, + error: { + code: 'ParameterError', + message: '缺少必填参数:appId,且必须为字符串' + } + }; + } + + // 统一推送目标:cid 优先,其次 cids + const clientIds = cid ? [cid] : cids; + if (!clientIds || (Array.isArray(clientIds) && clientIds.length === 0)) { + console.error('clientIds 无效:', clientIds); + return { + success: false, + error: { + code: 'ParameterError', + message: '缺少必填参数:cids 或 cid' + } + }; + } + + if (!title || typeof title !== 'string') { + console.error('title 无效:', title); + return { + success: false, + error: { + code: 'ParameterError', + message: '缺少必填参数:title,且必须为字符串' + } + }; + } + + if (!content || typeof content !== 'string') { + console.error('content 无效'); + return { + success: false, + error: { + code: 'ParameterError', + message: '缺少必填参数:content,且必须为字符串' + } + }; + } + + // 发送推送 + try { + console.log('初始化推送管理器,appId:', appId); + const uniPush = uniCloud.getPushManager({ appId }); + + const sendMessageParams = { + push_clientid: Array.isArray(clientIds) ? clientIds : [clientIds], + title, + content, + force_notification: true // 离线厂商推送必填 + }; + + // 自定义 payload(仅当为有效对象时添加) + if ( + payload && + typeof payload === 'object' && + !Array.isArray(payload) && + Object.keys(payload).length > 0 + ) { + sendMessageParams.payload = payload; + console.log('添加自定义 payload'); + } + + // 可选的 requestId + if (request_id) { + sendMessageParams.request_id = request_id; + console.log('添加 request_id:', request_id); + } + + console.log('准备发送推送,参数:', JSON.stringify(sendMessageParams)); + + const res = await uniPush.sendMessage(sendMessageParams); + + console.log('推送成功,结果:', JSON.stringify(res)); + + return { + success: true, + data: res + }; + + } catch (error) { + // 记录完整错误信息到云函数日志,便于排查 + console.error('push-send 推送失败:', JSON.stringify({ + message: error.message, + errMsg: error.errMsg, + code: error.code, + stack: error.stack + })); + + return { + success: false, + error: { + code: error.code || 'PushError', + message: error.errMsg || error.message || '推送失败,请稍后重试' + } + }; + } +}; diff --git a/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/package.json b/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/package.json index 152a8f7..4cc1936 100644 --- a/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/package.json +++ b/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/package.json @@ -1,8 +1,11 @@ { - "name": "push-send-butler", + "name": "push-send", + "cloudfunction-config": { + "path": "/push-send", + "timeout": 60 + }, "dependencies": {}, "extensions": { - "uni-cloud-jql": {}, "uni-cloud-push": {} } } \ No newline at end of file From c190f607109e9c7fcbca5e0dc9749c1d49faa045 Mon Sep 17 00:00:00 2001 From: zhouyanli <593579392@qq.com> Date: Thu, 2 Jul 2026 15:10:32 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wuye-manager-uniapp/manifest.json | 314 ++++++++++++++---------------- 1 file changed, 147 insertions(+), 167 deletions(-) diff --git a/wuye-manager-uniapp/manifest.json b/wuye-manager-uniapp/manifest.json index e2e74d3..a37c977 100644 --- a/wuye-manager-uniapp/manifest.json +++ b/wuye-manager-uniapp/manifest.json @@ -1,173 +1,153 @@ { - "name": "花开管家", - "appid": "__UNI__5F224F3", - "description": "智慧社区管家端,专为小区物业管理人员打造,支持多小区灵活切换管理。集成账号密码、手机号密码双重登录模式,内置忘记密码找回功能,保障账号安全。涵盖消息通知、日常巡检、故障报修、一键开门、工单流转、投诉处理等核心办公功能,物业人员可在线完成巡检打卡、问题上报、工单派发跟进、投诉对接处理等日常工作,同时支持查看个人上报记录、巡检历史,便捷修改账号信息与登录密码。高效简化社区物业办公流程,提升小区服务与管理效率,打造便捷智能的社区管理服务平台。", - "versionName": "1.0.0", - "versionCode": "100", - "transformPx": false, - "app-plus": { - "usingComponents": true, - "nvueStyleCompiler": "uni-app", - "compilerVersion": 3, - "splashscreen": { - "alwaysShowBeforeRender": true, - "waiting": true, - "autoclose": true, - "delay": 0, - "useOriginalMsgbox": true + "name" : "花开管家", + "appid" : "__UNI__5F224F3", + "description" : "智慧社区管家端,专为小区物业管理人员打造,支持多小区灵活切换管理。集成账号密码、手机号密码双重登录模式,内置忘记密码找回功能,保障账号安全。涵盖消息通知、日常巡检、故障报修、一键开门、工单流转、投诉处理等核心办公功能,物业人员可在线完成巡检打卡、问题上报、工单派发跟进、投诉对接处理等日常工作,同时支持查看个人上报记录、巡检历史,便捷修改账号信息与登录密码。高效简化社区物业办公流程,提升小区服务与管理效率,打造便捷智能的社区管理服务平台。", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0, + "useOriginalMsgbox" : true + }, + "modules" : { + "Geolocation" : {}, + "Camera" : {}, + "Push" : {}, + "Bluetooth" : {} + }, + "distribute" : { + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "ios" : { + "dSYMs" : false, + "privacyDescription" : { + "NSPhotoLibraryUsageDescription" : "需要访问手机相册,选取本地巡检记录照片、业主报修故障图、水电表二维码用于上传工单与巡检台账,仅读取当前业务所需图片,不会获取相册内其他无关照片。", + "NSPhotoLibraryAddUsageDescription" : "需要相册写入权限,保存巡检凭证、报修工单至手机相册,方便线下核对查看,图片仅本地存储,不会上传至无关服务器。", + "NSCameraUsageDescription" : "本应用需要使用相机,用于管家现场巡检拍摄点位记录、处理业主报修拍摄故障照片,扫描水电表二维码抄表,拍摄影像仅用于小区物业工单与巡检业务存档,不会私自留存、对外分享。", + "NSLocationWhenInUseUsageDescription" : "需要获取位置信息", + "NSLocationAlwaysAndWhenInUseUsageDescription" : "需要获取位置信息", + "NSBluetoothPeripheralUsageDescription" : "需要蓝牙权限连接小区智能门禁,实现蓝牙一键开门通行,仅用于小区门禁解锁业务,不采集蓝牙设备信息。", + "NSBluetoothAlwaysUsageDescription" : "本应用需要蓝牙权限,用于扫描、连接小区蓝牙门禁设备实现一键开门,仅和本小区门禁硬件建立通信,不会扫描、连接无关蓝牙设备。" + }, + "urltypes" : [ + { + "urlschemes" : [ "unionpaycashier" ] + } + ], + "idfa" : false + }, + "sdkConfigs" : { + "push" : { + "unipush" : { + "version" : "2", + "offline" : false, + "oppo" : {}, + "vivo" : {}, + "mi" : {}, + "meizu" : {}, + "honor" : {}, + "fcm" : {} + } + }, + "geolocation" : { + "system" : { + "__platform__" : [ "ios", "android" ] + } + } + }, + "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" + } + } + } + } }, - "modules": { - "Geolocation": {}, - "Camera": {}, - "Push": {} + "quickapp" : {}, + "mp-weixin" : { + "appid" : "wx40625124315d2de1", + "usingComponents" : true, + "lazyCodeLoading" : "requiredComponents" }, - "distribute": { - "android": { - "permissions": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "" - ] - }, - "ios": { - "dSYMs": false, - "privacyDescription": { - "NSPhotoLibraryUsageDescription": "需要访问相册选择图片", - "NSPhotoLibraryAddUsageDescription": "需要保存图片到相册", - "NSCameraUsageDescription": "需要使用摄像头进行扫码/拍照", - "NSLocationWhenInUseUsageDescription": "需要获取位置信息", - "NSLocationAlwaysAndWhenInUseUsageDescription": "需要获取位置信息" - }, - "urltypes": [ - { - "urlschemes": ["unionpaycashier"] - } - ] - }, - "sdkConfigs": { - "push": { - "unipush": { - "version": "2", - "offline": false, - "oppo": {}, - "vivo": {}, - "mi": {}, - "meizu": {}, - "honor": {}, - "fcm": {} - } - }, - "geolocation": { - "system": { - "__platform__": ["ios", "android"] - } + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3", + "locale" : "zh-Hans", + "fallbackLocale" : "zh-Hans", + "app-harmony" : { + "distribute" : { + "bundleName" : "com.chengkong.property.butler", + "signingConfigs" : { + "release" : { + "certpath" : "D:/物业app-ios-harmony-证书/new_harmony/新花开物业正式.cer", + "keyAlias" : "wuye_release", + "keyPassword" : "0000001A29DE91ED98E83E4AA715BEF3F0939FE80AD47D2CF45EFF04C4566953153352E9CDF554E10C12", + "profile" : "D:/物业app-ios-harmony-证书/new_harmony/guanjia_profileRelease.p7b", + "signAlg" : "SHA256withECDSA", + "storeFile" : "D:/物业app-ios-harmony-证书/new_harmony/huakaiwuye.p12", + "storePassword" : "0000001A67FD9009C459E134A62BF21903B8C48B1FA0F0C7E320F98C0C8F3132692D86D09FB1A54B39DD" + } + } } - }, - "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" - } - } - } } - }, - "quickapp": {}, - "mp-weixin": { - "appid": "wx40625124315d2de1", - "usingComponents": true, - "lazyCodeLoading": "requiredComponents" - }, - "mp-alipay": { - "usingComponents": true - }, - "mp-baidu": { - "usingComponents": true - }, - "mp-toutiao": { - "usingComponents": true - }, - "uniStatistics": { - "enable": false - }, - "vueVersion": "3", - "locale": "zh-Hans", - "fallbackLocale": "zh-Hans", - "app-harmony": { - "distribute": {} - }, - "quickapp": {}, - "mp-weixin": { - "appid": "wx40625124315d2de1", - "usingComponents": true, - "lazyCodeLoading": "requiredComponents" - }, - "mp-alipay": { - "usingComponents": true - }, - "mp-baidu": { - "usingComponents": true - }, - "mp-toutiao": { - "usingComponents": true - }, - "uniStatistics": { - "enable": false - }, - "vueVersion": "3", - "locale": "zh-Hans", - "fallbackLocale": "zh-Hans", - "app-harmony": { - "distribute": { - "bundleName": "com.chengkong.property.butler", - "signingConfigs": { - "release": { - "certpath": "D:/物业app-ios-harmony-证书/new_harmony/新花开物业正式.cer", - "keyAlias": "wuye_release", - "keyPassword": "0000001A29DE91ED98E83E4AA715BEF3F0939FE80AD47D2CF45EFF04C4566953153352E9CDF554E10C12", - "profile": "D:/物业app-ios-harmony-证书/new_harmony/guanjia_profileRelease.p7b", - "signAlg": "SHA256withECDSA", - "storeFile": "D:/物业app-ios-harmony-证书/new_harmony/huakaiwuye.p12", - "storePassword": "0000001A67FD9009C459E134A62BF21903B8C48B1FA0F0C7E320F98C0C8F3132692D86D09FB1A54B39DD" - } - } - } - } }