From 0de1f3f03882eb518ac9926dc3c8132f3f48a383 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 29 Aug 2022 12:12:01 +0800 Subject: [PATCH] fix(push): lazy add listener --- packages/uni-api/src/service/plugin/push.ts | 17 +++++++++++++++++ packages/uni-app-plus/dist/uni.runtime.esm.js | 17 +++++++++++++++++ packages/uni-push/dist/uni-push.es.js | 7 ------- packages/uni-push/dist/uni-push.plus.es.js | 14 -------------- packages/uni-push/src/plus.ts | 7 ------- packages/uni-push/src/route.ts | 7 ------- 6 files changed, 34 insertions(+), 35 deletions(-) diff --git a/packages/uni-api/src/service/plugin/push.ts b/packages/uni-api/src/service/plugin/push.ts index ed83d0ac7..e2caf8073 100644 --- a/packages/uni-api/src/service/plugin/push.ts +++ b/packages/uni-api/src/service/plugin/push.ts @@ -134,8 +134,25 @@ interface OnPushMessageSuccess { type OnPushMessageCallback = (result: OnPushMessageSuccess) => void const onPushMessageCallbacks: OnPushMessageCallback[] = [] +let listening = false // 不使用 defineOnApi 实现,是因为 defineOnApi 依赖 UniServiceJSBridge ,该对象目前在小程序上未提供,故简单实现 export const onPushMessage: (fn: OnPushMessageCallback) => void = (fn) => { + // 不能程序启动时就监听,因为离线事件,仅触发一次,框架监听后,无法转发给还没开始监听的开发者 + if (__PLATFORM__ === 'app' && !listening) { + listening = true + plus.push.addEventListener('click', (result) => { + invokePushCallback({ + type: 'click', + message: result, + }) + }) + plus.push.addEventListener('receive', (result) => { + invokePushCallback({ + type: 'pushMsg', + message: result, + }) + }) + } if (onPushMessageCallbacks.indexOf(fn) === -1) { onPushMessageCallbacks.push(fn) } diff --git a/packages/uni-app-plus/dist/uni.runtime.esm.js b/packages/uni-app-plus/dist/uni.runtime.esm.js index 39de9cb14..8be64a30f 100644 --- a/packages/uni-app-plus/dist/uni.runtime.esm.js +++ b/packages/uni-app-plus/dist/uni.runtime.esm.js @@ -11160,8 +11160,25 @@ const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve, re }); }); const onPushMessageCallbacks = []; +let listening = false; // 不使用 defineOnApi 实现,是因为 defineOnApi 依赖 UniServiceJSBridge ,该对象目前在小程序上未提供,故简单实现 const onPushMessage = (fn) => { + // 不能程序启动时就监听,因为离线事件,仅触发一次,框架监听后,无法转发给还没开始监听的开发者 + if (!listening) { + listening = true; + plus.push.addEventListener('click', (result) => { + invokePushCallback({ + type: 'click', + message: result, + }); + }); + plus.push.addEventListener('receive', (result) => { + invokePushCallback({ + type: 'pushMsg', + message: result, + }); + }); + } if (onPushMessageCallbacks.indexOf(fn) === -1) { onPushMessageCallbacks.push(fn); } diff --git a/packages/uni-push/dist/uni-push.es.js b/packages/uni-push/dist/uni-push.es.js index eba97fae8..c43f8e099 100644 --- a/packages/uni-push/dist/uni-push.es.js +++ b/packages/uni-push/dist/uni-push.es.js @@ -133,13 +133,6 @@ function initPushNotification() { }, }); }); - plus.push.addEventListener('click', (result) => { - // @ts-expect-error - uni.invokePushCallback({ - type: 'click', - message: result, - }); - }); uni.onPushMessage((res) => { if (res.type === 'receive' && res.data && diff --git a/packages/uni-push/dist/uni-push.plus.es.js b/packages/uni-push/dist/uni-push.plus.es.js index f28302f21..418146164 100644 --- a/packages/uni-push/dist/uni-push.plus.es.js +++ b/packages/uni-push/dist/uni-push.plus.es.js @@ -31,13 +31,6 @@ function initPushNotification() { }, }); }); - plus.push.addEventListener('click', (result) => { - // @ts-expect-error - uni.invokePushCallback({ - type: 'click', - message: result, - }); - }); uni.onPushMessage((res) => { if (res.type === 'receive' && res.data && @@ -58,11 +51,4 @@ uni.invokePushCallback({ Promise.resolve().then(() => { initPushNotification(); plus.push.setAutoNotification && plus.push.setAutoNotification(false); - plus.push.addEventListener('receive', (result) => { - // @ts-expect-error - uni.invokePushCallback({ - type: 'pushMsg', - message: result, - }); - }); }); diff --git a/packages/uni-push/src/plus.ts b/packages/uni-push/src/plus.ts index a0c195b1b..aa8a52e91 100644 --- a/packages/uni-push/src/plus.ts +++ b/packages/uni-push/src/plus.ts @@ -8,11 +8,4 @@ uni.invokePushCallback({ Promise.resolve().then(() => { initPushNotification() plus.push.setAutoNotification && plus.push.setAutoNotification(false) - plus.push.addEventListener('receive', (result) => { - // @ts-expect-error - uni.invokePushCallback({ - type: 'pushMsg', - message: result, - }) - }) }) diff --git a/packages/uni-push/src/route.ts b/packages/uni-push/src/route.ts index 53726d74c..3e2e09e41 100644 --- a/packages/uni-push/src/route.ts +++ b/packages/uni-push/src/route.ts @@ -35,13 +35,6 @@ export function initPushNotification() { }) } ) - plus.push.addEventListener('click', (result) => { - // @ts-expect-error - uni.invokePushCallback({ - type: 'click', - message: result, - }) - }) uni.onPushMessage((res) => { if ( res.type === 'receive' && -- GitLab