diff --git a/packages/vue-cli-plugin-uni/packages/uni-push/dist/uni-push.es.js b/packages/vue-cli-plugin-uni/packages/uni-push/dist/uni-push.es.js index 102aa2f893f3ea8c66490b807dd9078bb5525bb5..eba97fae86fd2fb6555ef6d9b356faedc81ba033 100644 --- a/packages/vue-cli-plugin-uni/packages/uni-push/dist/uni-push.es.js +++ b/packages/vue-cli-plugin-uni/packages/uni-push/dist/uni-push.es.js @@ -103,6 +103,36 @@ var GtPush = /*@__PURE__*/getDefaultExportFromCjs(gtpushMin); function initPushNotification() { // 仅 App 端 if (typeof plus !== 'undefined' && plus.push) { + plus.globalEvent.addEventListener('newPath', ({ path }) => { + if (!path) { + return; + } + // 指定的页面为当前页面 + const pages = getCurrentPages(); + const currentPage = pages[pages.length - 1]; + if (currentPage && + currentPage.$page && + currentPage.$page.fullPath === path) { + return; + } + // 简单起见,先尝试 navigateTo 跳转,失败后,再尝试 tabBar 跳转 + uni.navigateTo({ + url: path, + fail(res) { + if (res.errMsg.indexOf('tabbar') > -1) { + uni.switchTab({ + url: path, + fail(res) { + console.error(res.errMsg); + }, + }); + } + else { + console.error(res.errMsg); + } + }, + }); + }); plus.push.addEventListener('click', (result) => { // @ts-expect-error uni.invokePushCallback({ @@ -141,7 +171,9 @@ if (!appid) { }); } else { + // #ifdef APP initPushNotification(); + // #endif GtPush.init({ appid, onError: (res) => { diff --git a/packages/vue-cli-plugin-uni/packages/uni-push/dist/uni-push.plus.es.js b/packages/vue-cli-plugin-uni/packages/uni-push/dist/uni-push.plus.es.js index e30c14a76f5c4d78de5d5004a34f958897a42484..f28302f21454bb2045c30c9a81242ee587f21f74 100644 --- a/packages/vue-cli-plugin-uni/packages/uni-push/dist/uni-push.plus.es.js +++ b/packages/vue-cli-plugin-uni/packages/uni-push/dist/uni-push.plus.es.js @@ -1,17 +1,63 @@ +function initPushNotification() { + // 仅 App 端 + if (typeof plus !== 'undefined' && plus.push) { + plus.globalEvent.addEventListener('newPath', ({ path }) => { + if (!path) { + return; + } + // 指定的页面为当前页面 + const pages = getCurrentPages(); + const currentPage = pages[pages.length - 1]; + if (currentPage && + currentPage.$page && + currentPage.$page.fullPath === path) { + return; + } + // 简单起见,先尝试 navigateTo 跳转,失败后,再尝试 tabBar 跳转 + uni.navigateTo({ + url: path, + fail(res) { + if (res.errMsg.indexOf('tabbar') > -1) { + uni.switchTab({ + url: path, + fail(res) { + console.error(res.errMsg); + }, + }); + } + else { + console.error(res.errMsg); + } + }, + }); + }); + plus.push.addEventListener('click', (result) => { + // @ts-expect-error + uni.invokePushCallback({ + type: 'click', + message: result, + }); + }); + uni.onPushMessage((res) => { + if (res.type === 'receive' && + res.data && + res.data.force_notification) { + // 创建通知栏 + uni.createPushMessage(res.data); + res.stopped = true; + } + }); + } +} + // @ts-expect-error uni.invokePushCallback({ type: 'enabled', offline: true, }); Promise.resolve().then(() => { + initPushNotification(); plus.push.setAutoNotification && plus.push.setAutoNotification(false); - plus.push.addEventListener('click', (result) => { - // @ts-expect-error - uni.invokePushCallback({ - type: 'click', - message: result, - }); - }); plus.push.addEventListener('receive', (result) => { // @ts-expect-error uni.invokePushCallback({ diff --git a/src/core/service/api/plugin/push.js b/src/core/service/api/plugin/push.js index 617ab426873ac81e710782ad481abcbbf82fcdb3..7bbdbe056063e8b4966d1ca10321da3e14582d8c 100644 --- a/src/core/service/api/plugin/push.js +++ b/src/core/service/api/plugin/push.js @@ -9,6 +9,7 @@ import { let cid let cidErrMsg let enabled +let offline function normalizePushMessage (message) { try { @@ -22,6 +23,9 @@ export function invokePushCallback ( ) { if (args.type === 'enabled') { enabled = true + if (__PLATFORM__ === 'app') { + offline = args.offline + } } else if (args.type === 'clientId') { cid = args.cid cidErrMsg = args.errMsg @@ -70,11 +74,34 @@ export function getPushClientId (args) { const hasSuccess = isFn(success) const hasFail = isFn(fail) const hasComplete = isFn(complete) + + // App 端且启用离线时,使用 getClientInfoAsync 来调用 + if (__PLATFORM__ === 'app' && offline) { + plus.push.getClientInfoAsync( + (info) => { + const res = { + errMsg: 'getPushClientId:ok', + cid + } + hasSuccess && success(res) + hasComplete && complete(res) + }, + (res) => { + res = { + errMsg: 'getPushClientId:fail ' + (res.code + ': ' + res.message) + } + hasFail && fail(res) + hasComplete && complete(res) + } + ) + return + } + Promise.resolve().then(() => { if (typeof enabled === 'undefined') { enabled = false cid = '' - cidErrMsg = 'unipush is not enabled' + cidErrMsg = 'uniPush is not enabled' } getPushCidCallbacks.push((cid, errMsg) => { let res