提交 51d75c2b 编写于 作者: DCloud-yyl's avatar DCloud-yyl

添加scheme和通用链接启动应用解析直达页面功能

(cherry picked from commit 8efaa21c)
上级 d4021a0d
<script lang="uts"> <script lang="uts">
import { state, setLifeCycleNum } from '@/store/index.uts' import { state, setLifeCycleNum } from '@/store/index.uts'
// #ifdef APP-ANDROID
let firstBackTime = 0
// #endif
export default {
globalData: {
str: 'default globalData str',
num: 0,
bool: false,
obj: {
str: 'default globalData obj str',
num: 0,
bool: false,
},
null: null as string | null,
arr: [] as number[],
mySet: new Set<string>(),
myMap: new Map<string, any>(),
func: () : string => {
return 'globalData func'
},
launchOptions: {
path: '',
} as OnLaunchOptions,
onShowOption: {
path: ''
} as OnShowOptions
},
onLaunch: function (res : OnLaunchOptions) {
this.globalData.launchOptions = res
// 自动化测试
setLifeCycleNum(state.lifeCycleNum + 1000)
console.log('App Launch')
// 页面性能分析
// const performance = uni.getPerformance()
// const observer1: PerformanceObserver = performance.createObserver(
// (entryList: PerformanceObserverEntryList) => {
// console.log('observer1:entryList.getEntries()' +JSON.stringify(entryList.getEntries()))
// }
// )
// observer1.observe({
// entryTypes: ['render', 'navigation'],
// } as PerformanceObserverOptions)
},
onShow: function (res : OnShowOptions) {
this.globalData.onShowOption = res
// #ifdef APP-ANDROID // 处理scheme或通用链接直达
let firstBackTime = 0 let url = this.getRedirectUrl(res.appScheme, res.appLink);
// #endif if (null != url) {
export default { uni.navigateTo({
globalData: { url: url
str: 'default globalData str', })
num: 0, }
bool: false,
obj: { // 自动化测试
str: 'default globalData obj str', setLifeCycleNum(state.lifeCycleNum + 100)
num: 0, console.log('App Show')
bool: false, },
}, onHide: function () {
null: null as string | null, // 自动化测试
arr: [] as number[], setLifeCycleNum(state.lifeCycleNum - 100)
mySet: new Set<string>(), console.log('App Hide')
myMap: new Map<string, any>(), },
func: () : string => { // #ifdef APP-ANDROID
return 'globalData func' onLastPageBackPress: function () {
}, // 自动化测试
launchOptions: { setLifeCycleNum(state.lifeCycleNum - 1000)
path: '', console.log('App LastPageBackPress')
} as OnLaunchOptions, if (firstBackTime == 0) {
onShowOption: { uni.showToast({
path: '' title: '再按一次退出应用',
} as OnShowOptions position: 'bottom',
}, })
onLaunch: function (res : OnLaunchOptions) { firstBackTime = Date.now()
this.globalData.launchOptions = res setTimeout(() => {
firstBackTime = 0
// 自动化测试 }, 2000)
setLifeCycleNum(state.lifeCycleNum + 1000) } else if (Date.now() - firstBackTime < 2000) {
console.log('App Launch') firstBackTime = Date.now()
uni.exit()
// 页面性能分析 }
// const performance = uni.getPerformance() },
// const observer1: PerformanceObserver = performance.createObserver( onExit() {
// (entryList: PerformanceObserverEntryList) => { console.log('App Exit')
// console.log('observer1:entryList.getEntries()' +JSON.stringify(entryList.getEntries())) },
// } // #endif
// ) methods: {
// observer1.observe({ increasetLifeCycleNum() {
// entryTypes: ['render', 'navigation'], setLifeCycleNum(state.lifeCycleNum + 100)
// } as PerformanceObserverOptions) console.log('App increasetLifeCycleNum')
}, },
onShow: function (res : OnShowOptions) { getRedirectUrl(scheme : string | null, ulink : string | null) : string | null {
this.globalData.onShowOption = res //解析scheme或universal link启动直达页面:
//scheme格式:uniappx://redirect/pages/component/view/view?key=value //其中redirect后为页面路径
// 自动化测试 //universal link格式:https://uniappx.dcloud.net.cn/ulink/redirect.html?url=%2Fpages%2Fcomponent%2Fview%2Fview%3Fkey%3Dvalue //通用链接路径需固定,?后面的url参数为直达页面路径,注意url字段值需做url编码(可使用encodeURIComponent方法)
setLifeCycleNum(state.lifeCycleNum + 100) let url : string | null = null;
console.log('App Show') if (null != scheme && scheme.length > 0) {
}, const PATHPRE = 'redirect';
onHide: function () { let parts : string | null = null;
// 自动化测试 let pos = scheme.search('//');
setLifeCycleNum(state.lifeCycleNum - 100) if (pos > 0) {
console.log('App Hide') parts = scheme.substring(pos + 2);
}, }
// #ifdef APP-ANDROID if (null != parts && parts.startsWith(PATHPRE)) {
onLastPageBackPress: function () { url = parts.substring(PATHPRE.length);
// 自动化测试 }
setLifeCycleNum(state.lifeCycleNum - 1000) } else if (null != ulink && ulink.length > 0) {
console.log('App LastPageBackPress') const PATH = 'ulink/redirect.html';
if (firstBackTime == 0) { let parts = ulink.split('?');
uni.showToast({ if (parts.length > 1 && parts[0].endsWith(PATH) && parts[1].length > 0) {
title: '再按一次退出应用', parts[1].split('&').forEach((e) => {
position: 'bottom', let params = e.split('=');
}) if (params.length > 1 && params[0].length > 0 && params[1].length > 0) {
firstBackTime = Date.now() if ('url' == params[0]) {
setTimeout(() => { if (null == url) {
firstBackTime = 0 url = decodeURIComponent(params[1]);
}, 2000) }
} else if (Date.now() - firstBackTime < 2000) { }
firstBackTime = Date.now() }
uni.exit() });
} }
}, }
onExit() { return url;
console.log('App Exit') }
}, }
// #endif }
methods: { </script>
increasetLifeCycleNum() {
setLifeCycleNum(state.lifeCycleNum + 100) <style>
console.log('App increasetLifeCycleNum') /*每个页面公共css */
} @import "./common/uni.css";
}
} /* #ifdef WEB */
</script> .uni-top-window uni-tabbar .uni-tabbar {
background-color: #fff !important;
<style> }
/*每个页面公共css */
@import "./common/uni.css"; .uni-app--showleftwindow .uni-page-head-btn {
display: none !important;
/* #ifdef WEB */ }
.uni-top-window uni-tabbar .uni-tabbar {
background-color: #fff !important; /* #endif */
}
.uni-app--showleftwindow .uni-page-head-btn {
display: none !important;
}
/* #endif */
</style> </style>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册