├── .gitignore ├── README.md ├── docs ├── .vuepress │ ├── .gitignore │ ├── components │ │ └── md │ │ │ ├── banner.vue │ │ │ └── virtual.vue │ ├── config.js │ ├── config │ │ ├── copy.js │ │ ├── footer.js │ │ ├── i18n │ │ │ └── index.js │ │ ├── navbar.js │ │ ├── redirectRouter.js │ │ ├── searchPage.js │ │ ├── siderbar │ │ │ ├── index.js │ │ │ ├── uni-ad.js │ │ │ ├── uni-app.js │ │ │ └── uniCloud.js │ │ └── toc.js │ ├── markdown │ │ ├── createMarkdownArray.js │ │ ├── createSidebar.js │ │ ├── createSiteMap.js │ │ ├── header.js │ │ ├── img-add-attrs.js │ │ ├── inject-json-to-md.js │ │ ├── normallizeLink.js │ │ └── translate.js │ ├── public │ │ ├── h5 │ │ │ ├── hybrid │ │ │ │ └── html │ │ │ │ │ └── local.html │ │ │ ├── index.html │ │ │ ├── pcguide.html │ │ │ └── touch-emulator.js │ │ ├── js │ │ │ ├── miku.js │ │ │ └── redirect.js │ │ ├── miku-delivery-1.2.1.js │ │ ├── miku-delivery-sw-1.2.1.js │ │ ├── pc.html │ │ ├── static │ │ │ ├── web-view-forum.html │ │ │ └── web-view.html │ │ └── svg │ │ │ └── uni-open-bridge.svg │ └── utils │ │ ├── index.js │ │ ├── uniappApiJson.json │ │ └── uniappComJson.json ├── 404.md ├── README.md ├── _sidebar.md ├── api │ ├── README.md │ ├── _sidebar.md │ ├── a-d │ │ ├── content-page.md │ │ ├── full-screen-video.md │ │ ├── interactive.md │ │ ├── interstitial.md │ │ └── rewarded-video.md │ ├── application.md │ ├── arrayBufferToBase64.md │ ├── base64ToArrayBuffer.md │ ├── caniuse.md │ ├── canvas │ │ ├── CanvasContext.md │ │ ├── CanvasGradient.md │ │ ├── canvasGetImageData.md │ │ ├── canvasPutImageData.md │ │ ├── canvasToTempFilePath.md │ │ ├── createCanvasContext.md │ │ └── createOffscreenCanvas.md │ ├── create-webview-context.md │ ├── exit.md │ ├── extapi.md │ ├── file │ │ ├── file.md │ │ └── getFileSystemManager.md │ ├── getEnterOptionsSync.md │ ├── getLaunchOptionsSync.md │ ├── global.md │ ├── interceptor.md │ ├── key.md │ ├── lifecycle.md │ ├── location │ │ ├── location-change.md │ │ ├── location.md │ │ ├── map.md │ │ └── open-location.md │ ├── log.md │ ├── media │ │ ├── audio-context.md │ │ ├── background-audio-manager.md │ │ ├── camera-context.md │ │ ├── editor-context.md │ │ ├── file.md │ │ ├── image.md │ │ ├── live-player-context.md │ │ ├── live-pusher-context.md │ │ ├── media-container.md │ │ ├── record-manager.md │ │ ├── video-context.md │ │ └── video.md │ ├── other │ │ ├── advertisement.md │ │ ├── authorize.md │ │ ├── card.md │ │ ├── choose-address.md │ │ ├── get-extconfig.md │ │ ├── getAccountInfoSync.md │ │ ├── getEnvInfoSync.md │ │ ├── invoice-title.md │ │ ├── open-miniprogram.md │ │ ├── report.md │ │ ├── reportAnalytics.md │ │ ├── reportMonitor.md │ │ ├── requestSubscribeMessage.md │ │ ├── set-enable-debug.md │ │ ├── setting.md │ │ ├── sport.md │ │ ├── template.md │ │ └── update.md │ ├── plugins │ │ ├── facialRecognitionVerify.md │ │ ├── login.md │ │ ├── payment.md │ │ ├── provider.md │ │ ├── push.md │ │ ├── share.md │ │ ├── universal-links.md │ │ ├── virtualPayment.md │ │ └── voice.md │ ├── preload-page.md │ ├── request │ │ ├── UDP.md │ │ ├── mDNS.md │ │ ├── network-file.md │ │ ├── request.md │ │ ├── socket-task.md │ │ └── websocket.md │ ├── router.md │ ├── storage │ │ └── storage.md │ ├── system │ │ ├── accelerometer.md │ │ ├── authentication.md │ │ ├── barcode.md │ │ ├── batteryInfo.md │ │ ├── ble.md │ │ ├── bluetooth.md │ │ ├── brightness.md │ │ ├── capture-screen.md │ │ ├── clipboard.md │ │ ├── compass.md │ │ ├── contact.md │ │ ├── create-request-permission-listener.md │ │ ├── deviceMotion.md │ │ ├── getAppBaseInfo.md │ │ ├── getDeviceInfo.md │ │ ├── getWindowInfo.md │ │ ├── getappauthorizesetting.md │ │ ├── getsystemsetting.md │ │ ├── gyroscope.md │ │ ├── ibeacon.md │ │ ├── info.md │ │ ├── memory.md │ │ ├── network.md │ │ ├── nfc.md │ │ ├── openappauthorizesetting.md │ │ ├── phone.md │ │ ├── theme.md │ │ ├── vibrate.md │ │ └── wifi.md │ ├── timer.md │ ├── ui │ │ ├── adapt.md │ │ ├── animation.md │ │ ├── bgcolor.md │ │ ├── font.md │ │ ├── intersection-observer.md │ │ ├── locale.md │ │ ├── media-query-observer.md │ │ ├── menuButton.md │ │ ├── navigationbar.md │ │ ├── nextTick.md │ │ ├── nodes-info.md │ │ ├── prompt.md │ │ ├── pulldown.md │ │ ├── scroll.md │ │ ├── tabbar.md │ │ └── window.md │ ├── uniCloud.md │ ├── window │ │ ├── communication.md │ │ ├── subNVues.md │ │ └── window.md │ └── worker.md ├── app │ ├── android-store.md │ ├── geolocation.md │ ├── ios │ │ ├── .keep │ │ └── dsym.md │ └── oauth │ │ ├── oauth-facebook.md │ │ └── oauth-google.md ├── case.md ├── casecode.md ├── cloud.md ├── collocation │ ├── App.md │ ├── _sidebar.md │ ├── frame │ │ └── subNVues.md │ ├── main.md │ ├── manifest-app.md │ ├── manifest.md │ ├── package.md │ ├── pages.md │ ├── uni-scss.md │ ├── vite-config.md │ └── vue-config.md ├── component │ ├── README.md │ ├── _sidebar.md │ ├── ad-content-page.md │ ├── ad-draw.md │ ├── ad-error-code.md │ ├── ad-fullscreen-video.md │ ├── ad-grid.md │ ├── ad-interactive.md │ ├── ad-interstitial.md │ ├── ad-rewarded-video.md │ ├── ad-video.md │ ├── ad-weixin.md │ ├── ad.md │ ├── animation-view.md │ ├── audio.md │ ├── barcode.md │ ├── button.md │ ├── camera.md │ ├── canvas.md │ ├── cell.md │ ├── checkbox.md │ ├── component-selection.md │ ├── cover-image.md │ ├── cover-view.md │ ├── custom-tab-bar.md │ ├── datacom.md │ ├── editor.md │ ├── form.md │ ├── icon.md │ ├── image.md │ ├── input.md │ ├── label.md │ ├── list.md │ ├── live-player.md │ ├── live-pusher.md │ ├── map.md │ ├── match-media.md │ ├── movable-area.md │ ├── movable-view.md │ ├── native-component.md │ ├── navigation-bar.md │ ├── navigator.md │ ├── official-account.md │ ├── open-data.md │ ├── page-meta.md │ ├── picker-view.md │ ├── picker.md │ ├── progress.md │ ├── radio.md │ ├── recycle-list.md │ ├── refresh.md │ ├── rich-text.md │ ├── scroll-view.md │ ├── slider.md │ ├── swiper.md │ ├── switch.md │ ├── text.md │ ├── textarea.md │ ├── uni-ad-unimp.md │ ├── uniui │ │ ├── changelog.md │ │ ├── color.md │ │ ├── quickstart.md │ │ ├── resource.md │ │ ├── uni-badge.md │ │ ├── uni-breadcrumb.md │ │ ├── uni-calendar.md │ │ ├── uni-card.md │ │ ├── uni-collapse.md │ │ ├── uni-combox.md │ │ ├── uni-countdown.md │ │ ├── uni-data-checkbox.md │ │ ├── uni-data-picker.md │ │ ├── uni-data-select.md │ │ ├── uni-dateformat.md │ │ ├── uni-datetime-picker.md │ │ ├── uni-drawer.md │ │ ├── uni-easyinput.md │ │ ├── uni-fab.md │ │ ├── uni-fav.md │ │ ├── uni-file-picker.md │ │ ├── uni-forms.md │ │ ├── uni-goods-nav.md │ │ ├── uni-grid.md │ │ ├── uni-group.md │ │ ├── uni-icons.md │ │ ├── uni-indexed-list.md │ │ ├── uni-link.md │ │ ├── uni-list.md │ │ ├── uni-load-more.md │ │ ├── uni-nav-bar.md │ │ ├── uni-notice-bar.md │ │ ├── uni-number-box.md │ │ ├── uni-pagination.md │ │ ├── uni-popup.md │ │ ├── uni-rate.md │ │ ├── uni-row.md │ │ ├── uni-sass.md │ │ ├── uni-search-bar.md │ │ ├── uni-section.md │ │ ├── uni-segmented-control.md │ │ ├── uni-steps.md │ │ ├── uni-swipe-action.md │ │ ├── uni-swiper-dot.md │ │ ├── uni-table.md │ │ ├── uni-tag.md │ │ ├── uni-title.md │ │ ├── uni-tooltip.md │ │ ├── uni-transition.md │ │ └── uni-ui.md │ ├── video.md │ ├── view.md │ ├── vue-component.md │ ├── waterfall.md │ └── web-view.md ├── ecosystem.md ├── faq.md ├── harmony │ └── dev.md ├── history.md ├── hybrid.md ├── license.md ├── m3w.md ├── matter.md ├── plugin │ ├── README.md │ ├── _sidebar.md │ ├── androidInnerLib.md │ ├── components-config.md │ ├── language.md │ ├── native-plugin.md │ ├── oath.md │ ├── open.md │ ├── plugin-author.md │ ├── plugin-ext-introduction.md │ ├── plugin-xss.md │ ├── publish.md │ ├── sell.md │ └── uni_modules.md ├── quickstart-cli.md ├── quickstart-hx.md ├── quickstart.md ├── release-archive.md ├── release-note-alpha-archive.md ├── release-note-alpha.md ├── release.md ├── resource.md ├── select.md ├── template.md ├── translate.md ├── tutorial │ ├── CORS.md │ ├── README.md │ ├── _sidebar.md │ ├── adapt.md │ ├── android-gp.md │ ├── android-store-examination.md │ ├── android-store-faq.md │ ├── android-store.md │ ├── app-android-abifilters.md │ ├── app-android-antiresigne.md │ ├── app-android-minsdkversion.md │ ├── app-android-schemes.md │ ├── app-android-targetsdkversion.md │ ├── app-android-x5.md │ ├── app-base.md │ ├── app-blureffect.md │ ├── app-disagreemode.md │ ├── app-env.md │ ├── app-facialRecognitionVerify.md │ ├── app-geolocation.md │ ├── app-icons.md │ ├── app-ios-capabilities.md │ ├── app-ios-dsym.md │ ├── app-ios-idfa.md │ ├── app-ios-privacyinfo.md │ ├── app-ios-schemes.md │ ├── app-ios-schemewhitelist.md │ ├── app-ios-uibackgroundmodes.md │ ├── app-ios-uiwebview.md │ ├── app-manifest.md │ ├── app-maps.md │ ├── app-modules.md │ ├── app-nativeresource-android.md │ ├── app-nativeresource-ios.md │ ├── app-oauth-apple.md │ ├── app-oauth-facebook-open.md │ ├── app-oauth-facebook.md │ ├── app-oauth-google-open.md │ ├── app-oauth-google.md │ ├── app-oauth-huawei.md │ ├── app-oauth-qq.md │ ├── app-oauth-weibo.md │ ├── app-oauth-weixin.md │ ├── app-oauth.md │ ├── app-pack.md │ ├── app-payment-aip.md │ ├── app-payment-alipay.md │ ├── app-payment-google.md │ ├── app-payment-paypal-open.md │ ├── app-payment-paypal.md │ ├── app-payment-stripe-open.md │ ├── app-payment-stripe.md │ ├── app-payment-weixin.md │ ├── app-payment.md │ ├── app-permission-android.md │ ├── app-privacy-android.md │ ├── app-privacy-detect.md │ ├── app-push-fcm.md │ ├── app-push-unipush.md │ ├── app-push.md │ ├── app-sec-android.md │ ├── app-sec-api.md │ ├── app-sec-confusion.md │ ├── app-security.md │ ├── app-share-qq.md │ ├── app-share-weibo.md │ ├── app-share-weixin.md │ ├── app-share.md │ ├── app-speech.md │ ├── app-splashscreen.md │ ├── app-statistic-google.md │ ├── app-statistic-umeng.md │ ├── app-statistic.md │ ├── app-useragent.md │ ├── app-webview-error.md │ ├── beian.md │ ├── build │ │ ├── AndroidChannel.md │ │ ├── SafePack.md │ │ ├── iosSafePack.md │ │ └── publish-mp-weixin-cli.md │ ├── compiler-cautions.md │ ├── compiler-config.md │ ├── compiler.md │ ├── darkmode.md │ ├── debug │ │ ├── debug-app.md │ │ ├── debug-mp.md │ │ ├── debug-web-via-chrome.md │ │ ├── debug-web-via-hx.md │ │ ├── uni-uts-debug-harmony.md │ │ ├── uni-uts-debug-ios.md │ │ ├── uni-uts-debug.md │ │ ├── uni-vue-devtools.md │ │ └── use-chrome-to-debug-android-apps.md │ ├── djbh.md │ ├── env.md │ ├── err-spec.md │ ├── harmony │ │ ├── built-in-module.md │ │ ├── dev-old.md │ │ ├── dev-v1.md │ │ ├── dev-v2.md │ │ ├── dev.md │ │ ├── history.md │ │ ├── intro.md │ │ ├── mp-sdk.md │ │ ├── native-api.md │ │ ├── native-component.md │ │ └── runbuild.md │ ├── hosting.md │ ├── i18n.md │ ├── internationalization.md │ ├── ios-app-store.md │ ├── migration-to-vue3.md │ ├── miniprogram-subject.md │ ├── mp-harmony │ │ └── intro.md │ ├── mp-weixin-plugin-dev.md │ ├── mp-weixin-plugin.md │ ├── mp-weixin-user-privacy.md │ ├── native-js.md │ ├── nvue-api.md │ ├── nvue-css.md │ ├── nvue-event.md │ ├── nvue-outline.md │ ├── page-component.md │ ├── page-json.md │ ├── page-path.md │ ├── page-script.md │ ├── page-static-assets.md │ ├── page-style.md │ ├── page.md │ ├── performance.md │ ├── platform.md │ ├── project-concept.md │ ├── project.md │ ├── renderjs.md │ ├── run-and-debug.md │ ├── run │ │ ├── OOM.md │ │ ├── apple-signature-ipa.md │ │ ├── installSimulator.md │ │ ├── ios-apple-certificate-signature.md │ │ ├── mp-log.md │ │ ├── run-app-android-wifi.md │ │ ├── run-app-faq.md │ │ ├── run-app-harmony-moved.md │ │ ├── run-app-harmony.md │ │ ├── run-app.md │ │ ├── run-custom-base-ios-simulator.md │ │ ├── uts-development-android.md │ │ └── uts-development-ios.md │ ├── safe.md │ ├── snippet.md │ ├── ssr.md │ ├── store.md │ ├── syntax-css.md │ ├── syntax-js.md │ ├── syntax-jsx.md │ ├── typescript-subject.md │ ├── use-html5plus.md │ ├── version.md │ ├── vue-api.md │ ├── vue-basics.md │ ├── vue-components.md │ ├── vue-composition-api.md │ ├── vue-vuex.md │ ├── vue3-api.md │ ├── vue3-basics.md │ ├── vue3-components.md │ ├── vue3-composition-api.md │ ├── vue3-pinia.md │ ├── vue3-vuex.md │ └── web-security.md ├── uni-ad │ ├── README.md │ ├── _sidebar.md │ ├── ad-alipay-native.md │ ├── ad-alipay.md │ ├── ad-card.md │ ├── ad-component.md │ ├── ad-content-page.md │ ├── ad-draw.md │ ├── ad-error-code.md │ ├── ad-fullscreen-video.md │ ├── ad-grid.md │ ├── ad-interactive.md │ ├── ad-interstitial.md │ ├── ad-rewarded-video.md │ ├── ad-splash.md │ ├── ad-video.md │ ├── ad-weixin-agency.md │ ├── ad-weixin-dcloud.md │ ├── ad-weixin-native.md │ ├── ad-weixin.md │ ├── release.md │ ├── uni-ad.md │ └── unimp.md ├── uni-app-x │ └── readme.md ├── uni-stat-uniappx.md ├── uni-stat-v1.md ├── uni-stat-v2.md ├── uni-stat.md ├── uniCloud │ └── README.md ├── unipush-custom-icon.md ├── unipush-v1.md ├── unipush-v2.md ├── unipush.md ├── unipush_vendor_config.md ├── univerify.md ├── use.md ├── user-frv-auth.md ├── vernacular.md ├── vue2-cli-alpha-release.md ├── vue2-cli-release.md ├── vue2-ts-cli-alpha-release.md ├── vue2-ts-cli-release.md ├── vue3-cli-alpha-release.md ├── vue3-cli-release.md ├── vue3-ts-cli-alpha-release.md ├── vue3-ts-cli-release.md └── worktile │ ├── CI.md │ ├── CLI.md │ ├── README.md │ ├── _sidebar.md │ ├── auto │ ├── api.md │ ├── hbuilderx-extension │ │ └── index.md │ ├── quick-start.md │ └── uniapp-cli-project.md │ ├── git-svn.md │ └── running-env.md ├── package.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | docs/.vuepress/dist 3 | .DS_Store 4 | **/sitemap.xml 5 | docs-lite 6 | dist 7 | docs/.vuepress/.cache 8 | docs/.vuepress/.temp -------------------------------------------------------------------------------- /docs/.vuepress/.gitignore: -------------------------------------------------------------------------------- 1 | dist -------------------------------------------------------------------------------- /docs/.vuepress/components/md/virtual.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 50 | -------------------------------------------------------------------------------- /docs/.vuepress/config/copy.js: -------------------------------------------------------------------------------- 1 | // 此处需要使用 commonjs 2 | 3 | module.exports = { 4 | copyText: '复制代码', 5 | tip: { content: "复制成功", title: "" }, 6 | visibleTip: true, 7 | } -------------------------------------------------------------------------------- /docs/.vuepress/config/i18n/index.js: -------------------------------------------------------------------------------- 1 | export const LOCALE_ZH_HANS = 'zh-CN' 2 | export const LOCALE_EN = 'en-US' -------------------------------------------------------------------------------- /docs/.vuepress/config/searchPage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | category: [ 3 | { 4 | text: 'uni-app', 5 | type: 'algolia', 6 | }, 7 | { 8 | text: 'uni-app x', 9 | type: 'algolia', 10 | }, 11 | /* { 12 | text: 'uniCloud', 13 | type: 'algolia', 14 | }, */ 15 | { 16 | text: '问答社区', 17 | tag: 'ask', 18 | type: 'link', 19 | link: 'https://ask.dcloud.net.cn/search/q-', 20 | }, 21 | { 22 | text: '插件市场', 23 | tag: 'ext', 24 | type: 'link', 25 | link: 'https://ext.dcloud.net.cn/search?q=', 26 | }, 27 | { 28 | text: '原生开发文档', 29 | type: 'link', 30 | link: 'https://nativesupport.dcloud.net.cn/?s=', 31 | }, 32 | { 33 | text: 'HBuilderX 文档', 34 | type: 'link', 35 | link: 'https://hx.dcloud.net.cn/?s=', 36 | }, 37 | ], 38 | translations: { 39 | searchBox: { 40 | buttonText: '取消', 41 | placeholder: '搜索内容', 42 | searchBy: '搜索提供者', 43 | }, 44 | resultsScreen: { 45 | resultsText: '${resultHits}个相关结果', 46 | noResultsText: '没有找到${categoryText}相关内容', 47 | askNoResultsText: '以下为${categoryText}相关内容', 48 | }, 49 | }, 50 | extraFacetFilters: ['category:uni-ad广告', 'tag:UTS', 'tag:插件'], 51 | } 52 | -------------------------------------------------------------------------------- /docs/.vuepress/config/siderbar/index.js: -------------------------------------------------------------------------------- 1 | import uniapp from './uni-app'; 2 | import uniCloud from './uniCloud'; 3 | import uniAd from './uni-ad'; 4 | 5 | export default { 6 | "/": uniapp, 7 | "/uni-ad/": uniAd, 8 | // "/uni-app-x/": uniapp, 9 | // '/uniCloud/': uniCloud, 10 | weChatOfficialAccountImg: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/weixin.jpg' 11 | } 12 | -------------------------------------------------------------------------------- /docs/.vuepress/config/siderbar/uni-ad.js: -------------------------------------------------------------------------------- 1 | export default { 2 | contacts: [ 3 | { 4 | type: 'links', 5 | name: 'uni-ad的uni-im交流群', 6 | imageUrl: 7 | 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/chat-icon-r.png', 8 | items: [ 9 | { 10 | name: '点击加入', 11 | url: 'https://im.dcloud.net.cn/#/?joinGroup=65d85fc09847e92db03ff81a', 12 | } 13 | ], 14 | } 15 | ] 16 | }; 17 | -------------------------------------------------------------------------------- /docs/.vuepress/config/siderbar/uniCloud.js: -------------------------------------------------------------------------------- 1 | export default { 2 | contacts: [ 3 | { 4 | type: 'link', 5 | items: [ 6 | { 7 | name: 'uniCloud Web控制台', 8 | url: 'https://unicloud.dcloud.net.cn', 9 | imageUrl: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/cloud@2x.jpg', 10 | }, 11 | { 12 | name: '插件市场', 13 | url: 'https://ext.dcloud.net.cn/', 14 | imageUrl: 'https://img-cdn-aliyun.dcloud.net.cn/dev/img/ext/favicon.png', 15 | }, 16 | { 17 | name: 'ask问答社区', 18 | url: 'https://ask.dcloud.net.cn/explore/', 19 | imageUrl: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/d@2x.png', 20 | }, 21 | { 22 | name: 'uni-ad', 23 | url: 'https://uniad.dcloud.net.cn', 24 | imageUrl: 25 | 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uniad-520.png', 26 | }, 27 | { 28 | name: 'uni统计', 29 | url: 'https://tongji.dcloud.net.cn/', 30 | imageUrl: 31 | 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-tongji-icon.png', 32 | }, 33 | ] 34 | } 35 | ], 36 | qq_group: [ 37 | { 38 | number: '1012245137', 39 | state: 1, 40 | attendance: 2000, 41 | prefix: '群1', 42 | }, 43 | { 44 | number: '749911289', 45 | state: 1, 46 | attendance: 1000, 47 | prefix: '群2', 48 | }, 49 | { 50 | number: '599819864', 51 | state: 1, 52 | attendance: 1000, 53 | prefix: '群3', 54 | }, 55 | { 56 | number: '641753405', 57 | state: 1, 58 | attendance: 1000, 59 | prefix: '群4', 60 | }, 61 | { 62 | number: '806429316', 63 | state: 1, 64 | attendance: 2000, 65 | prefix: '群5', 66 | }, 67 | { 68 | number: '741357947', 69 | state: 0, 70 | prefix: '群6', 71 | joinQQGroupHref: 72 | 'https://qm.qq.com/cgi-bin/qm/qr?k=GmOeLLMnc5WcgNllzKEsq7UG0Oq-8DHp&jump_from=webapi&authKey=LL8+4dkOgBwUqJ8aapXJD2/tOSi/PFO5ZAuhr7eD7obfLtXEvGsFvhGjC8pj2PfM', 73 | }, 74 | ], 75 | }; 76 | -------------------------------------------------------------------------------- /docs/.vuepress/config/toc.js: -------------------------------------------------------------------------------- 1 | export default { 2 | onThisPage: '本页导读', 3 | collapseText: '展示全部', 4 | expandText: '收起目录' 5 | } -------------------------------------------------------------------------------- /docs/.vuepress/markdown/createMarkdownArray.js: -------------------------------------------------------------------------------- 1 | 2 | function createMarkdownArray(contents = [], childrenName = 'children') { 3 | const markdownArray = [] 4 | let itemCatch = {} 5 | for (let index = 0; index < contents.length; index++) { 6 | const item = contents[index]; 7 | 8 | if (itemCatch.parent) { 9 | if (item.level === itemCatch.level) { 10 | const child = { 11 | ...item, 12 | parent: itemCatch.parent 13 | }; 14 | itemCatch.parent[childrenName].push(child) 15 | delete itemCatch.parent 16 | itemCatch = child 17 | continue 18 | } else if (item.level > itemCatch.level) { 19 | const child = { 20 | ...item, 21 | parent: itemCatch 22 | }; 23 | (itemCatch[childrenName] || (itemCatch[childrenName] = [])).push(child) 24 | itemCatch = child 25 | } else { 26 | const parent = itemCatch.parent 27 | delete itemCatch.parent 28 | itemCatch = parent 29 | index-- 30 | continue 31 | } 32 | } else { 33 | if (typeof itemCatch.level === 'undefined' || item.level === itemCatch.level) { 34 | itemCatch = item 35 | markdownArray.push(itemCatch) 36 | } else { 37 | const child = { 38 | ...item, 39 | parent: itemCatch 40 | }; 41 | (itemCatch[childrenName] || (itemCatch[childrenName] = [])).push(child) 42 | itemCatch = child 43 | continue 44 | } 45 | } 46 | } 47 | 48 | // 移除最后一项 parent 节点,防止循环引用报错 49 | (function removeParent(childs = []) { 50 | childs.forEach(child => { 51 | if (child.parent) delete child.parent 52 | if (child[childrenName]) removeParent(child[childrenName]) 53 | }) 54 | })(markdownArray[markdownArray.length - 1][childrenName]) 55 | 56 | return markdownArray 57 | } 58 | 59 | module.exports = createMarkdownArray -------------------------------------------------------------------------------- /docs/.vuepress/markdown/createSiteMap.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const path = require('path') 3 | 4 | const domain = 'https://zh.uniapp.dcloud.io' 5 | const xmlBefore = ` 6 | 7 | ` 8 | const xmlAfter = `\n` 9 | 10 | module.exports = (links, callback = () => { }) => { 11 | const xmlItems = links.map(url => { 12 | if (!url.endsWith('/') && !url.endsWith('html')) url += '.html' 13 | return ` 14 | ${domain + url} 15 | ` 16 | }).join('\n') 17 | 18 | const rootPath = path.resolve(__dirname, '../public') 19 | const staticExists = fs.existsSync(rootPath) 20 | if (!staticExists) fs.mkdirSync(rootPath) 21 | 22 | fs.writeFile( 23 | path.resolve(rootPath, 'sitemap.xml'), 24 | xmlBefore + xmlItems + xmlAfter, 25 | { encoding: 'utf-8' }, 26 | callback 27 | ) 28 | } -------------------------------------------------------------------------------- /docs/.vuepress/markdown/header.js: -------------------------------------------------------------------------------- 1 | function parseHeader(tokens) { 2 | tokens.forEach((t, i) => { 3 | if (t.type === 'heading_open' && /h\d/.test(t.tag)) { 4 | const token = tokens[i + 1] 5 | const title = token.content 6 | const res = title.match(/\s*(.+?)@(.+?)\s*$/) 7 | if (res) { 8 | token.content = res[1] 9 | for (let i = 0, array = token.children, l = array.length; i < l; i++) { 10 | const token = array[l - 1 - i] 11 | if (token.type === 'text') { 12 | const title = token.content 13 | const res = title.match(/(.*)@.+/) 14 | if (res) { 15 | token.content = res[1] 16 | break 17 | } 18 | } 19 | } 20 | } 21 | } 22 | }) 23 | return tokens 24 | } 25 | 26 | module.exports = md => { 27 | md.parse = (function (mdParse) { 28 | return function (src, ...array) { 29 | return parseHeader(mdParse.bind(this)(src, ...array)) 30 | } 31 | })(md.parse) 32 | } 33 | -------------------------------------------------------------------------------- /docs/.vuepress/markdown/inject-json-to-md.js: -------------------------------------------------------------------------------- 1 | let utsApiJson = {} 2 | let utsComJson = {} 3 | try { 4 | utsApiJson = require('../utils/uniappApiJson.json') 5 | } catch (error) {} 6 | try { 7 | utsComJson = require('../utils/uniappComJson.json') 8 | } catch (error) {} 9 | 10 | function getRegExp(key, text) { 11 | return new RegExp(``) 12 | } 13 | 14 | /** 15 | * 16 | * @param {string} text 17 | * @returns {{match: RegExpMatchArray | null, json: {}, regExp: RegExp | null} 18 | */ 19 | const getJSON = text => { 20 | const APIJSONRegExp = getRegExp('UNIAPPAPIJSON') 21 | match = text.match(APIJSONRegExp) 22 | APIJSONRegExp.lastIndex = 0 23 | if (match) { 24 | return { 25 | match, 26 | json: utsApiJson, 27 | regExp: APIJSONRegExp, 28 | } 29 | } 30 | 31 | const COMJSONRegExp = getRegExp('UNIAPPCOMJSON') 32 | match = text.match(COMJSONRegExp) 33 | COMJSONRegExp.lastIndex = 0 34 | if (match) { 35 | return { 36 | match, 37 | json: utsComJson, 38 | regExp: COMJSONRegExp, 39 | } 40 | } 41 | 42 | return { 43 | match: null, 44 | json: {}, 45 | regExp: null, 46 | } 47 | } 48 | 49 | const NEWLINE_CHARACTER = /\r?\n/ 50 | 51 | module.exports = md => { 52 | md.parse = (function (MD_PARSE) { 53 | return function (src, ...args) { 54 | if (src && getJSON(src).match) { 55 | const lines = src.split(NEWLINE_CHARACTER) 56 | for (let index = 0; index < lines.length; index++) { 57 | const line = lines[index] 58 | 59 | const { match, json, regExp } = getJSON(line) 60 | if (match && regExp) { 61 | const jsonPath = match[1] 62 | const path = jsonPath.split('.') 63 | let temp = json 64 | path.forEach(key => { 65 | if (!temp) return false 66 | temp = temp[key] 67 | }) 68 | if (typeof temp === 'undefined') continue 69 | lines[index] = lines[index].replace(regExp, temp) 70 | } 71 | } 72 | 73 | return MD_PARSE.bind(this)(lines.join('\n'), ...args) 74 | } 75 | return MD_PARSE.bind(this)(src, ...args) 76 | } 77 | })(md.parse) 78 | } 79 | -------------------------------------------------------------------------------- /docs/.vuepress/markdown/normallizeLink.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const folderNames = [] 3 | fs.readdirSync('docs').forEach(item => { 4 | fs.lstatSync(`docs/${item}`).isDirectory() && folderNames.push(item) 5 | }) 6 | 7 | function isExternal(path) { 8 | return /^[a-z]+:/i.test(path) 9 | } 10 | 11 | function normalizeLink(url) { 12 | if (!url.startsWith('/') && folderNames.some(item => url.split('/')[0] === item)) { 13 | return '/' + url 14 | } 15 | return url 16 | } 17 | 18 | module.exports = function (md) { 19 | md.normalizeLink = (function (oldNormalizeLink) { 20 | return function (url) { 21 | url = isExternal(url) 22 | ? url 23 | : normalizeLink(url) 24 | .replace(/(\bREADME\.md\b)|(\bREADME(?!\.))/i, 'index.html') // README.md | README | readme.md | readme -> index.html 25 | .replace(/(\bindex\.md\b)|(index(?!\.))/, 'index.html') // /index -> /index.html 26 | .replace(/\.md\b/, '.html') // *.md -> *.html 27 | .replace(/\?id=/, '#') // ?id= -> # 28 | .replace(/\\/g, '/') // \ -> / 29 | return oldNormalizeLink.bind(this)(url) 30 | } 31 | })(md.normalizeLink) 32 | } -------------------------------------------------------------------------------- /docs/.vuepress/markdown/translate.js: -------------------------------------------------------------------------------- 1 | module.exports = md => { 2 | md.parse = (function (mdParse) { 3 | return function (src, ...array) { 4 | return mdParse.bind(this)(src, ...array) 5 | } 6 | })(md.parse) 7 | md.render = (function (mdRender) { 8 | return function (src, ...array) { 9 | return mdRender.bind(this)(src, ...array) 10 | } 11 | })(md.render) 12 | } 13 | -------------------------------------------------------------------------------- /docs/.vuepress/public/h5/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/.vuepress/public/js/miku.js: -------------------------------------------------------------------------------- 1 | mikuDelivery.initProxy('/miku-delivery-sw-1.2.1.js', { 2 | /** appID 和 appSalt 由七牛配置提供*/ 3 | app: { 4 | appID: 'r5v5l8yhuips0xwv', 5 | appSalt: 'ejhqsncr0hrwcadkfrsh07n3p6wxt9q3' 6 | }, 7 | /** 需要被代理的域名列表,域名需要提前在七牛创建完成,由七牛配置 ecdn 功能 */ 8 | domains: ['qiniu-web-assets.dcloud.net.cn'], 9 | // debug: true 10 | }) -------------------------------------------------------------------------------- /docs/.vuepress/public/js/redirect.js: -------------------------------------------------------------------------------- 1 | var { host, pathname, search, hash } = location 2 | var LOCAL_ZH = 'zh' 3 | var LOCAL_EN = 'en' 4 | var website_ZH_host = 'uniapp.dcloud.net.cn' 5 | var website_EN_host = 'en.uniapp.dcloud.io' 6 | var website_ZH = 'https://' + website_ZH_host; 7 | var website_EN = 'https://' + website_EN_host; 8 | var _hmt = _hmt || []; 9 | 10 | // window.__UNI_DOCS_ZH_KEY__ = 'unidocs-zh-language' 11 | 12 | if (host === 'uniapp.dcloud.io') { 13 | var unidocsLanguage = localStorage.getItem('__UNIDOCS_LANGUAGE') 14 | var website_finally = 15 | navigator.language.indexOf('zh') !== -1 16 | ? website_ZH 17 | : website_EN; 18 | if (unidocsLanguage) { 19 | website_finally = unidocsLanguage === LOCAL_ZH ? website_ZH : website_EN 20 | } 21 | window.location.href = website_finally + pathname + hash + search; 22 | } else { 23 | // overwrite referrer 24 | if ( 25 | search.indexOf('hmsr=vueen') !== -1 && 26 | document.referrer === 'https://uniapp.dcloud.io/' 27 | ) { 28 | Object.defineProperty( 29 | document, 30 | 'referrer', 31 | { value: 'https://vuejs.org/', configurable: true } 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /docs/.vuepress/utils/index.js: -------------------------------------------------------------------------------- 1 | function isExternal(path) { 2 | return /^[a-z]+:/i.test(path) 3 | } 4 | 5 | function simplifySlugText(text) { 6 | // 移除方法后面的括号及里面的内容 7 | if (text.match(/^uni/) && text.match(/\)$/)) { 8 | text = text.replace(/^uni/, '').replace(/\(.*\)$/, ''); 9 | } 10 | // 处理部分非uni开头方法的括号内容,主要是会出现多参数的情况。 11 | if (text.match(/\([\w+\s+\[\],]+\)$/)) { 12 | text = text.replace(/\([\w+\s+\[\],]+\)$/, ''); 13 | } 14 | return text; 15 | } 16 | 17 | // 顺序有要求,会影响 for 循环匹配侧边栏 18 | const tabs = [ 19 | '/uni-ad/', '/plugin/', '/worktile/', '/tutorial/', '/collocation/', '/component/', '/api/', '/', 20 | ] 21 | 22 | module.exports = { 23 | isExternal, 24 | simplifySlugText, 25 | tabs: process.env.DOCS_LITE ? [] : tabs 26 | } -------------------------------------------------------------------------------- /docs/404.md: -------------------------------------------------------------------------------- 1 |

页面迷路了

2 |

1. 请确认访问地址是否有误
2. 请检查网络环境是否通畅
3. 关闭广告屏蔽插件后重试

-------------------------------------------------------------------------------- /docs/_sidebar.md: -------------------------------------------------------------------------------- 1 | * [什么是 uni-app](README.md) 2 | * 快速上手 3 | * [1. 通过 HBuilderX 可视化界面](quickstart-hx.md) 4 | * [2. 通过vue-cli命令行](quickstart-cli.md) 5 | * [uni-app的由来](history.md) 6 | * [如何学习](resource.md) 7 | * [选型指南](select.md) 8 | * [跨端注意](matter.md) 9 | * [常见问题](faq.md) 10 | * [其他项目转uni-app](translate.md) 11 | * [老项目引入uni-app](hybrid.md) 12 | * 运营服务 13 | * [统一发行页面](https://doc.dcloud.net.cn/uniCloud/uni-portal.html) 14 | * [前端网页托管](https://doc.dcloud.net.cn/uniCloud/hosting.html) 15 | * [App升级中心](https://doc.dcloud.net.cn/uniCloud/upgrade-center.html) 16 | * [uni一键登录](univerify.md) 17 | * [uni实人认证](https://doc.dcloud.net.cn/uniCloud/frv/intro.html) 18 | * [uni-push统一推送](unipush.md) 19 | * [uni-push1.0](unipush-v1.md) 20 | * [uni-push2.0](unipush-v2.md) 21 | * [业务文档](unipush-v2.md) 22 | * 开发文档 23 | * [uni-app客户端api](https://uniapp.dcloud.net.cn/api/plugins/push.html) 24 | * [uni-app x客户端api](https://doc.dcloud.net.cn/uni-app-x/api/push.html) 25 | * [服务端api](https://doc.dcloud.net.cn/uniCloud/uni-cloud-push/api.html) 26 | * [uni-push2.0、uni-id、uni统计的组合](https://doc.dcloud.net.cn/uniCloud/uni-cloud-push/mate.html) 27 | * [uni统计](uni-stat.md) 28 | * [uni统计2.0](uni-stat-v2.md) 29 | * [uni统计1.0](uni-stat-v1.md) 30 | * [uni-app x下的uni统计使用教程](uni-stat-uniappx.md) 31 | * [uni加固](/tutorial/app-security.md) 32 | * [uni隐私合规检测](/tutorial/app-privacy-detect.md) 33 | * [地图商业授权](/tutorial/app-geolocation.md?id=lic) 34 | * [案例](case.md) 35 | * 更新日志 36 | * [正式版](release.md) 37 | * [正式版 Vue2 CLI 配置](vue2-cli-release.md) 38 | * [正式版 Vue3 CLI 配置](vue3-cli-release.md) 39 | * [正式版 Vue2 Ts CLI 配置](vue2-ts-cli-release.md) 40 | * [正式版 Vue3 Ts CLI 配置](vue3-ts-cli-release.md) 41 | * [Alpha版](release-note-alpha.md) 42 | * [Alpha版 Vue2 CLI 配置](vue2-cli-alpha-release.md) 43 | * [Alpha版 Vue3 CLI 配置](vue3-cli-alpha-release.md) 44 | * [Alpha版 Vue2 Ts CLI 配置](vue2-ts-cli-alpha-release.md) 45 | * [Alpha版 Vue3 Ts CLI 配置](vue3-ts-cli-alpha-release.md) 46 | -------------------------------------------------------------------------------- /docs/api/a-d/content-page.md: -------------------------------------------------------------------------------- 1 | ### 短视频内容联盟广告 2 | 3 | 简介 4 | 5 | ⼀个视频内容频道,支持上下滑动切换视频内容 6 | 7 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/ad-content-page.png) 8 | 9 | 10 | 内容联盟广告是一个原生全屏组件,大小不可控制 11 | 12 | 如果需要嵌入到页面控制大小请使用 [短视频内容联盟组件](https://uniapp.dcloud.net.cn/component/ad-content-page) 13 | 14 | **平台差异说明** 15 | 16 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序| 17 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 18 | |√(3.1.5+)|x|x|x|x|x|x|x|x|x| 19 | 20 | 21 | **开通配置广告** 22 | 23 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 24 | 25 | 26 | 文档已迁移至 [短视频内容联盟广告](https://uniapp.dcloud.net.cn/uni-ad/ad-content-page.html) 27 | -------------------------------------------------------------------------------- /docs/api/a-d/full-screen-video.md: -------------------------------------------------------------------------------- 1 | ### 全屏视频广告 2 | 3 | [全屏视频广告介绍](https://uniapp.dcloud.net.cn/component/ad-fullscreen-video.html) 4 | 5 | **平台差异说明** 6 | 7 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|小红书小程序|元服务| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |√(2.9.5+)|x|x|x|x|x|x|x|x|x|x|x| 10 | 11 | 12 | **开通配置广告** 13 | 14 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 15 | 16 | 文档已迁移至 [全屏视频](https://uniapp.dcloud.net.cn/uni-ad/ad-fullscreen-video.html) 17 | -------------------------------------------------------------------------------- /docs/api/a-d/interstitial.md: -------------------------------------------------------------------------------- 1 | ### 插屏广告 2 | 3 | [插屏广告介绍](https://uniapp.dcloud.net.cn/component/ad-interstitial.html) 4 | 5 | **平台差异说明** 6 | 7 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|小红书小程序| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |App 3.1.10+|x|x|√|x|x|x|√|x|x|x| 10 | 11 | **开通配置广告** 12 | 13 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 14 | 15 | 16 | 文档已迁移至 [插屏视频](https://uniapp.dcloud.net.cn/uni-ad/ad-interstitial.html) 17 | -------------------------------------------------------------------------------- /docs/api/arrayBufferToBase64.md: -------------------------------------------------------------------------------- 1 | ## uni.arrayBufferToBase64(arrayBuffer) 2 | 3 | 将 ArrayBuffer 对象转成 Base64 字符串 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|快手小程序|京东小程序|元服务|小红书小程序| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |√|√|√|x|x|x|√|√|x|√| 10 | 11 | 12 | 13 | **参数说明** 14 | 15 | |参数|类型|必填|说明| 16 | |:-|:-|:-|:-| 17 | |arrayBuffer|ArrayBuffer|是|要转换成 Base64 字符串的 ArrayBuffer 对象| 18 | 19 | **示例** 20 | 21 | ```javascript 22 | const arrayBuffer = new Uint8Array([55, 55, 55]) 23 | const base64 = uni.arrayBufferToBase64(arrayBuffer) 24 | ``` 25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/api/base64ToArrayBuffer.md: -------------------------------------------------------------------------------- 1 | ## uni.base64ToArrayBuffer(base64) 2 | 3 | 将 Base64 字符串转成 ArrayBuffer 对象 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|快手小程序|京东小程序|元服务|小红书小程序| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |√|√|√|x|x|√|√|√|x|√| 10 | 11 | 12 | 13 | **参数说明** 14 | 15 | |参数|类型|必填|说明| 16 | |:-|:-|:-|:-| 17 | |base64|String|是|要转化成 ArrayBuffer 对象的 Base64 字符串| 18 | 19 | **示例** 20 | 21 | ```javascript 22 | const base64 = 'test' 23 | const arrayBuffer = uni.base64ToArrayBuffer(base64) 24 | ``` 25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/api/caniuse.md: -------------------------------------------------------------------------------- 1 | ## uni.canIUse(String) 2 | 判断应用的 API,回调,参数,组件等是否在当前版本可用。 3 | 4 | 平台差异说明 5 | 6 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ程序|元服务|小红书小程序| 7 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 8 | |√|HBuilder 4.23|√ (uni-app 3.4.13+)|√|√|√|√|√|√|√| 9 | 10 | **String 参数说明** 11 | 12 | 使用 ``${API}.${method}.${param}.${options}`` 或者 ``${component}.${attribute}.${option}`` 方式来调用,例如: 13 | 14 | - ``${API}`` 代表 API 名字 15 | - ``${method}`` 代表调用方式,有效值为return, success, object, callback 16 | - ``${param}`` 代表参数或者返回值 17 | - ``${options}`` 代表参数的可选值 18 | - ``${component}`` 代表组件名字 19 | - ``${attribute}`` 代表组件属性 20 | - ``${option}`` 代表组件属性的可选值 21 | 22 | **示例** 23 | 24 | ```javascript 25 | uni.canIUse('getSystemInfoSync.return.screenWidth'); 26 | uni.canIUse('getSystemInfo.success.screenWidth'); 27 | uni.canIUse('showToast.object.image'); 28 | uni.canIUse('request.object.method.GET'); 29 | 30 | uni.canIUse('live-player'); 31 | uni.canIUse('text.selectable'); 32 | uni.canIUse('button.open-type.contact'); 33 | ``` 34 | 35 | **Tips** 36 | - App、web 端暂不支持 ``${API}.${method}.${param}.${options}`` 方式调用,只支持 ``${API}`` 37 | - App、Web 端部分 API 实际未实现,具体结果以 API 页面实现表格为准 -------------------------------------------------------------------------------- /docs/api/canvas/CanvasGradient.md: -------------------------------------------------------------------------------- 1 | ## CanvasGradient.addColorStop(stop,color) 2 | 3 | 创建一个颜色的渐变点。 4 | - 小于最小 stop 的部分会按最小 stop 的 color 来渲染,大于最大 stop 的部分会按最大 stop 的 color 来渲染。 5 | 6 | - 需要使用 ```addColorStop()``` 来指定渐变点,至少要两个。 7 | 8 | ### 参数 9 | 10 | |参数|类型 |定义 | 11 | |---|---|--- | 12 | |stop |Number(0-1)|表示渐变点在起点和终点中的位置 | 13 | |color |Color |渐变点的颜色| 14 | 15 | **示例代码** 16 | 17 | ```javascript 18 | const ctx = uni.createCanvasContext('myCanvas') 19 | 20 | // Create circular gradient 21 | const grd = ctx.createLinearGradient(30, 10, 120, 10) 22 | grd.addColorStop(0, 'red') 23 | grd.addColorStop(0.16, 'orange') 24 | grd.addColorStop(0.33, 'yellow') 25 | grd.addColorStop(0.5, 'green') 26 | grd.addColorStop(0.66, 'cyan') 27 | grd.addColorStop(0.83, 'blue') 28 | grd.addColorStop(1, 'purple') 29 | 30 | // Fill with gradient 31 | ctx.setFillStyle(grd) 32 | ctx.fillRect(10, 10, 150, 80) 33 | ctx.draw() 34 | ``` 35 | 36 | ![uniapp](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/color-stop.png) 37 | -------------------------------------------------------------------------------- /docs/api/canvas/canvasGetImageData.md: -------------------------------------------------------------------------------- 1 | ## uni.canvasGetImageData(OBJECT, componentInstance) 2 | 3 | 返回一个数组,用来描述 canvas 区域隐含的像素数据,在自定义组件下,第二个参数传入自定义组件实例 this,以操作组件内 `` 组件。 4 | 5 | |元服务| 6 | |:-:| 7 | |x| 8 | 9 | 10 | 11 | **OBJECT参数说明:** 12 | 13 | |参数|类型|必填|说明| 14 | |---|---|---|---| 15 | |canvasId|String|是|画布标识,传入 `````` 的 canvas-id(支付宝小程序是id、其他平台是canvas-id)| 16 | |x|Number|是|将要被提取的图像数据矩形区域的左上角 x 坐标| 17 | |y|Number|是|将要被提取的图像数据矩形区域的左上角 y 坐标| 18 | |width|Number|是|将要被提取的图像数据矩形区域的宽度| 19 | |height|Number|是|将要被提取的图像数据矩形区域的高度| 20 | |success|Function|否|接口调用成功的回调函数| 21 | |fail|Function|否|接口调用失败的回调函数| 22 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 23 | 24 | **success回调返回参数:** 25 | 26 | |参数|类型|说明| 27 | |---|---|---| 28 | |errMsg|String|| 29 | |width|Number|图像数据矩形的宽度| 30 | |height|Number|图像数据矩形的高度| 31 | |data|Uint8ClampedArray|图像像素点数据,一维数组,每四项表示一个像素点的rgba| 32 | 33 | 34 | 35 | **示例代码** 36 | 37 | ```javascript 38 | uni.canvasGetImageData({ 39 | canvasId: 'myCanvas', 40 | x: 0, 41 | y: 0, 42 | width: 100, 43 | height: 100, 44 | success(res) { 45 | console.log(res.width) // 100 46 | console.log(res.height) // 100 47 | console.log(res.data instanceof Uint8ClampedArray) // true 48 | console.log(res.data.length) // 100 * 100 * 4 49 | } 50 | }) 51 | ``` 52 | 53 | 54 | -------------------------------------------------------------------------------- /docs/api/canvas/canvasPutImageData.md: -------------------------------------------------------------------------------- 1 | ## uni.canvasPutImageData(OBJECT, componentInstance) 2 | 3 | 将像素数据绘制到画布的方法,在自定义组件下,第二个参数传入自定义组件实例 this,以操作组件内 `` 组件 4 | 5 | |元服务| 6 | |:-:| 7 | |1.0.3+| 8 | 9 | 10 | 11 | **OBJECT参数说明:** 12 | 13 | |参数|类型|必填|说明|最低版本| 14 | |---|---|---|---|--| 15 | |canvasId|String|是|画布标识,传入 `````` 的 canvas-id(支付宝小程序是id、其他平台是canvas-id)|| 16 | |data|Uint8ClampedArray|是|图像像素点数据,一维数组,每四项表示一个像素点的rgba|| 17 | |x|Number|是|源图像数据在目标画布中的位置偏移量(x 轴方向的偏移量)|| 18 | |y|Number|是|源图像数据在目标画布中的位置偏移量(y 轴方向的偏移量)|| 19 | |width|Number|是|源图像数据矩形区域的宽度|| 20 | |height|Number|否|源图像数据矩形区域的高度|| 21 | |success|Function|否|接口调用成功的回调函数|| 22 | |fail|Function|否|接口调用失败的回调函数|| 23 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| | 24 | 25 | 26 | 27 | 28 | **示例代码** 29 | 30 | ```javascript 31 | const data = new Uint8ClampedArray([255, 0, 0, 255]) 32 | uni.canvasPutImageData({ 33 | canvasId: 'myCanvas', 34 | x: 0, 35 | y: 0, 36 | width: 1, 37 | data: data, 38 | success(res) {} 39 | }) 40 | ``` 41 | 42 | 43 | -------------------------------------------------------------------------------- /docs/api/canvas/canvasToTempFilePath.md: -------------------------------------------------------------------------------- 1 | ## uni.canvasToTempFilePath(object, componentInstance) 2 | 3 | 把当前画布指定区域的内容导出生成指定大小的图片,并返回文件路径。在自定义组件下,第二个参数传入自定义组件实例,以操作组件内 `` 组件。 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |√|√|√|√|√|√|√|√|√|√| 10 | 11 | 12 | 13 | **object参数说明:** 14 | 15 | |参数 |类型 |必填 |说明 | 16 | |---|---|---|---| 17 | |x |Number |否 |画布x轴起点(默认0)| 18 | |y |Number |否 |画布y轴起点(默认0)| 19 | |width |Number |否 |画布宽度(默认为canvas宽度-x)| 20 | |height |Number |否 |画布高度(默认为canvas高度-y)| 21 | |destWidth |Number |否 |输出图片宽度(默认为 width * 屏幕像素密度)| 22 | |destHeight |Number |否 |输出图片高度(默认为 height * 屏幕像素密度)| 23 | |canvasId |String |是 |画布标识,传入 ```` 的 canvas-id(支付宝小程序是id、其他平台是canvas-id)| 24 | |fileType |String |否 |目标文件的类型,只支持 'jpg' 或 'png'。默认为 'png'| 25 | |quality |Number |否 |图片的质量,取值范围为 (0, 1],不在范围内时当作1.0处理| 26 | |success |Function |否 |接口调用成功的回调函数| 27 | |fail |Function |否 |接口调用失败的回调函数| 28 | |complete |Function |否 |接口调用结束的回调函数(调用成功、失败都会执行) | 29 | 30 | 31 | 32 | **示例代码** 33 | 34 | ```javascript 35 | uni.canvasToTempFilePath({ 36 | x: 100, 37 | y: 200, 38 | width: 50, 39 | height: 50, 40 | destWidth: 100, 41 | destHeight: 100, 42 | canvasId: 'myCanvas', 43 | success: function(res) { 44 | // 在H5平台下,tempFilePath 为 base64 45 | console.log(res.tempFilePath) 46 | } 47 | }) 48 | ``` 49 | 50 | **Tips** 51 | 52 | - H5端 Canvas 内绘制的图像需要支持跨域访问才能成功。 53 | 54 | 55 | -------------------------------------------------------------------------------- /docs/api/canvas/createCanvasContext.md: -------------------------------------------------------------------------------- 1 | ## uni.createCanvasContext(canvasId, componentInstance) 2 | 3 | 4 | 5 | ### 定义 6 | 7 | 创建 ```canvas``` 绘图上下文(指定 canvasId)。在自定义组件下,第二个参数传入组件实例this,以操作组件内 `````` 组件 8 | 9 | **Tip:** 需要指定 canvasId,该绘图上下文只作用于对应的 `` 10 | 11 | ### 参数 12 | 13 | |参数|类型|说明| 14 | |----|----|-----| 15 | |canvasId|String |画布标识,传入定义在 `` 的 canvas-id或id(支付宝小程序是id、其他平台是canvas-id) | 16 | |componentInstance|Object |自定义组件实例 this ,表示在这个自定义组件下查找拥有 canvas-id 的 `` ,如果省略,则不在任何自定义组件内查找 | 17 | 18 | 19 | 20 | ### 返回值 21 | 22 | [CanvasContext](/api/canvas/CanvasContext.md) 23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/api/canvas/createOffscreenCanvas.md: -------------------------------------------------------------------------------- 1 | 2 | ## uni.createOffscreenCanvas() 3 | 4 | 创建离屏 canvas 实例 5 | 6 | 仅微信小程序平台支持,[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.createOffscreenCanvas.html) 7 | -------------------------------------------------------------------------------- /docs/api/create-webview-context.md: -------------------------------------------------------------------------------- 1 | ## uni.createWebviewContext(webviewId, component?) @createwebviewcontext 2 | 3 | > 仅 HarmonyOS 支持 4 | 5 | 6 | 7 | |元服务| 8 | |:-:| 9 | |x| 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /docs/api/exit.md: -------------------------------------------------------------------------------- 1 | ## uni.exit(OBJECT) 2 | 3 | 退出当前应用。 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |√|x|x|x|x|x|x|x|x| 10 | 11 | 12 | 13 | **注意** 14 | - HBuilderX3.8.15+ 新增支持 15 | - 小程序端必须有点击行为才能调用成功 16 | - App-iOS平台可以调用此API,但不支持退出应用功能,触发fail回调返回system not support错误 17 | 18 | **OBJECT参数说明** 19 | 20 | |参数|类型|必填|默认值|说明|平台差异说明| 21 | |:-|:-|:-|:-|:-|:-| 22 | |success|Function|否|接口调用成功的回调函数| 23 | |fail|Function|否|接口调用失败的回调函数| 24 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 25 | 26 | **示例** 27 | 28 | ```javascript 29 | // 退出应用 30 | uni.exit({ 31 | success: () => { 32 | console.log("exit success") 33 | }, 34 | fail: (e) => { 35 | console.log("exit fail") 36 | } 37 | }); 38 | ``` 39 | 40 | 41 | ## 错误码 42 | 43 | |错误码 |错误信息 |说明 | 44 | |--- |---- |------ | 45 | |12001 |system not support |当前系统不支持相关能力 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /docs/api/file/getFileSystemManager.md: -------------------------------------------------------------------------------- 1 | ## uni.getFileSystemManager() @getfilesystemmanager 2 | 3 | > 仅 HarmonyOS 支持 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | ## 其他平台 20 | 21 | - 微信小程序平台,[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.getFileSystemManager.html) 22 | - 抖音小程序平台,[规范详情](https://developer.open-douyin.com/docs/resource/zh-CN/interaction/develop/api/file/tt-get-file-system-manager/) 23 | - QQ小程序平台,[规范详情](https://q.qq.com/wiki/develop/miniprogram/API/file/qq.getFileSystemManager.html) 24 | - app平台,目前uni-app x支持本API,[另见](https://doc.dcloud.net.cn/uni-app-x/api/get-file-system-manager.html),但uni-app js引擎版还不支持,可部分替代的方案是plus.io,[另见](https://www.html5plus.org/doc/zh_cn/io.html) 25 | - 鸿蒙元服务平台,[详情](https://developer.huawei.com/consumer/cn/doc/atomic-ascf-V5/apis-file-V5) 26 | -------------------------------------------------------------------------------- /docs/api/global.md: -------------------------------------------------------------------------------- 1 | ## uniIDHasRole 2 | 3 | 新增于`HBuilderX 3.1.15`,判断当前用户是否拥有某角色。此功能依赖uni-id[另见详情](https://uniapp.dcloud.io/uniCloud/uni-id) 4 | 5 | 需要应用关联 [uniCloud](https://uniapp.dcloud.net.cn/uniCloud/README) 服务空间并使用 [uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id/summary.html)。 6 | 7 | > 需要在token内缓存角色权限才可使用,请参考:[缓存角色权限](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=cachepermissionintoken) 8 | 9 | **在模板内使用** 10 | 11 | ```html 12 | 15 | ``` 16 | 17 | **在页面/组件js代码中使用** 18 | 19 | ```html 20 | 23 | 30 | ``` 31 | 32 | ## uniIDHasPermission 33 | 34 | 新增于`HBuilderX 3.1.15`,判断当前用户是否拥有某权限,注意:admin角色的用户拥有所有权限。此功能依赖uni-id[另见详情](https://uniapp.dcloud.io/uniCloud/uni-id) 35 | 36 | 需要应用关联 [uniCloud](https://uniapp.dcloud.net.cn/uniCloud/README) 服务空间并使用 [uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id/summary.html)。 37 | 38 | > 需要在token内缓存角色权限才可使用,请参考:[缓存角色权限](https://uniapp.dcloud.net.cn/uniCloud/uni-id/summary.html#cache-permission-in-token) 39 | 40 | **在模板内使用** 41 | 42 | ```html 43 | 46 | ``` 47 | 48 | **在页面/组件js代码中使用** 49 | 50 | ```html 51 | 54 | 61 | ``` 62 | -------------------------------------------------------------------------------- /docs/api/interceptor.md: -------------------------------------------------------------------------------- 1 | ## uni.addInterceptor(STRING, OBJECT) 2 | 添加拦截器 3 | 4 | 5 | 6 | 7 | **STRING 参数说明** 8 | 9 | 需要拦截的`api`名称,如:`uni.addInterceptor('request', OBJECT)` ,将拦截 `uni.request()` 10 | 11 | 注意: 12 | 13 | - 仅支持异步接口,如:`uni.setStorage(OBJECT)`,暂不支持同步接口如:`uni.setStorageSync(KEY,DATA)` 14 | - uniCloud请求云端接口时(callFunction、uploadFile等)也会使用uni.request发送请求,请确保拦截器内不错误的处理此类请求 15 | 16 | **OBJECT 参数说明** 17 | 18 | |参数名 |类型 |必填 |默认值 |说明 |平台差异说明 | 19 | |:- |:- |:- |:- |:- |:- | 20 | |invoke |Function |否 | |拦截前触发 | | 21 | |returnValue |Function |否 | |方法调用后触发,处理返回值 | | 22 | |success |Function |否 | |成功回调拦截 | | 23 | |fail |Function |否 | |失败回调拦截 | | 24 | |complete |Function |否 | |完成回调拦截 | | 25 | 26 | 27 | **示例** 28 | 29 | ```javascript 30 | uni.request({ 31 | url: 'request/login', //仅为示例,并非真实接口地址。 32 | success: (res) => { 33 | console.log(res.data); 34 | // 打印: {code:1,...} 35 | } 36 | }); 37 | 38 | 39 | uni.addInterceptor('request', { 40 | invoke(args) { 41 | // request 触发前拼接 url 42 | args.url = 'https://www.example.com/'+args.url 43 | }, 44 | success(args) { 45 | // 请求成功后,修改code值为1 46 | args.data.code = 1 47 | }, 48 | fail(err) { 49 | console.log('interceptor-fail',err) 50 | }, 51 | complete(res) { 52 | console.log('interceptor-complete',res) 53 | } 54 | }) 55 | 56 | uni.addInterceptor({ 57 | returnValue(args) { 58 | // 只返回 data 字段 59 | return args.data 60 | } 61 | }) 62 | 63 | ``` 64 | 65 | ## uni.removeInterceptor(STRING) 66 | 删除拦截器 67 | 68 | 69 | 70 | **STRING 参数说明** 71 | 72 | 需要删除拦截器的`api`名称 73 | 74 | **示例** 75 | 76 | ```javascript 77 | 78 | uni.removeInterceptor('request') 79 | 80 | ``` 81 | 82 | 注意:拦截[uni.switchTab](https://uniapp.dcloud.io/api/router?id=switchtab)本身没有问题。但是在微信小程序端点击`tabbar`的底层逻辑并不是触发`uni.switchTab`。所以误认为拦截无效,此类场景的解决方案是在`tabbar`页面的页面生命周期`onShow`中处理。 83 | 84 | ##### 拦截器的适用场景非常多,比如路由拦截,权限引导等。 85 | > 你可以参考插件市场,拦截器应用示例:图片选择api时无权限,引导用户快捷打开系统设置:[https://ext.dcloud.net.cn/plugin?id=5095](https://ext.dcloud.net.cn/plugin?id=5095) 86 | -------------------------------------------------------------------------------- /docs/api/lifecycle.md: -------------------------------------------------------------------------------- 1 | ### 应用生命周期 2 | 3 | ``uni-app`` 支持 onLaunch、onShow、onHide 等应用生命周期函数,详情请参考[应用生命周期](/collocation/App.md#applifecycle) 4 | 5 | ### 页面生命周期 6 | 7 | ``uni-app`` 支持 onLoad、onShow、onReady 等生命周期函数,详情请参考[页面生命周期](/tutorial/page.md#lifecycle) -------------------------------------------------------------------------------- /docs/api/log.md: -------------------------------------------------------------------------------- 1 | ### console 2 | 向控制台打印日志信息。 3 | ### debug 4 | 向控制台打印 debug 日志 5 | 6 | 注:App 端 debug 方法等同于 log 方法。 7 | ### log 8 | 向控制台打印 log 日志 9 | ### info 10 | 向控制台打印 info 日志 11 | ### warn 12 | 向控制台打印 warn 日志 13 | ### error 14 | 向控制台打印 error 日志 15 | 16 | **注意:** 17 | 18 | - 不同平台对于 console 方法的支持存在差异,建议在开发过程中只使用文档中提到的方法。 19 | - HBuilderX中有2个重要的代码块,敲`clog`:可直接输出`console.log()`;敲`clogv`:可输出`console.log(": " + );`,并且出现双光标,方便把变量名称和值同时打印出来。 20 | -------------------------------------------------------------------------------- /docs/api/media/media-container.md: -------------------------------------------------------------------------------- 1 | ## uni.createMediaContainer() 2 | 创建音视频处理容器,最终可将容器中的轨道合成一个视频 ,返回 `MediaContainer` 对象 3 | 4 | **平台差异说明** 5 | 6 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务|小红书小程序| 7 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 8 | |x|x|2.9.0+|x|x|x|x|x|x|x|x| 9 | 10 | ### MediaContainer.addTrack(track) 11 | 将音频或视频轨道添加到容器 12 | 13 | **参数说明** 14 | 15 | |参数|说明| 16 | |:-|:-| 17 | |track|要添加的音频或视频轨道| 18 | 19 | ### MediaContainer.destroy() 20 | 将容器销毁,释放资源 21 | 22 | ### MediaContainer.export() 23 | 将容器内的轨道合并并导出视频文件 24 | 25 | ### MediaContainer.extractDataSource(object) 26 | 将容器内的轨道合并并导出视频文件 ,返回 `MediaTrack` 对象 27 | 28 | **参数说明** 29 | 30 | |属性|类型|必填 |说明| 31 | |:-|:-|:-|:-| 32 | |source|String|是|视频源地址,只支持本地文件| 33 | 34 | ### MediaContainer.removeTrack(track) 35 | 将音频或视频轨道添加到容器 36 | 37 | **参数说明** 38 | 39 | |参数|说明| 40 | |:-|:-| 41 | |track|要移除的音频或视频轨道| 42 | 43 | 44 | ## MediaTrack 45 | 可通过 `MediaContainer.extractDataSource` 返回。 46 | 47 | `MediaTrack` 音频或视频轨道,可以对轨道进行一些操作 48 | 49 | **参数说明** 50 | 51 | |属性|类型|说明| 52 | |:-|:-|:-| 53 | |kind|String|轨道类型,只读 ,audio:音频轨道;video:视频轨道 | 54 | |duration|Number|轨道长度,只读 | 55 | |volume|Number|音量,音频轨道下有效,可写 | 56 | -------------------------------------------------------------------------------- /docs/api/other/advertisement.md: -------------------------------------------------------------------------------- 1 | #### 广告 2 | 3 | 广告API 4 | 5 | 广告能力在不同小程序端实现不同,使用时需注意用[条件编译](https://uniapp.dcloud.io/platform)调用不同平台的代码。 6 | 7 | - App平台:无需编码,在打包App时可直接勾选广告位,[详见](https://dcloud.io/dad.html) 8 | - 微信小程序:[规范文档](https://developers.weixin.qq.com/miniprogram/dev/api/wx.createRewardedVideoAd.html) 9 | - 百度小程序:有组件但无API 10 | - 支付宝小程序:不支持此能力 11 | - 抖音小程序:仅小游戏可用,小程序不可用,不适用于uni-app 12 | - QQ小程序:[规范文档](https://q.qq.com/wiki/develop/miniprogram/API/ad/qq.createRewardedVideoAd.html) -------------------------------------------------------------------------------- /docs/api/other/card.md: -------------------------------------------------------------------------------- 1 | 2 | #### 卡券 3 | 4 | 仅微信小程序、支付宝小程序支持,各平台开发方式暂未统一,使用时需注意用[条件编译](https://uniapp.dcloud.io/platform)调用不同平台的代码。 5 | 6 | - 微信小程序:[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.openCard.html) 7 | - 支付宝小程序:[规范详情](https://docs.alipay.com/mini/api/card-voucher-ticket) -------------------------------------------------------------------------------- /docs/api/other/choose-address.md: -------------------------------------------------------------------------------- 1 | ## uni.chooseAddress(OBJECT) 2 | 3 | 获取用户收货地址。调起用户编辑收货地址原生界面,并在编辑完成后返回用户选择的地址,需要用户授权 scope.address。 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |x|x|√|√|√|√|x|x|x|x|√| 10 | 11 | **OBJECT参数说明** 12 | 13 | | 属性 | 类型 | 必填 | 说明 | 14 | | --- | --- | --- | --- | --- | 15 | | success | function|否 | 接口调用成功的回调函数 | 16 | | fail | function|否 | 接口调用失败的回调函数 | 17 | | complete | function|否 | 接口调用结束的回调函数(调用成功、失败都会执行) | 18 | 19 | **success返回参数说明** 20 | 21 | 22 | | 属性 | 类型 | 说明 |平台差异说明| 23 | | --- | --- | --- |---| 24 | | userName | string | 收货人姓名 || 25 | | postalCode | string | 邮编 || 26 | | provinceName | string | 国标收货地址第一级地址 || 27 | | cityName | string | 国标收货地址第二级地址 || 28 | | countyName | string | 国标收货地址第三级地址 || 29 | | streetName | string | 国标收货地址第四级地址 |微信小程序| 30 | | detailInfo | string | 详细收货地址信息 || 31 | | detailInfoNew | string | 新选择器详细收货地址信息 |微信小程序| 32 | | nationalCode | string | 收货地址国家码 || 33 | | telNumber | string | 收货人手机号码 || 34 | | errMsg | string | 错误信息 |微信小程序| 35 | 36 | 37 | **示例代码** 38 | 39 | ```js 40 | uni.chooseAddress({ 41 | success(res) { 42 | console.log(res.userName) 43 | console.log(res.postalCode) 44 | console.log(res.provinceName) 45 | console.log(res.cityName) 46 | console.log(res.countyName) 47 | console.log(res.detailInfo) 48 | console.log(res.nationalCode) 49 | console.log(res.telNumber) 50 | } 51 | }) 52 | ``` 53 | -------------------------------------------------------------------------------- /docs/api/other/get-extconfig.md: -------------------------------------------------------------------------------- 1 | ## uni.getExtConfig(OBJECT) 2 | 3 | 获取第三方平台自定义的数据字段。 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |x|x|√|x|√|√|x|x|x|x|√| 10 | 11 | **OBJECT参数说明** 12 | 13 | | 属性 | 类型 | 默认值 | 必填 | 说明 | 14 | | --- | --- | --- | --- | --- | 15 | | success | function | | 否 | 接口调用成功的回调函数 | 16 | | fail | function | | 否 | 接口调用失败的回调函数 | 17 | | complete | function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | 18 | 19 | **success 回调参数说明** 20 | 21 | | 属性 | 类型 | 说明 | 22 | | --- | --- | --- | 23 | | extConfig | Object | 第三方平台自定义的数据 | 24 | 25 | **Tips** 26 | 27 | * 本接口暂时无法通过 `uni.canIUse`判断是否兼容,开发者需要自行判断 `uni.getExtConfig` 是否存在来兼容。 28 | 29 | **示例代码** 30 | 31 | ``` 32 | if (uni.getExtConfig) { 33 | uni.getExtConfig({ 34 | success(res) { 35 | console.log(res.extConfig) 36 | } 37 | }) 38 | } 39 | ``` 40 | 41 | 42 | ## uni.getExtConfigSync() 43 | 44 | ``uni.getExtConfig`` 的同步版本。 45 | 46 | **平台差异说明** 47 | 48 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 49 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 50 | |x|x|√|x|√|√|x|x|x|x|√| 51 | 52 | **返回值(Object)** 53 | 54 | | 属性 | 类型 | 说明 | 55 | | --- | --- | --- | 56 | | extConfig | Object | 第三方平台自定义的数据 | 57 | 58 | **Tips** 59 | 60 | * 本接口暂时无法通过 `uni.canIUse`判断是否兼容,开发者需要自行判断 `uni.getExtConfigSync` 是否存在来兼容。 61 | 62 | **代码示例** 63 | 64 | ``` 65 | const extConfig = uni.getExtConfigSync ? uni.getExtConfigSync() : {} 66 | console.log(extConfig) 67 | ``` 68 | -------------------------------------------------------------------------------- /docs/api/other/getAccountInfoSync.md: -------------------------------------------------------------------------------- 1 | ## uni.getAccountInfoSync() 2 | 3 | 获取当前帐号信息,可以返回小程序的Appid。如果使用了微信小程序的云端插件,还可以返回当前插件Appid、版本号。 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |x|x|√|√|x|x|√|√|√|x| 10 | 11 | **返回值** 12 | 13 | **Object** 14 | 15 | 帐号信息 16 | 17 | | 属性 | 类型 | 说明 |平台差异说明| 18 | | --- | --- | --- |--- | 19 | | miniProgram | Object| 小程序帐号信息 || 20 | | plugin | Object | 插件帐号信息(仅在插件中调用时包含这一项) |京东、快手小程序不支持| 21 | 22 | 23 | **miniProgram 的结构** 24 | 25 | | 属性 | 类型 | 说明 |平台差异说明| 26 | | --- | --- | --- |--- | 27 | | appId | string | 小程序 appId || 28 | | envVersion| string | 小程序 当前环境版本:`develop`开发版、`trial`体验版、`release`正式版、`gray`灰度版(仅支付宝小程序支持) |京东小程序不支持| 29 | | version| string | 线上小程序版本号(仅在正式版小程序上支持) |京东小程序不支持| 30 | 31 | 32 | **plugin 的结构** 33 | 34 | | 属性 | 类型 | 说明 | 35 | | --- | --- | --- | 36 | | appId | string | 插件 appId | 37 | | version | string | 插件版本号 | 38 | 39 | 40 | **示例代码** 41 | 42 | ```js 43 | const accountInfo = uni.getAccountInfoSync(); 44 | console.log(accountInfo.miniProgram.appId); // 小程序 appId 45 | console.log(accountInfo.plugin.appId); // 插件 appId 46 | console.log(accountInfo.plugin.version); // 插件版本号, 'a.b.c' 这样的形式 47 | ``` 48 | -------------------------------------------------------------------------------- /docs/api/other/getEnvInfoSync.md: -------------------------------------------------------------------------------- 1 | ## uni.getEnvInfoSync() 2 | 3 | 获取小程序环境信息。 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |x|x|x|x|x|√|x|x|x|x|x| 10 | 11 | **返回值** 12 | 13 | **Object** 14 | 15 | | 属性 | 类型 | 说明 | 16 | | --- | --- | --- | 17 | | microapp | MicroApp| 小程序信息 | 18 | | common | Common | 通用参数 | 19 | 20 | 21 | **MicroApp 类型说明** 22 | 23 | | 属性 | 类型 | 说明 | 24 | | --- | --- | --- | 25 | | mpVersion | string | 小程序版本号 | 26 | | envType| string | 小程序环境 `development` 测试版、`preview` 预览版、`production` 线上版 | 27 | | appId| string | 小程序 appId | 28 | 29 | 30 | **Common 类型说明** 31 | 32 | | 属性 | 类型 | 说明 | 33 | | --- | --- | --- | 34 | | USER_DATA_PATH | string | 用户数据存储的路径(默认值 ttfile://user)| 35 | -------------------------------------------------------------------------------- /docs/api/other/invoice-title.md: -------------------------------------------------------------------------------- 1 | ## uni.chooseInvoiceTitle(OBJECT) 2 | 3 | 选择用户的发票抬头,需要用户授权 scope.invoiceTitle。 4 | 5 | 在微信小程序中,当前小程序必须关联一个公众号,且这个公众号是完成了[微信认证](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1496554031_RD4xe)的,才能调用 chooseInvoiceTitle。 6 | 7 | **平台差异说明** 8 | 9 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|快手小程序|京东小程序|元服务| 10 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 11 | |x|x|√|x|√|x|x|√|x|x|√| 12 | 13 | **OBJECT参数说明** 14 | 15 | |属性|类型|必填|说明| 16 | |:-|:-|:-|:-|:-| 17 | |success|function|否|接口调用成功的回调函数| 18 | |fail|function|否|接口调用失败的回调函数| 19 | |complete|function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 20 | 21 | **success返回参数说明** 22 | 23 | |属性|类型|说明|平台差异说明| 24 | |:-|:-|:-|:-| 25 | |type|string|抬头类型(0:单位,1:个人)|| 26 | |title|string|抬头名称|| 27 | |taxNumber|string|抬头税号|| 28 | |companyAddress|string|单位地址|| 29 | |telephone|string|手机号码|| 30 | |bankName|string|银行名称|| 31 | |bankAccount|string|银行账号|| 32 | |errMsg|string|错误信息|微信小程序| 33 | 34 | **示例代码** 35 | 36 | ```js 37 | uni.chooseInvoiceTitle({ 38 | success(res) { 39 | console.log(res.type); 40 | console.log(res.title); 41 | console.log(res.taxNumber); 42 | console.log(res.companyAddress); 43 | console.log(res.telephone); 44 | console.log(res.bankName); 45 | console.log(res.bankAccount); 46 | } 47 | }) 48 | ``` 49 | -------------------------------------------------------------------------------- /docs/api/other/reportAnalytics.md: -------------------------------------------------------------------------------- 1 | 2 | #### uni.reportAnalytics(string eventName, Object data) 3 | 4 | 自定义分析数据上报接口。使用前,需要在小程序管理后台自定义分析中新建事件,配置好事件名与字段。。 5 | 6 | 微信小程序平台[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.reportAnalytics.html) 7 | QQ小程序平台[规范详情](https://q.qq.com/wiki/develop/game/API/open-port/port_dataanalysis.html#qq-reportanalytics) -------------------------------------------------------------------------------- /docs/api/other/reportMonitor.md: -------------------------------------------------------------------------------- 1 | 2 | #### uni.reportMonitor() 3 | 4 | 自定义业务数据监控上报接口。 5 | 6 | 微信小程序平台[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.reportMonitor.html) 7 | QQ小程序平台[规范详情](https://q.qq.com/wiki/develop/miniprogram/API/open_port/port_dataup.html#qq-reportmonitor) 8 | -------------------------------------------------------------------------------- /docs/api/other/set-enable-debug.md: -------------------------------------------------------------------------------- 1 | ## uni.setEnableDebug(OBJECT) 2 | 3 | 设置是否打开调试开关。此开关对正式版也能生效。 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |x|x|√|x|√|x|√|x|√|x| 10 | 11 | **OBJECT说明** 12 | 13 | | 属性 | 类型 | 必填 | 说明 |平台差异说明| 14 | | --- | --- | --- | --- | --- | 15 | | enableDebug | boolean| 是 | 是否打开调试 || 16 | | success | function| 否 | 接口调用成功的回调函数 |微信小程序| 17 | | fail | function| 否 | 接口调用失败的回调函数 |微信小程序| 18 | | complete | function| 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |微信小程序| 19 | 20 | ### 示例代码 21 | ```js 22 | // 打开调试 23 | uni.setEnableDebug({ 24 | enableDebug: true 25 | }) 26 | // 关闭调试 27 | uni.setEnableDebug({ 28 | enableDebug: false 29 | }) 30 | ``` 31 | -------------------------------------------------------------------------------- /docs/api/other/setting.md: -------------------------------------------------------------------------------- 1 | ## uni.openSetting(OBJECT) 2 | 3 | 调起客户端小程序设置界面,返回用户设置的操作结果。 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |x|x|√|√|√|√|√|√|√|√| 10 | 11 | |属性|类型|必填|说明| 12 | |---|---|---|---|---| 13 | |success|function|否|接口调用成功的回调函数| 14 | |fail|function|否|接口调用失败的回调函数| 15 | |complete|function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 16 | 17 | **success 返回参数** 18 | 19 | |属性|类型|说明| 20 | |---|---|---| 21 | |authSetting|Object|用户授权结果,其中 key 为 [scope](/api/other/authorize?id=scope-列表) 值,value 为 Boolean 值,表示用户是否允许授权| 22 | 23 | **代码示例** 24 | 25 | ```javascript 26 | uni.openSetting({ 27 | success(res) { 28 | console.log(res.authSetting) 29 | } 30 | }); 31 | ``` 32 | 33 | ## uni.getSetting(OBJECT) 34 | 获取用户的当前设置。 35 | 36 | **平台差异说明** 37 | 38 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 39 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 40 | |x|x|√|√|√|√|√|√|√|1.0.4+| 41 | 42 | |属性|类型|默认值|必填|说明| 43 | |---|---|---|---|---| 44 | |withSubscriptions|Boolean|false |否|是否同时获取用户订阅消息的订阅状态,默认不获取。注意:withSubscriptions 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。 **(微信小程序 2.10.1 支持)**| 45 | |success|function||否|接口调用成功的回调函数| 46 | |fail|function||否|接口调用失败的回调函数| 47 | |complete|function||否|接口调用结束的回调函数(调用成功、失败都会执行)| 48 | 49 | 50 | **success 返回参数** 51 | 52 | |属性|类型|说明| 53 | |---|---|---| 54 | |authSetting|Object|用户授权结果,其中 key 为 [scope](/api/other/authorize?id=scope-列表) 值,value 为 Boolean 值,表示用户是否允许授权| 55 | |subscriptionsSetting|SubscriptionsSetting|用户订阅消息设置,接口参数`withSubscriptions`值为`true`时才会返回。**(微信小程序 2.10.1 支持)**| 56 | 57 | ### 示例代码 58 | ```js 59 | uni.getSetting({ 60 | success(res) { 61 | console.log(res.authSetting) 62 | } 63 | }) 64 | ``` 65 | -------------------------------------------------------------------------------- /docs/api/other/sport.md: -------------------------------------------------------------------------------- 1 | #### sport 运动 2 | 3 | 此功能为计步器,用于获取手机用户的运动步数。 4 | 5 | 各平台开发方式暂未统一,使用时需注意用[条件编译](https://uniapp.dcloud.io/platform)调用不同平台的代码。 6 | 7 | - App 平台:需使用原生插件,详见[计步器插件](https://ext.dcloud.net.cn/search?q=%E8%AE%A1%E6%AD%A5%E5%99%A8) 8 | - 微信小程序平台:[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunData.html) 9 | - 支付宝小程序平台:[规范详情](https://docs.alipay.com/mini/api/gxuu7v) 10 | -------------------------------------------------------------------------------- /docs/api/other/update.md: -------------------------------------------------------------------------------- 1 | ## uni.getUpdateManager() 2 | 3 | 本API返回**全局唯一**的版本更新管理器对象: updateManager,用于管理小程序更新。 4 | 5 | App的更新不使用本API,另见文档: 6 | - 整包更新:[https://ask.dcloud.net.cn/article/34972](https://ask.dcloud.net.cn/article/34972) 7 | - 资源文件热更新(wgt升级):[https://ask.dcloud.net.cn/article/35667](https://ask.dcloud.net.cn/article/35667) 8 | 9 | **平台差异说明** 10 | 11 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 12 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 13 | |x|x|√|√|√|√|√|√|√|x| 14 | 15 | **updateManager 对象的方法列表:** 16 | 17 | |方法 |参数 |说明 | 18 | |---|---|---| 19 | |onCheckForUpdate |callback |当向小程序后台请求完新版本信息,会进行回调 | 20 | |onUpdateReady |callback |当新版本下载完成,会进行回调 | 21 | |onUpdateFailed |callback |当新版本下载失败,会进行回调 | 22 | |applyUpdate | |当新版本下载完成,调用该方法会强制当前小程序应用上新版本并重启 | 23 | 24 | **onCheckForUpdate(callback) 回调结果说明:** 25 | 26 | |属性|类型|说明| 27 | |---|---|---| 28 | |hasUpdate|Boolean|是否有新的版本 | 29 | 30 | **代码示例** 31 | 32 | ```javascript 33 | const updateManager = uni.getUpdateManager(); 34 | 35 | updateManager.onCheckForUpdate(function (res) { 36 | // 请求完新版本信息的回调 37 | console.log(res.hasUpdate); 38 | }); 39 | 40 | updateManager.onUpdateReady(function (res) { 41 | uni.showModal({ 42 | title: '更新提示', 43 | content: '新版本已经准备好,是否重启应用?', 44 | success(res) { 45 | if (res.confirm) { 46 | // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 47 | updateManager.applyUpdate(); 48 | } 49 | } 50 | }); 51 | 52 | }); 53 | 54 | updateManager.onUpdateFailed(function (res) { 55 | // 新的版本下载失败 56 | }); 57 | ``` 58 | -------------------------------------------------------------------------------- /docs/api/plugins/facialRecognitionVerify.md: -------------------------------------------------------------------------------- 1 | 实人认证提供核验终端操作者的真实身份,包含活体检测和人脸对比等生物识别技术,可快速校验自然人的真实身份。 2 | 3 | - App平台端详细文档需另见:[业务介绍](https://doc.dcloud.net.cn/uniCloud/frv/intro.html)、[开发指南](https://doc.dcloud.net.cn/uniCloud/frv/dev.html) 4 | - 微信小程序端业务开发流程,请参考[微信人脸核身接口能力](https://developers.weixin.qq.com/community/business/doc/000442d352c1202bd498ecb105c00d) 5 | - App HarmonyOS Next 上运行时暂时不支持将 `工程根目录->build-profile.json5->app.products.buildOption.strictMode.caseSensitiveCheck` 配置为 `true` 6 | 7 | 8 | ## uni.getFacialRecognitionMetaInfo() 9 | 10 | uni.getFacialRecognitionMetaInfo是客户端API,获取实人认证设备信息,用于uniCloud云函数[getCertifyId](https://doc.dcloud.net.cn/uniCloud/frv/dev.html#get-certify-id)获取certifyId。 11 | 12 | App端API规范参考:[详情](https://doc.dcloud.net.cn/uniCloud/frv/dev.html#get-meta-info) 13 | 14 | **平台说明** 15 | 16 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 17 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 18 | |√(3.7.4+)|x|x|x|x|x|x|x|x|x| 19 | 20 | 21 | 22 | ## uni.startFacialRecognitionVerify(OBJECT) 23 | 实人认证 24 | 25 | uni.startFacialRecognitionVerify是客户端API,在App端打开刷脸认证界面。 26 | 27 | App端API规范参考:[详情](https://doc.dcloud.net.cn/uniCloud/frv/dev.html#start-frv) 28 | 29 | **平台说明** 30 | 31 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 32 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 33 | |√(3.7.4+)|x|√|x|x|x|x|x|x|x| 34 | 35 | 36 | -------------------------------------------------------------------------------- /docs/api/plugins/voice.md: -------------------------------------------------------------------------------- 1 | ### voice 2 | 3 | voice 包括语言识别和语音朗读两部分。 4 | 5 | 仅百度小程序平台、App平台支持,各平台开发方式暂未统一,使用时需注意用[条件编译](https://uniapp.dcloud.io/platform)调用不同平台的代码。 6 | 7 | 百度小程序平台支持语音识别,参考:[规范详情](https://smartprogram.baidu.com/docs/develop/api/ai_voice/) 8 | 9 | App 平台实现参考: 10 | 11 | - 语音识别:支持百度语音识别,云打包的话需要在manifest中勾选模块和App SDK配置,开发规范见:[https://www.html5plus.org/doc/zh_cn/speech.html](https://www.html5plus.org/doc/zh_cn/speech.html),配置文档及讯飞百度的差别见:[https://ask.dcloud.net.cn/article/35059](https://ask.dcloud.net.cn/article/35059) 12 | - 语音朗读:调用科大讯飞进行语音合成、tts朗读,参考[https://ask.dcloud.net.cn/article/1081](https://ask.dcloud.net.cn/article/1081) 13 | -------------------------------------------------------------------------------- /docs/api/preload-page.md: -------------------------------------------------------------------------------- 1 | ## uni.preloadPage(OBJECT) 2 | 3 | 预加载页面,是一种性能优化技术。被预载的页面,在打开时速度更快。 4 | 5 | **平台差异说明** 6 | 7 | |App-nvue|HarmonyOS Next|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|元服务|小红书小程序| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |√(2.7.12+)|x|√(2.7.12+)|x|x|x|x|x|x|x| 10 | 11 | 12 | |属性|类型|必填|说明| 13 | |:-:|:-:|:-:|:-:| 14 | |url|string|是|预加载页面url| 15 | |success|Function|否|预加载成功完成回调| 16 | |fail|Function|否|预加载失败回调| 17 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 18 | 19 | 20 | ### H5 平台 21 | 22 | 预加载 /pages/test/test 对应的js文件,不执行页面预渲染逻辑 23 | ```js 24 | uni.preloadPage({url: "/pages/test/test"}); 25 | ``` 26 | 27 | ### App-nvue 平台 28 | 29 | 预加载nvue页面 /pages/test/test 30 | ```js 31 | uni.preloadPage({url: "/pages/test/test"}); 32 | ``` 33 | 34 | 注意事项 35 | 1. App平台仅支持预加载 nvue 页面,执行页面预渲染,预载时触发生命周期 `onLoad`,`onReady`,不触发 `onShow` 36 | 2. 打开新页面时,url 完全相同(包含参数)时,优先使用预加载页面,触发生命周期 onShow 37 | 3. tabbar页面,仅支持预加载尚未显示过的页面,否则返回 fail,提示 already exists 38 | 4. 同一时间,相同 url 仅 preloadPage 一次 39 | 5. 当同一个预载页面已被打开(在路由栈),再次打开相同url时,不再使用该预加载页面,而是打开新的非预载页面 40 | 6. `uni.reLanuch`, `uni.switchTab`, `uni.navigateBack`(含Android返回键) 切换页面时,预加载页面不会被销毁,仅触发生命周期 `onHide` 41 | 7. 在预载页面使用 `uni.redirectTo` 时,预加载页面会被销毁,触发生命周期 `onUnload` 42 | 43 | 示例 44 | ```js 45 | uni.preloadPage({url: "/pages/test/test"}); // 预加载 /pages/test/test 页面(仅触发onLoad,onReady) 46 | uni.navigateTo({url: "/pages/test/test"}); // url匹配,跳转预加载页面(仅触发onShow) 47 | uni.navigateTo({url: "/pages/test/test?a=b"}); // url不匹配,正常打开新页面 48 | ``` 49 | 50 | HBuilderX 2.7.12+的hello uni-app,在navigator示例和uni ui的日历示例中增加了页面预载示例。 51 | 52 | ## uni.unPreloadPage(OBJECT) 53 | 54 | |元服务| 55 | |:-:| 56 | |x| 57 | 58 | > HarmonyOS Next 不支持 59 | 60 | 取消预载页面。 61 | 62 | 1. 仅App-nvue支持 63 | 2. 当预载页面未被打开时,使用 `unPreloadPage`时会销毁该页面,触发生命周期 `onUnload` 64 | 3. 当预载页面已被打开时,使用 `unPreloadPage`时不销毁该页面,但该预加载页面不再继续存在,会随着路由变化而销毁 65 | -------------------------------------------------------------------------------- /docs/api/request/UDP.md: -------------------------------------------------------------------------------- 1 | #### UDP 通信 2 | 3 | - 微信小程序平台,[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/wx.createUDPSocket.html) 4 | - App平台,需下载插件,[插件市场](https://ext.dcloud.net.cn/search?q=udp) 5 | -------------------------------------------------------------------------------- /docs/api/request/mDNS.md: -------------------------------------------------------------------------------- 1 | 2 | #### mDNS 服务 3 | 4 | - 微信小程序平台支持,[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.stopLocalServiceDiscovery.html) 5 | - App端可在插件市场搜索相关插件[mDNS](https://ext.dcloud.net.cn/search?q=mdns) 6 | -------------------------------------------------------------------------------- /docs/api/request/socket-task.md: -------------------------------------------------------------------------------- 1 | **SocketTask** 由 [uni.connectSocket()](/api/request/websocket?id=connectsocket) 接口创建。 2 | 3 | **平台差异说明** 4 | 5 | 支付宝小程序、抖音小程序,没有明确的文档来具体说明这个对象,而是指向了 [Web Websocket](https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket) 对象。 6 | 7 | ## SocketTask.onMessage(CALLBACK) 8 | 监听 WebSocket 接受到服务器的消息事件 9 | 10 | **回调函数** 11 | 12 | `Function` 13 | 14 | WebSocket 接受到服务器的消息事件的回调函数 15 | 16 | **回调函数中的参数** 17 | 18 | `Object` 19 | 20 | |属性|类型|说明| 21 | |:-|:-|:-| 22 | |data|String/ArrayBuffer|服务器返回的消息| 23 | 24 | ## SocketTask.send(OBJECT) 25 | 通过 WebSocket 连接发送数据 26 | 27 | **参数** 28 | 29 | |属性|类型|是否必填|说明| 30 | |:-|:-|:-|:-| 31 | |data|String/ArrayBuffer|是|需要发送的内容| 32 | |success|Function|否|接口调用成功的回调函数| 33 | |fail|Function|否|接口调用失败的回调函数| 34 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 35 | 36 | ## SocketTask.close(OBJECT) 37 | 关闭 WebSocket 连接 38 | 39 | **参数** 40 | 41 | |属性|类型|默认值|是否必填|说明| 42 | |:-|:-|:-|:-|:-| 43 | |code|Number|1000(表示正常关闭连接)|否|一个数字值表示关闭连接的状态号,表示连接被关闭的原因。| 44 | |reason|String||否|一个可读的字符串,表示连接被关闭的原因。| 45 | |success|Function||否|接口调用成功的回调函数| 46 | |fail|Function||否|接口调用失败的回调函数| 47 | |complete|Function||否|接口调用结束的回调函数(调用成功、失败都会执行)| 48 | 49 | ## SocketTask.onOpen(CALLBACK) 50 | 监听 WebSocket 连接打开事件 51 | 52 | **回调函数** 53 | 54 | `Function` 55 | 56 | WebSocket 连接打开事件的回调函数 57 | 58 | **回调函数中的参数** 59 | 60 | `Object` 61 | 62 | |属性|类型|说明| 63 | |:-|:-|:-| 64 | |data|String/ArrayBuffer|服务器返回的消息| 65 | 66 | ## SocketTask.onClose(CALLBACK) 67 | 监听 WebSocket 连接关闭事件 68 | 69 | **回调函数** 70 | 71 | `Function` 72 | 73 | WebSocket 连接关闭事件的回调函数 74 | 75 | **回调函数中的参数** 76 | 77 | `Object` 78 | 79 | |属性|类型|说明|平台兼容性| 80 | |:-|:-|:-|:-| 81 | |code|number|一个数字值表示关闭连接的状态号,表示连接被关闭的原因。|HBuilderX(3.7.12+)| 82 | |reason|string|一个可读的字符串,表示连接被关闭的原因。|HBuilderX(3.7.12+)| 83 | 84 | ## SocketTask.onError(CALLBACK) 85 | 监听 WebSocket 错误事件 86 | 87 | **回调函数** 88 | 89 | `Function` 90 | 91 | WebSocket 错误事件的回调函数 92 | 93 | **回调函数中的参数** 94 | 95 | `Object` 96 | 97 | |属性|类型|说明| 98 | |:-|:-|:-| 99 | |errMsg|String|错误信息| 100 | -------------------------------------------------------------------------------- /docs/api/system/batteryInfo.md: -------------------------------------------------------------------------------- 1 | ## uni.getBatteryInfo(OBJECT) 2 | 3 | 获取设备电量 4 | 5 | > 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[getBatteryInfo](https://ext.dcloud.net.cn/plugin?id=9295) 6 | 7 | > uni ext api 需 HBuilderX 3.6.8+ 8 | 9 | > iOS 运行需要打自定义基座 10 | 11 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 12 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 13 | |√|√|√|√|√|x|x|√|x|x|1.0.4+ 支持 Sync| 14 | 15 | 16 | 17 | **OBJECT 参数说明** 18 | 19 | |参数名|类型|必填|说明| 20 | |:-|:-|:-|:-| 21 | |success|Function|否|接口调用成功的回调| 22 | |fail|Function|否|接口调用失败的回调函数| 23 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 24 | 25 | **success 返回参数说明** 26 | 27 | |参数|类型|说明| 28 | |:-|:-|:-| 29 | |level|Number|设备电量,范围 1 - 100| 30 | |isCharging|Boolean|是否正在充电中| 31 | 32 | **示例代码** 33 | 34 | ```js 35 | uni.getBatteryInfo({ 36 | success: (res) => { 37 | console.log(res) 38 | } 39 | }) 40 | ``` 41 | -------------------------------------------------------------------------------- /docs/api/system/clipboard.md: -------------------------------------------------------------------------------- 1 | **剪贴板 API 平台差异说明** 2 | 3 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 4 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 5 | |√|√|√|√|√|√|√|√|√|x| 6 | 7 | ## uni.setClipboardData(OBJECT) 8 | 设置系统剪贴板的内容。 9 | 10 | 11 | 12 | **OBJECT 参数说明** 13 | 14 | |参数名|类型|必填|说明|平台差异说明| 15 | |:-|:-|:-|:-|:-| 16 | |data|String|是|需要设置的内容|| 17 | |showToast|Boolean|否|配置是否弹出提示,默认弹出提示|App (3.2.13+)、H5 (3.2.13+)| 18 | |success|Function|否|接口调用成功的回调|| 19 | |fail|Function|否|接口调用失败的回调函数|| 20 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)|| 21 | 22 | 23 | 24 | **示例** 25 | 26 | ```javascript 27 | uni.setClipboardData({ 28 | data: 'hello', 29 | success: function () { 30 | console.log('success'); 31 | } 32 | }); 33 | ``` 34 | 35 | 36 | 37 | ## uni.getClipboardData(OBJECT) 38 | 获取系统剪贴板内容。 39 | 40 | 41 | 42 | **OBJECT 参数说明** 43 | 44 | |参数名|类型|必填|说明| 45 | |:-|:-|:-|:-| 46 | |success|Function|否|接口调用成功的回调| 47 | |fail|Function|否|接口调用失败的回调函数| 48 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 49 | 50 | 51 | 52 | **success 返回参数说明** 53 | 54 | |参数|类型|说明| 55 | |:-|:-|:-| 56 | |data|String|剪贴板的内容| 57 | 58 | **示例** 59 | 60 | ```javascript 61 | uni.getClipboardData({ 62 | success: function (res) { 63 | console.log(res.data); 64 | } 65 | }); 66 | ``` 67 | 68 | 69 | 70 | ### **注意** 71 | 72 | - 设置剪贴板内容后,小程序平台会自动弹出轻提示;(微信小程序在成功回调success里设置toast可覆盖自带的轻提示)。App平台默认与小程序保持一致策略。如不希望在App平台弹出提示,可使用Native.js自行操作剪贴板,插件市场有封装好的示例[https://ext.dcloud.net.cn/plugin?id=712](https://ext.dcloud.net.cn/plugin?id=712)。也可以在设置剪切板后立即uni.hideToast()。 73 | - 如果小程序平台调用发现错误: setClipboardData:fail api scope is not declared in the privacy agreement, 原因是微信小程序于2023年9月15日更新剪切板为必须通过小程序后台配置用户隐私保护指引并审核通过后方可使用该API。 74 | - `HarmonyOS Next` 平台使用时需要添加受限开放权限 [ohos.permission.READ_PASTEBOARD](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/restricted-permissions-V5#section498771912414) 75 | -------------------------------------------------------------------------------- /docs/api/system/deviceMotion.md: -------------------------------------------------------------------------------- 1 | #### 监听设备方向变化 2 | 3 | 仅微信小程序平台支持,[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.startDeviceMotionListening.html) 4 | 5 | 在App平台,也可以通过`onResize`生命周期,监听窗体大小变化来实现此类需求。[详见](https://uniapp.dcloud.io/collocation/frame/lifecycle?id=%e9%a1%b5%e9%9d%a2%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f) 6 | -------------------------------------------------------------------------------- /docs/api/system/getAppBaseInfo.md: -------------------------------------------------------------------------------- 1 | ## uni.getAppBaseInfo() 2 | 3 | 获取微信 APP 基础信息 4 | 5 | |App|H5|微信小程序|支付宝小程序|抖音小程序|快手小程序|QQ小程序|百度小程序|京东小程序|钉钉小程序|飞书小程序|元服务| 6 | |:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-:| 7 | |√ `(3.4.13+)`|√ `(3.4.13+)`|√ `(2.20.1+)`|x|x|x|x|x|x|x|x|x| 8 | 9 | 10 | 11 | **返回参数说明** 12 | 13 | |参数名|类型|说明|平台差异说明| 14 | |:-|:-|:-|:-| 15 | |appId|string|`manifest.json` 中应用appid,即DCloud appid。 || 16 | |appName|string|`manifest.json` 中应用名称 || 17 | |appVersion|string|`manifest.json` 中应用版本名称。|| 18 | |appVersionCode|string|`manifest.json` 中应用版本名号。|| 19 | |appLanguage|string|应用设置的语言`en`、`zh-Hans`、`zh-Hant`、`fr`、`es`|`App`、`H5`| 20 | |appWgtVersion|string|应用资源(wgt)的版本名称。 |App 3.5.5+| 21 | |isUniAppX|string|是否uni-app x|HBuilderX 4.33+| 22 | |uniPlatform|string|uni-app 运行平台,与条件编译平台相同|HBuilderX 4.33+| 23 | |uniCompilerVersion|string|uni 编译器版本|HBuilderX 4.33+| 24 | |uniRuntimeVersion|string|uni 编译器版本|HBuilderX 4.34+| 25 | |hostLanguage|string|小程序宿主语言|`App 仅 UNIMPSDK 支持`、`H5 不支持`| 26 | |hostVersion|string|App、小程序宿主版本。如:微信版本号|`App 仅 UNIMPSDK 支持`、`H5 不支持`| 27 | |hostName|string|小程序宿主名称|`App 仅 UNIMPSDK 支持`、`H5 不支持`| 28 | |hostPackageName|string|小程序宿主包名|`仅 UNIMPSDK 支持`| 29 | |hostSDKVersion|string|uni小程序SDK版本、小程序客户端基础库版本|`App 仅 UNIMPSDK 支持`、`H5 不支持`| 30 | |hostTheme|string|宿主当前主题,取值为light或dark。微信小程序全局配置"darkmode":true时才能获取,否则为 undefined (不支持小游戏)|`App 仅 UNIMPSDK 支持`| 31 | |hostFontSizeSetting|string|用户字体大小设置。以“我-设置-通用-字体大小”中的设置为准,单位:px|`仅 小程序 支持`| 32 | 33 | 小程序特殊的返回参数 34 | 35 | |参数名|类型|说明|平台差异说明| 36 | |:-|:-|:-|:-| 37 | |SDKVersion|string|客户端基础库版本|`仅微信小程序`| 38 | |enableDebug|boolean|是否已打开调试。可通过右上角菜单或 wx.setEnableDebug 打开调试|`仅微信小程序`| 39 | |host|Object|当前小程序运行的宿主环境|`仅微信小程序`| 40 | |theme|string|系统当前主题,取值为light或dark,全局配置"darkmode":true时才能获取,否则为 undefined (不支持小游戏)|`仅微信小程序`| 41 | 42 | 不推荐使用的返回参数,仅为向下兼容保留 43 | 44 | |参数名|类型|说明|平台差异说明| 45 | |:-|:-|:-|:-| 46 | |language|string|应用设置的语言|`H5 不支持`| 47 | |version|string|引擎版本号、微信版本号|| 48 | 49 | 50 | -------------------------------------------------------------------------------- /docs/api/system/getDeviceInfo.md: -------------------------------------------------------------------------------- 1 | ## uni.getDeviceInfo() 2 | 3 | 获取设备基础信息 4 | 5 | |App|H5|微信小程序|支付宝小程序|抖音小程序|快手小程序|QQ小程序|百度小程序|京东小程序|钉钉小程序|飞书小程序|元服务| 6 | |:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-:| 7 | |√ `(3.4.13+)`|√ `(3.4.13+)`|√ `(2.20.1+)`|x|x|x|x|x|x|x|x|x| 8 | 9 | 10 | 11 | **返回参数说明** 12 | 13 | |参数名|类型|说明|平台差异说明| 14 | |:-|:-|:-|:-| 15 | |deviceBrand|string|设备品牌。如:`apple`、`huawei`|`H5 不支持`| 16 | |deviceId|string|设备 id 。由 uni-app 框架生成并存储,清空 Storage 会导致改变|| 17 | |deviceModel|string|设备型号|| 18 | |deviceType|string|设备类型`phone`、`pad`、`pc`|| 19 | |deviceOrientation|string|设备方向 `竖屏 portrait`、`横屏 landscape`|`App、H5`。微信小程序请使用 [`getSystemInfo Api`](/api/system/info.html) 获取| 20 | |devicePixelRatio|string|设备像素比|`App、H5`。微信小程序请使用 [`getSystemInfo Api`](/api/system/info.html) 获取| 21 | |system|string|操作系统及版本|| 22 | |platform|string|客户端平台|| 23 | |osName|string|系统名称|HBuilderX 4.32+,`weixin 4.33`支持| 24 | |osVersion|string|操作系统版本。如 ios 版本,andriod 版本|HBuilderX 4.32+,`weixin 4.33`支持| 25 | |osLanguage|string|操作系统语言|HBuilderX 4.32+,`H5、weixin` 不支持| 26 | |osTheme|string|操作系统主题|HBuilderX 4.32+,`H5、weixin` 不支持| 27 | |romName|string|rom 名称。Android 部分机型获取不到值。iOS 恒为 `ios`|HBuilderX 4.32+,`H5、weixin` 不支持| 28 | |romVersion|string|rom 版本号。Android 部分机型获取不到值。iOS 为操作系统版本号(同 `osVersion`)|HBuilderX 4.32+,`H5、weixin` 不支持| 29 | 30 | 小程序特殊的返回参数 31 | 32 | |参数名|类型|说明|平台差异说明| 33 | |:-|:-|:-|:-| 34 | |abi |String|应用二进制接口类型(仅 Android 支持)|`仅微信小程序`| 35 | |benchmarkLevel|Number|设备性能等级(仅 Android 支持)。取值为:-2 或 0(该设备无法运行小游戏),-1(性能未知),>=1(设备性能值,该值越高,设备性能越好,目前最高不到50)|`仅微信小程序`| 36 | 37 | 不推荐使用的返回参数,仅为向下兼容保留 38 | 39 | |参数名|类型|说明|平台差异说明| 40 | |:-|:-|:-|:-| 41 | |brand|string|设备品牌|`H5 不支持`| 42 | |model|string|设备型号。新机型刚推出一段时间会显示unknown,微信会尽快进行适配。|| 43 | 44 | 45 | 46 | **Tips** 47 | - `deviceId`:`android 平台` 根据优先使用imei、mac,如果没有获取到就使用随机生成的标识。`ios 平台` 是直接使用随机生成的标识 48 | -------------------------------------------------------------------------------- /docs/api/system/getWindowInfo.md: -------------------------------------------------------------------------------- 1 | ## uni.getWindowInfo() 2 | 3 | 获取窗口信息 4 | 5 | |App|H5|微信小程序|支付宝小程序|抖音小程序|快手小程序|QQ小程序|百度小程序|京东小程序|钉钉小程序|飞书小程序|元服务| 6 | |:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-:| 7 | |√ `(3.4.13+)`|√ `(3.4.13+)`|√ `(2.20.1+)`|x|x|x|x|x|x|x|x|x| 8 | 9 | 10 | 11 | **返回参数说明** 12 | 13 | |参数名|类型|说明|平台差异说明| 14 | |:-|:-|:-|:-| 15 | |pixelRatio |number|设备像素比|| 16 | |screenWidth |number|屏幕宽度|| 17 | |screenHeight |number|屏幕高度|| 18 | |windowWidth |number|可使用窗口宽度|| 19 | |windowHeight |number|可使用窗口高度|| 20 | |windowTop |number|可使用窗口的顶部位置|| 21 | |windowBottom |number|可使用窗口的底部位置|| 22 | |statusBarHeight |number|手机状态栏的高度|| 23 | |screenTop |number|窗口上边缘的 y 值|| 24 | |safeArea |object|在竖屏正方向下的安全区域|| 25 | |safeAreaInsets |object|在竖屏正方向下的安全区域插入位置|| 26 | 27 | **safeArea 的结构** 28 | 29 | |参数 |类型 |说明 | 30 | |:- |:- |:- | 31 | |left |Number |安全区域左上角横坐标 | 32 | |right |Number |安全区域右下角横坐标 | 33 | |top |Number |安全区域左上角纵坐标 | 34 | |bottom |Number |安全区域右下角纵坐标 | 35 | |width |Number |安全区域的宽度,单位逻辑像素 | 36 | |height |Number |安全区域的高度,单位逻辑像素 | 37 | 38 | **safeAreaInsets 的结构** 39 | 40 | |参数 |类型 |说明 | 41 | |:- |:- |:- | 42 | |left |Number |安全区域左侧插入位置 | 43 | |right |Number |安全区域右侧插入位置 | 44 | |top |Number |安全区顶部插入位置 | 45 | |bottom |Number |安全区域底部插入位置 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /docs/api/system/getsystemsetting.md: -------------------------------------------------------------------------------- 1 | ## uni.getSystemSetting() 2 | 获取设备设置 3 | 4 | **平台差异说明** 5 | 6 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|钉钉小程序|QQ小程序|快手小程序|京东小程序|元服务| 7 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 8 | |HBuilderX (3.5.2+)|x|基础库 (2.20.1+)|x|x|x|x|x|x|x|x| 9 | 10 | 11 | 12 | **返回参数说明** 13 | 14 | |属性|类型|说明| 15 | |:-|:-|:-| 16 | |bluetoothEnabled|boolean|蓝牙的系统开关。当值为 `false` 时,App端:有可能是配置不正确导致,此时会返回 `bluetoothError` 属性描述错误。| 17 | |bluetoothError|String|App端:Android平台没有权限或者iOS平台模块配置错误时返回字符串,否则不返回此属性。详情见下| 18 | |locationEnabled|boolean|地理位置的系统开关。当值为 `false` 时,App端:Android平台是准确的;iOS平台有可能是配置不正确导致,此时会返回 `locationError` 属性描述错误.| 19 | |locationError|String|App端:Android平台不返回此属性;iOS平台模块配置错误时返回字符串,否则不返回此属性。详情见下| 20 | |wifiEnabled|boolean|Wi-Fi 的系统开关| 21 | |wifiError|String|App端:Android平台没有权限时返回此属性;iOS平台不返回此属性;。详情见下| 22 | |deviceOrientation|string|设备方向。`竖屏:portrait`,`横屏:landscape`| 23 | 24 | 25 | 26 | **Tips** 27 | - `bluetoothError`: 28 | - Android平台值为 `"Missing permissions required by BluetoothAdapter.isEnabled: android.permission.BLUETOOTH"` 表示没有 `android.permission.BLUETOOTH` 权限 29 | - iOS平台值为 `"Missing bluetooth module in manifest.json"` ,表示没有在 `manifest.json -> App模块配置` 中配置 `BlueTooth(低功耗蓝牙)` 模块 30 | - `locationError`: 31 | - Android平台不会返回此值; 32 | - iOS平台值为 `"Missing geolocation module in manifest.json"` 表示没有在 `manifest.json -> App模块配置` 中配置 `Geolocation(定位)` 模块 33 | - `wifiError` 34 | - Android平台值为 `"Missing permissions required by WifiManager.isWifiEnabled: android.permission.ACCESS_WIFI_STATE"` 表示没有 `android.permission.ACCESS_WIFI_STATE` 权限 35 | - iOS平台不会返回此值; 36 | 37 | **示例** 38 | 39 | ```javascript 40 | const systemSetting = uni.getSystemSetting() 41 | 42 | console.log(systemSetting.bluetoothEnabled) 43 | console.log(systemSetting.deviceOrientation) 44 | console.log(systemSetting.locationEnabled) 45 | console.log(systemSetting.wifiEnabled) 46 | ``` 47 | -------------------------------------------------------------------------------- /docs/api/system/memory.md: -------------------------------------------------------------------------------- 1 | ## uni.onMemoryWarning(CALLBACK) 2 | 3 | 监听内存不足告警事件。 4 | 5 | 当 iOS/Android 向小程序进程发出内存警告时,触发该事件。Android 下有告警等级划分,iOS 无等级划分。 6 | 7 | **平台差异说明** 8 | 9 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 10 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 11 | |Android 3.6.9+、iOS 3.6.11+|x|√|√|√|x|√|√|√|x| 12 | 13 | 14 | 15 | > 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[https://ext.dcloud.net.cn/plugin?id=10071](https://ext.dcloud.net.cn/plugin?id=10071) 16 | 17 | **CALLBACK返回参数:** 18 | 19 | |参数名|类型|说明| 20 | |---|---|---| 21 | |level|Number|仅 Android 有该字段,对应系统内存告警等级宏定义| 22 | 23 | 24 | 25 | **level 的合法值** 26 | 27 | |值|对应的Android告警值|说明| 28 | |---|---|---| 29 | |5|TRIM_MEMORY_RUNNING_MODERATE|进程在后台LRU列表的中间;释放内存可以帮助系统保持列表中稍后运行的其他进程,以获得更好的整体性能。| 30 | |10|TRIM_MEMORY_RUNNING_LOW|该进程不是可消耗的后台进程,但设备内存不足| 31 | |15|TRIM_MEMORY_RUNNING_CRITICAL|该进程不是可消耗的后台进程,但设备运行的内存极低,即将无法保持任何后台进程运行。| 32 | 33 | **代码示例** 34 | 35 | ```javascript 36 | const callback = function (res) { 37 | console.log(res,'onMemoryWarningReceive'); 38 | } 39 | uni.onMemoryWarning(callback); 40 | ``` 41 | 42 | 43 | 44 | ## uni.offMemoryWarning(CALLBACK) 45 | 46 | 取消监听内存不足告警事件。不传入 callback 则取消所有监听。 47 | 48 | 49 | **平台差异说明** 50 | 51 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 52 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 53 | |x|x|√|√|√|x|x|√|√|x| 54 | 55 | 56 | 57 | |属性 | 类型|说明| 58 | |-- |-- |-- | 59 | | 回调函数| Function|内存不足告警事件的回调函数| 60 | 61 | 62 | 63 | **代码示例** 64 | 65 | ```javascript 66 | const callback = function (res) { 67 | console.log(res); 68 | } 69 | uni.onMemoryWarning(callback); 70 | // 和 onMemoryWarning 传入同一个函数即可 71 | uni.offMemoryWarning(callback); 72 | ``` 73 | **Tips** 74 | - `CALLBACK`为调用`uni.onMemoryWarning`时传入的`CALLBACK` 75 | 76 | 77 | -------------------------------------------------------------------------------- /docs/api/system/nfc.md: -------------------------------------------------------------------------------- 1 | #### NFC 2 | 3 | 仅微信小程序平台、App平台支持,各平台开发方式暂未统一,使用时需注意用[条件编译](https://uniapp.dcloud.io/platform)调用不同平台的代码。 4 | 5 | - 微信小程序平台实现参考:[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.startHCE.html) 6 | 7 | - App 平台: 8 | 1. 通过Native.js实现,**安卓:**[NFC数据读取](https://ask.dcloud.net.cn/question/6726) 9 | 2. 使用原生插件,详见[插件市场](https://ext.dcloud.net.cn/search?q=nfc) 10 | -------------------------------------------------------------------------------- /docs/api/system/openappauthorizesetting.md: -------------------------------------------------------------------------------- 1 | ## uni.openAppAuthorizeSetting() 2 | 跳转系统授权管理页 3 | 4 | - App端 5 | 打开系统App的权限设置界面 6 | - 微信小程序 7 | 打开系统微信App的权限设置界面 8 | 9 | **平台差异说明** 10 | 11 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|钉钉小程序|QQ小程序|快手小程序|京东小程序|元服务| 12 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 13 | |HBuilderX (3.5.3+)|x|基础库 (2.20.1+)|x|x|x|x|x|x|x|x| 14 | 15 | 16 | 17 | **OBJECT 参数说明** 18 | 19 | |参数名|类型|必填|说明| 20 | |:-|:-|:-|:-| 21 | |success|Function|否|接口调用成功的回调函数| 22 | |fail|Function|否|接口调用失败的回调函数| 23 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 24 | 25 | **示例** 26 | 27 | ```javascript 28 | uni.openAppAuthorizeSetting({ 29 | success (res) { 30 | console.log(res) 31 | } 32 | }) 33 | ``` 34 | -------------------------------------------------------------------------------- /docs/api/system/phone.md: -------------------------------------------------------------------------------- 1 | ## uni.makePhoneCall(OBJECT) 2 | 拨打电话。 3 | 4 | |元服务| 5 | |:-:| 6 | |√| 7 | 8 | 9 | 10 | **OBJECT 参数说明** 11 | 12 | |参数名|类型|必填|说明| 13 | |:-|:-|:-|:-| 14 | |phoneNumber|String|是|需要拨打的电话号码| 15 | |success|Function|否|接口调用成功的回调| 16 | |fail|Function|否|接口调用失败的回调函数| 17 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 18 | 19 | 20 | 21 | **示例** 22 | 23 | ```javascript 24 | uni.makePhoneCall({ 25 | phoneNumber: '114' //仅为示例 26 | }); 27 | ``` 28 | 29 | 30 | 注:App端关于电话短信的扩展文档 31 | - Android需要在 manifest.json 增加权限 `` 32 | - Android不弹出询问框直接拨打电话:[https://ask.dcloud.net.cn/question/4035](https://ask.dcloud.net.cn/question/4035) 33 | - 发送短信:[http://www.html5plus.org/doc/zh_cn/messaging.html](http://www.html5plus.org/doc/zh_cn/messaging.html) 34 | - Android读取短信验证码:[http://ask.dcloud.net.cn/article/676](http://ask.dcloud.net.cn/article/676) 35 | - Android遍历读取短信:[https://ask.dcloud.net.cn/article/12934](https://ask.dcloud.net.cn/article/12934) 36 | 注意需要赋予相关权限。 37 | - 钉钉小程序端拨打电话,详见[https://open.dingtalk.com/document/orgapp-client/call-menu](https://open.dingtalk.com/document/orgapp-client/call-menu) 38 | 39 | 40 | -------------------------------------------------------------------------------- /docs/api/system/theme.md: -------------------------------------------------------------------------------- 1 | ## uni.onThemeChange(CALLBACK) 2 | 监听系统主题状态变化。 3 | 4 | > 相关文档:[DarkMode 适配指南](https://uniapp.dcloud.net.cn/tutorial/darkmode.html) 5 | 6 | **平台差异说明** 7 | 8 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 9 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 10 | |`iOS 2.6.5+`、`Android 3.6.9+`|HBuilderX 3.6.9+|基础库 2.11.0+|x|x|x|V5.3.0+|x|x|x|x| 11 | 12 | 13 | 14 | **CALLBACK 返回参数** 15 | 16 | |参数|类型|说明| 17 | |:-|:-|:-| 18 | |theme|String|主题名称(`dark`, `light`)| 19 | 20 | 21 | 22 | **示例** 23 | 24 | ```javascript 25 | uni.onThemeChange(function (res) { 26 | console.log(res.theme); 27 | }); 28 | ``` 29 | 30 | 31 | 32 | ## uni.offThemeChange(CALLBACK) 33 | 取消监听系统主题状态变化。 34 | 35 | > 相关文档:[DarkMode 适配指南](https://uniapp.dcloud.net.cn/tutorial/darkmode.html) 36 | 37 | **平台差异说明** 38 | 39 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 40 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 41 | |HBuilderX 3.6.9+|HBuilderX 3.6.9+|基础库 2.11.0+|x|x|x|V5.3.0+|x|x|x|x| 42 | 43 | 44 | 45 | **参数** 46 | 47 | `Function CallBack`:onThemeChange 传入的监听函数。 48 | 49 | **示例** 50 | 51 | ```javascript 52 | const callback = function (res) { 53 | console.log(res.theme); 54 | } 55 | uni.onThemeChange(callback); 56 | uni.offThemeChange(callback); // 此时不再触发 callback 方法 57 | ``` 58 | 59 | 60 | 61 | **注意** 62 | - 自定义基座生效 63 | - App 端需要开启暗黑模式。[5+ App](https://ask.dcloud.net.cn/article/36995) [uni-app 暗黑模式](https://uniapp.dcloud.net.cn/tutorial/darkmode.html#open-darkmode) 64 | -------------------------------------------------------------------------------- /docs/api/system/vibrate.md: -------------------------------------------------------------------------------- 1 | ## uni.vibrate(OBJECT) 2 | 3 | > HarmonyOS Next 不支持 4 | 5 | 使手机发生振动。 6 | 7 | **OBJECT 参数说明** 8 | 9 | |参数名|类型|必填|说明| 10 | |:-|:-|:-|:-| 11 | |success|Function|否|接口调用成功的回调| 12 | |fail|Function|否|接口调用失败的回调函数| 13 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 14 | 15 | **示例** 16 | 17 | ```javascript 18 | uni.vibrate({ 19 | success: function () { 20 | console.log('success'); 21 | } 22 | }); 23 | ``` 24 | 25 | ## uni.vibrateLong(OBJECT) 26 | 27 | |元服务| 28 | |:-:| 29 | |√| 30 | 31 | > HarmonyOS Next 不支持 32 | 33 | 使手机发生较长时间的振动(400ms)。 34 | 35 | **OBJECT 参数说明** 36 | 37 | |参数名|类型|必填|说明| 38 | |:-|:-|:-|:-| 39 | |success|Function|否|接口调用成功的回调| 40 | |fail|Function|否|接口调用失败的回调函数| 41 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 42 | 43 | **示例** 44 | 45 | ```javascript 46 | uni.vibrateLong({ 47 | success: function () { 48 | console.log('success'); 49 | } 50 | }); 51 | ``` 52 | 53 | ## uni.vibrateShort(OBJECT) 54 | 55 | |元服务| 56 | |:-:| 57 | |√| 58 | 59 | > HarmonyOS Next 不支持 60 | 61 | 使手机发生较短时间的振动(15ms)。 62 | 63 | **OBJECT 参数说明** 64 | 65 | |参数名|类型|必填|说明| 66 | |:-|:-|:-|:-| 67 | |type|String|是|震动强度类型,有效值为:heavy、medium、light(微信、元服务必填)| 68 | |success|Function|否|接口调用成功的回调| 69 | |fail|Function|否|接口调用失败的回调函数| 70 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 71 | 72 | **示例** 73 | 74 | ```javascript 75 | uni.vibrateShort({ 76 | success: function () { 77 | console.log('success'); 78 | } 79 | }); 80 | ``` 81 | 82 | **注意** 83 | - iOS上只有长震动,没有短震动 84 | - iOS上需要手机设置“打开响铃时震动”或“静音时震动”,否则无法震动 85 | - vibrate只适用于钉钉小程序、支付宝小程序 86 | -------------------------------------------------------------------------------- /docs/api/ui/bgcolor.md: -------------------------------------------------------------------------------- 1 | ## uni.setBackgroundColor(OBJECT) 2 | 3 | 动态设置窗口的背景色。 4 | 5 | **平台差异说明** 6 | 7 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |x|HBuilderX 4.31|x|√|x|√|x|√|√|√|x| 10 | 11 | **参数说明** 12 | 13 | |属性|类型|默认值|必填|说明| 14 | |:-|:-|:-|:-|:-| 15 | |backgroundColor|String||否|窗口的背景色,必须为十六进制颜色值| 16 | |backgroundColorTop|String||否|顶部窗口的背景色,必须为十六进制颜色值,仅 iOS 支持| 17 | |backgroundColorBottom|String||否|底部窗口的背景色,必须为十六进制颜色值,仅 iOS 支持| 18 | |success|Function||否|接口调用成功的回调函数| 19 | |fail|Function||否|接口调用失败的回调函数| 20 | |complete|Function||否|接口调用结束的回调函数(调用成功、失败都会执行)| 21 | 22 | **代码示例** 23 | 24 | ```javascript 25 | uni.setBackgroundColor({ 26 | backgroundColor: '#ffffff', 27 | backgroundColorTop: '#222222', 28 | backgroundColorBottom: '#333333' 29 | }); 30 | ``` 31 | 32 | ## uni.setBackgroundTextStyle(OBJECT) 33 | 34 | 动态设置下拉背景字体、loading 图的样式。 35 | 36 | **平台差异说明** 37 | 38 | |App|HarmonyOS Next|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务| 39 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 40 | |x|HBuilderX 4.31|x|√|x|√|x|√|√|√|x| 41 | 42 | **参数说明** 43 | 44 | |属性|类型|必填|说明| 45 | |:-|:-|:-|:-| 46 | |textStyle|String|是|下拉背景字体、loading 图的样式,值为:dark、light| 47 | |success|Function|否|接口调用成功的回调函数| 48 | |fail|Function|否|接口调用失败的回调函数| 49 | |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| 50 | 51 | **代码示例** 52 | 53 | ```javascript 54 | uni.setBackgroundTextStyle({ 55 | textStyle: 'dark' // 下拉背景字体、loading 图的样式为dark 56 | }) 57 | ``` 58 | -------------------------------------------------------------------------------- /docs/api/ui/menuButton.md: -------------------------------------------------------------------------------- 1 | ## getMenuButtonBoundingClientRect() 2 | 3 | 在小程序平台,如果原生导航栏被隐藏,仍然在右上角会有一个悬浮按钮,微信下也被称为胶囊按钮。本API用于获取小程序下该菜单按钮的布局位置信息,方便开发者布局顶部内容时避开该按钮。 4 | 5 | 坐标信息以屏幕左上角为原点。 6 | 7 | **平台差异说明** 8 | 9 | |App |H5 |微信小程序 |支付宝小程序 |百度小程序 |抖音小程序|飞书小程序 |QQ小程序 |元服务| 10 | |:-: |:-:|:-: |:-: |:-: |:-: |:-: |:-: |:-:| 11 | |x |x |√ |√ |√ |√ |x|√ |x| 12 | 13 | **返回值说明** 14 | 15 | |属性 |类型 |说明 | 16 | |:-: |:-: |:-: | 17 | |width |number |宽度,单位:px | 18 | |height |number |高度,单位:px | 19 | |top |number |上边界坐标,单位:px | 20 | |right |number |右边界坐标,单位:px | 21 | |bottom |number |下边界坐标,单位:px | 22 | |left |number |左边界坐标,单位:px | 23 | 24 | **示例** 25 | 26 | ```javascript 27 | let menuButtonInfo = uni.getMenuButtonBoundingClientRect() 28 | ``` 29 | 30 | **注意** 31 | 32 | - 支付宝小程序:其逻辑与微信小程序不同,它提供了菜单点击后按钮的自定义功能,可以选择显示那些系统按钮,[规范详情](https://docs.alipay.com/mini/api/optionmenuitem) 33 | -------------------------------------------------------------------------------- /docs/api/ui/nextTick.md: -------------------------------------------------------------------------------- 1 | ## nextTick(function callback) 2 | 在小程序自定义组件,如wxcomponents中使用。延迟一部分操作到下一个时间片再执行。(类似于 setTimeout) 。其他平台无此概念。 3 | 4 | - 微信小程序:[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.nextTick.html) 5 | - 百度小程序:[规范详情](https://smartprogram.baidu.com/docs/develop/api/custom_component/#swan-nextTick/) 6 | - QQ小程序:[规范详情](https://q.qq.com/wiki/develop/miniprogram/API/interface/interface_nexttick.html#qq-nexttick) 7 | -------------------------------------------------------------------------------- /docs/api/ui/scroll.md: -------------------------------------------------------------------------------- 1 | ## uni.pageScrollTo(OBJECT) 2 | 3 | 将页面滚动到目标位置。可以指定滚动到具体的scrollTop数值,也可以指定滚动到某个元素的位置 4 | 5 | ## 平台差异说明 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|华为快应用|360小程序|元服务| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |√(nvue不支持)|√|√|√|√|√|√|√|√|√| 10 | 11 | 12 | 13 | ## OBJECT参数说明 14 | 15 | |参数名 |类型 |必填 |说明 | 16 | |:- |:- |:- |:- | 17 | |scrollTop |Number |否 |滚动到页面的目标位置(单位px) | 18 | |selector |String |否 |元素选择器,用于指定要滚动到的元素位置,App、H5、微信小程序2.7.3+ 、支付宝小程序1.20.0+支持| 19 | |duration |Number |否 |滚动动画的时长,默认300ms,单位 ms | 20 | |success |function |否 |接口调用成功的回调函数 | 21 | |fail |function |否 |接口调用失败的回调函数 | 22 | |complete |function |否 |接口调用结束的回调函数(调用成功、失败都会执行) | 23 | 24 | 25 | 26 | **selector 语法** 27 | 28 | selector类似于 CSS 的选择器,但仅支持下列语法。 29 | 30 | - ID选择器:#the-id 31 | - class选择器(可以连续指定多个):`.a-class.another-class` 32 | - 子元素选择器:`.the-parent > .the-child` 33 | - 后代选择器:`.the-ancestor .the-descendant` 34 | - 跨自定义组件的后代选择器:`.the-ancestor >>> .the-descendant` 35 | - 多选择器的并集:`#a-node, .some-other-nodes` 36 | 37 | ## uni-app x 注意事项 38 | 39 | 1. app-uvue支持的选择器较少,不支持ID选择器,[详见](https://doc.dcloud.net.cn/uni-app-x/css/#%E9%80%89%E6%8B%A9%E5%99%A8) 40 | 2. app-uvue的页面滚动,是由页面最外层的scroll-view模拟的,如果页面最外层不是scroll-view,无法使用本api。[详见](https://doc.dcloud.net.cn/uni-app-x/css/#pagescroll) 41 | 3. app-uvue的scroll-view滚动时,如需动画,则需要在scroll-view的属性中配置 `scroll-with-animation="true"`,[详见](/component/scroll-view.md) 42 | 4. scroll-view的滚动,设置其scrollTop即可。[详见](/component/scroll-view.md) 43 | 44 | **示例** 45 | 46 | ```javascript 47 | uni.pageScrollTo({ 48 | scrollTop: 0, 49 | duration: 300 50 | }); 51 | ``` 52 | -------------------------------------------------------------------------------- /docs/api/ui/window.md: -------------------------------------------------------------------------------- 1 | ## uni.onWindowResize(CALLBACK) 2 | 监听窗口尺寸变化事件 3 | 4 | > 1.6.0 新增 5 | 6 | **平台差异说明** 7 | 8 | |App|HarmonyOS Next|H5|微信小程序 |支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|元服务| 9 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 10 | |√|HBuilderX 4.25|√|√|x|x|x|√|√|x| 11 | 12 | **CALLBACK 参数说明** 13 | 14 | |属性|类型|说明| 15 | |---|---|---| 16 | |size|Object|变化后的窗口的大小,单位为 px ,{windowWidth,windowHeight}| 17 | 18 | **代码示例** 19 | 20 | ```javascript 21 | const windowResizeCallback = (res) => { 22 | console.log('变化后的窗口宽度=' + res.size.windowWidth) 23 | console.log('变化后的窗口高度=' + res.size.windowHeight) 24 | } 25 | uni.onWindowResize(windowResizeCallback) 26 | ``` 27 | 28 | **TIPS** 29 | - 如App端设置软键盘弹出方式为adjustResize ,则在键盘弹出时,会触发此事件。 30 | - 横竖屏切换时,会触发此事件。 31 | 32 | ## uni.offWindowResize(CALLBACK) 33 | 取消监听窗口尺寸变化事件 34 | 35 | > 1.6.0 新增 36 | 37 | 平台差异说明 38 | 39 | |App|HarmonyOS Next|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|元服务| 40 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 41 | |√|HBuilderX 4.31|√|√|x|x|x|√|x| 42 | 43 | **Tips** 44 | - `CALLBACK`为调用`uni.onWindowResize`时传入的`CALLBACK` 45 | 46 | **代码示例** 47 | 48 | ```javascript 49 | uni.offWindowResize(windowResizeCallback) 50 | ``` 51 | -------------------------------------------------------------------------------- /docs/api/uniCloud.md: -------------------------------------------------------------------------------- 1 | ### uniCloud 2 | 3 | 完整uniCloud客户端api列表请参考:[uniCloud客户端sdk](https://doc.dcloud.net.cn/uniCloud/client-sdk.html) 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /docs/api/worker.md: -------------------------------------------------------------------------------- 1 | #### Worker 2 | 3 | 目前需分平台编写 4 | 5 | - 微信小程序:[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/worker/wx.createWorker.html) 6 | - 支付宝小程序:[规范详情](https://opendocs.alipay.com/mini/api/worker) 7 | - 抖音小程序:[规范详情](https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/worker/tt-create-worker) 8 | - QQ小程序:[规范详情](https://q.qq.com/wiki/develop/miniprogram/API/worker/worker.html) 9 | - H5:标准H5的worker仍然可以使用 10 | - App: 11 | * App的js是在独立的jscore运行的,如果需要在另一个线程运行js,可以使用web-view组件或renderjs,这样的js运行在webview里,和jscore里的js是两个线程。但注意多个webview之间的js是一个进程,使用webview里的js时注意会影响视图层的渲染。 12 | * 另外插件市场也有原生插件用于多线程,[详见](https://ext.dcloud.net.cn/search?q=%E5%A4%9A%E7%BA%BF%E7%A8%8B) 13 | -------------------------------------------------------------------------------- /docs/app/geolocation.md: -------------------------------------------------------------------------------- 1 | 2 | > HBuilderX3.3.0开始独立出“系统定位”模块 3 | 4 | ### 背景 5 | 6 | 从2021年初开始,高德、百度、腾讯等地图服务商更新了服务协议、开始实施商业授权机制,要求除公益App外所有使用地图相关功能(包括定位SDK、地图SDK、H5地图等)都需要获取地图服务商的商业授权。重点强调一下,免费应用同样需要商业授权,除非你的应用是公益类App,其它类型App都需要商业授权。 7 | - 高德地图参考:[https://lbs.amap.com/upgrade](https://lbs.amap.com/upgrade) 8 | - 百度地图参考:[https://lbsyun.baidu.com/cashier/auth](https://lbsyun.baidu.com/cashier/auth) 9 | 没有取得地图服务商授权的App可能会遇到定位或地图功能被停用、上架应用市场可能提示存在侵权的问题,因此需要向高德、百度等地图开放平台申请商业授权。 10 | 11 | 为了避免商业授权引起的问题,也可以只使用“系统定位”模块,“系统定位”在功能和机型适配上没有高德、百度等商业定位服务完善,需开发者根据实际情况选择。 12 | 13 | 14 | ### 系统定位 15 | 系统定位调用的系统提供的定位服务,不同设备对定位功能支持的情况有所差异 16 | 17 | #### iOS平台 18 | 由苹果公司提供定位服务,可以获取经纬度信息,也支持解析地址信息。即可以直接返回城市街道信息。 19 | 20 | #### Android平台 21 | 标准Android平台的定位服务是Google提供的,但需要手机内置GMS服务,连接Google服务器。国产手机大多不支持。 22 | 23 | 主流国内手机厂商均自行提供了定位服务,但小众品牌可能不支持,主流品牌中较老的机型也不支持。如下Android手机厂商都支持系统定位: 24 | - 华为 25 | - 小米 26 | - Oppo 27 | - Vivo 28 | - 努比亚 29 | - 一加 30 | - 魅族 31 | - 联想 32 | - 金立 33 | 34 | 在国外通常都是使用Google的GMS提供定位服务。 35 | 36 | **注意:Android系统定位模块不支持位置解析服务,只可以获取经纬度信息,不支持解析地址信息。如需要根据经纬度获取城市街道信息,仍然需要请求高德、百度等商业服务** 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /docs/app/ios/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcloudio/unidocs-zh/05727070b19d20c9ee796080f6d897b348554855/docs/app/ios/.keep -------------------------------------------------------------------------------- /docs/app/ios/dsym.md: -------------------------------------------------------------------------------- 1 | ## 概述 2 | 3 | ### 什么是符号表 4 | 符号表是内存地址与源码文件名、函数名称、行号的映射表。符号表通常包括以下信息: 5 | ``` 6 | <内存起始地址><内存结束地址><源码函数名称>[<源码文件名称:源码行号>] 7 | ``` 8 | 应用正式发布后二进制代码中不再包含源码信息,应用发生异常(Crash)时可以捕获异常发生时的堆栈信息,但这些信息使用内存地址表示,这时候可以通过符号表进行解析还原成源码堆栈信息,从而方便开发者定位并解决异常问题。 9 | 10 | 11 | ### 什么是dsym文件 12 | iOS平台中,dSYM文件是指具有调试信息的目标文件,存储着源码文件名、函数名、行号等信息,与可执行文件中的函数内存地址一一对应。 13 | XCode中发布生成xcarchive文件默认包含dysm文件,通常为:xxxx.app.dSYM,其中xxxx为应用程序的包名,如下所示: 14 | 15 | ![](https://img-cdn-aliyun.dcloud.net.cn/client/doc/ios/dsym-xcarchive.png) 16 | 17 | dSYM文件内容为: 18 | 19 | ![](https://img-cdn-aliyun.dcloud.net.cn/client/doc/ios/dsym-content.png) 20 | 21 | 22 | ### dsym文件的用途 23 | 当应用发布上线后,无法在XCode中直观看到应用崩溃的错误,这时需要分析 crash report 文件,iOS设备中会有日志文件保存每个应用崩溃时的函数内存地址,通过 XCode 的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件,这时就可以通过函数内存地址在 dsym 文件中查找到对应的函数名称和源码文件名。 24 | 25 | 多数统计平台都会捕获应用崩溃错误时的函数内存地址并提交到统计服务器,为了更好的分析崩溃日志,也需要 dysm 文件来查找到崩溃的函数名称和源码文件名称。 26 | 因此统计平台也需要开发者上传 dsym 文件。 27 | 28 | 29 | ## HBuilderX中云端打包配置生成符号表文件 30 | 31 | > HBuilderX3.2.23+版本新增支持云端打包支持生成iOS符号表 dsym 文件 32 | 33 | 在HBuilderX中云端打包打开项目的manifest.json文件,在“App常用其它设置”界面中的勾选“生成iOS符号表(dsym)文件”: 34 | 35 | ![](https://img-cdn-aliyun.dcloud.net.cn/client/doc/ios/dsym-hx.png) 36 | 37 | 保存后提交云端。 38 | 39 | 云端打包成功后会在HBuilderX控制台输出 dsym 文件下载地址: 40 | 41 | ![](https://img-cdn-aliyun.dcloud.net.cn/client/doc/ios/dsym-download.png) 42 | 43 | ### 注意事项 44 | - 下载文件格式为zip,解压后可获得 dsym 文件 45 | - 生成符号表 dsym 文件需要消耗云端打包CDN资源,使用此功能需单独计费 46 | - 生成的 dsym 文件下载地址有效期为两天,过期后自动删除,无法恢复,生成后请尽快下载到本地备份 47 | 48 | -------------------------------------------------------------------------------- /docs/app/oauth/oauth-facebook.md: -------------------------------------------------------------------------------- 1 | ### 开通条件 2 | 1.海外网络环境 3 | 2.Facebook账号([Facebook登录页面](http://www.facebook.com)) 4 | 5 | ### 创建应用 6 | 7 | 1.打开[Facebook开发者中心](http://developers.facebook.com/) 8 | 9 | 2.点击右上角"我的应用" 10 | 11 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-myApplication.png) 12 | 13 | 3.进入应用管理界面,点击"创建应用" 14 | 15 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-createApplication.png) 16 | 17 | 18 | 4.根据需要选择应用产品的类型(应用类型详见"详细了解应用类型"),然后点击继续 19 | 20 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-chooseApplicationType.png) 21 | 22 | 23 | 5.填写应用信息 24 | 25 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-fillInAppInfo.png) 26 | 27 | 28 | 6.创建完成后即可获取应用的应用编号(即appID) 29 | 30 | 7.为应用添加登录功能 31 | 32 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-addProduct.png) 33 | 34 | 35 | 36 | ### 设置登录-iOS 37 | 1.我的应用--设置--基本,选择添加平台,选择iOS 38 | 39 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-ios-addPlatform.png) 40 | 41 | 42 | 2.填写信息保存即可 43 | 44 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-ios-saveInfo.png) 45 | 46 | 47 | 48 | ### 设置登录-Android 49 | 50 | 我的应用--设置--基本,选择添加平台 51 | 52 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-android-addPlatform.png) 53 | 54 | 55 | 选择android平台,应用商店选择Google Play 56 | 57 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-android-appstore.png) 58 | 59 | 60 | 填写必要的包名和散列信息,类名是固定的。如图 61 | 62 | 散列的获取方法,参考文档: 63 | https://developers.facebook.com/docs/facebook-login/android 第六小节 64 | 65 | 如果获取到的散列位数不对,需要找台linux/mac 计算机。 66 | 使用下面的命令获取 67 | keytool -exportcert -alias hbuilder -keystore ./HBuilder.keystore | openssl dgst -sha1 -binary | openssl base64 68 | 69 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-android-saveInfo.png) 70 | 71 | 72 | 73 | ### 应用权限 74 | 使用Facebook登录需开启"public_profile"以及"email"的访问权限 75 | 点击"应用审核"-"权限和功能",开启"public_profile"以及"email"的高级访问权限 76 | 77 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-permission.png) 78 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /docs/app/oauth/oauth-google.md: -------------------------------------------------------------------------------- 1 | ### 前置条件 2 | 3 | 1 海外网络环境 4 | 2 Google账号 5 | 6 | ### Android开通步骤 7 | 8 | 2.1 打开Google 登录引导页 9 | 网址: https://developers.google.com/identity/sign-in/android/sign-in?hl=zh-cn 10 | 11 | 2.2 选择项目配置 12 | 13 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-android-apiConfig.png) 14 | 15 | 点击后出现项目与应用选择界面, 16 | 如果你有已创建过的Firebase项目,可以直接选择。 17 | 如果没有,可以选择新建一个Google Api 项目。 18 | 19 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-android-configureProject.png) 20 | 21 | 选择项目后,在该项目下新建一个应用 22 | 选择应用平台 android 23 | 24 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-android-appType.png) 25 | 26 | 27 | 需要填写应用的包名和sha1指纹 28 | 指纹的获取方法在界面上有提示。按照提示操作即可。 29 | 30 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-android-createApp.png) 31 | 32 | 点击创建,即可完成开通步骤。 33 | 34 | ### iOS开通步骤 35 | 36 | 3.1 打开[Google登录iOS引导页](http://developers.google.com/identity/sign-in/ios/start-integrating?hl=zh-cn) 37 | 38 | 3.2 点击创建OAuth客户端ID,填写项目名称 39 | 40 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-ios-config.png) 41 | 42 | 3.3 选择iOS平台、填写BundleID后,点击CREATE,即可获取Client ID 43 | 44 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-ios-create.png) -------------------------------------------------------------------------------- /docs/cloud.md: -------------------------------------------------------------------------------- 1 | ### 统一推送uniPush 2 | UniPush是DCloud推出的集成型统一推送服务,内建了苹果、华为、小米、OPPO、魅族等手机厂商的系统级推送和个推等第三方推送。 3 | 4 | 开发者只需要开发一次。系统会自动在不同手机上选择最可靠的推送通道发送push消息,保障送达率。 5 | 6 | UniPush即降低了开发成本、又提高了push送达率,并且免费,是当前推送的最佳解决方案。 7 | 8 | 详见[https://ask.dcloud.net.cn/article/35622](https://ask.dcloud.net.cn/article/35622) 9 | 10 | ### uni统计 11 | 12 | uni-app,自带免费统计平台。无需到处对接统计sdk,可以在一张报表里看到所有端(iOS、Android、H5及各家小程序)的运营数据。 13 | 14 | uni统计官网地址:[https://tongji.dcloud.net.cn/](https://tongji.dcloud.net.cn/) 15 | 16 | ### 广告变现 17 | 18 | `uni-app` 支持接入`uni-ad`广告联盟,开发者可实现**一次开发,多端变现**。 19 | 20 | `uni-ad`支持开屏、信息流、激励视频、悬浮红包、推送等丰富的广告形式,且聚合了腾讯广点通、今日头条穿山甲、快手、360联盟等主流广告源,有更高的广告填充率。 21 | 22 | 更多信息参考 [uni-ad 广告联盟](https://uniad.dcloud.net.cn) 23 | 24 | ### 制作统一发行页面 25 | 26 | 开发者的应用太多,App、小程序、h5...如何在一个url里呈现,统一简单的传播到用户侧? 27 | 来看这个页面[https://m3w.cn/uniapp](https://m3w.cn/uniapp),一个页面囊括所有。 28 | 如何制作?开发一个uni-app,然后在HBuilderX的菜单工具-发行-生成统一发布页面。 29 | 30 | 31 | #### 加入换量联盟 32 | 33 | `uni-app` 发行成原生App后,可加入DCloud换量平台,和其他开发者交叉换量、彼此推广,每日新增用户可翻倍!详情及开通方式:[http://ask.dcloud.net.cn/article/13300](http://ask.dcloud.net.cn/article/13300) 34 | -------------------------------------------------------------------------------- /docs/collocation/_sidebar.md: -------------------------------------------------------------------------------- 1 | * [pages.json 页面路由](pages.md) 2 | * [manifest.json 应用配置](manifest.md) 3 | * [App 完整manifest.json](manifest-app.md) 4 | * [AndroidManifest.xml(安卓原生配置)](/tutorial/app-nativeresource-android.md) 5 | * [Info.plist(iOS原生配置)](/tutorial/app-nativeresource-ios.md) 6 | * [App.vue/uvue](App.md) 7 | * [main.js/uts](main.md) 8 | * [uni.scss](uni-scss.md) 9 | * [package.json](package.md) 10 | * [vue.config.js](vue-config.md) 11 | * [vite.config.js](vite-config.md) 12 | -------------------------------------------------------------------------------- /docs/component/ad-content-page.md: -------------------------------------------------------------------------------- 1 | ## 短视频内容联盟组件 2 | 3 | ### 简介 4 | 5 | ⼀个视频内容频道,支持上下滑动切换视频内容 6 | 7 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/ad-content-page.png) 8 | 9 | **平台差异说明** 10 | 11 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|元服务|小红书小程序| 12 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 13 | |√(3.1.5+)|x|x|x|x|x|x|x|x|x|x|x| 14 | 15 | **开通配置广告** 16 | 17 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 18 | 19 | 20 | 文档已迁移至 [短视频内容联盟广告](https://uniapp.dcloud.net.cn/uni-ad/ad-content-page.html) 21 | -------------------------------------------------------------------------------- /docs/component/ad-draw.md: -------------------------------------------------------------------------------- 1 | 2 | ## 沉浸视频流广告 3 | 4 | ### 简介 5 | 6 | 也称为Draw视频信息流广告 7 | 8 | 沉浸视频流广告为媒体提供了竖屏视频信息流广告样式,适合在全屏的竖屏视频中使用。支持app-nvue页面使用。 9 | 10 | ### 适用场景 11 | 12 | 类抖音的竖版视频流,来电秀、直播间等全屏观看的视频。 13 | 14 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/ad-draw.png) 15 | 16 | 17 | - app端的广告源由腾讯广点通、头条穿山甲、快手广告联盟以及部分DCloud直投广告聚合提供,在DCloud的uni-ad后台注册:[https://uniad.dcloud.net.cn/](https://uniad.dcloud.net.cn/) 18 | 19 | **平台差异说明** 20 | 21 | |App-nvue|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序|元服务|小红书小程序| 22 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 23 | |√(3.0.0+)|x|x|x|x|x|x|x|x|x|x|x|x|x| 24 | 25 | 26 | **开通配置广告** 27 | 28 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 29 | 30 | 31 | 文档已迁移至 [Draw视频信息流广告](https://uniapp.dcloud.net.cn/uni-ad/ad-draw.html) 32 | -------------------------------------------------------------------------------- /docs/component/ad-fullscreen-video.md: -------------------------------------------------------------------------------- 1 | ### 全屏视频广告 2 | 3 | 全屏视频广告是一个原生组件,层级比普通组件高。全屏视频广告每次创建都会返回一个全新的实例,默认是隐藏的,需要调用 FullScreenVideoAd.show() 将其显示。 4 | 5 | 如何开通参考激励视频广告 [https://uniapp.dcloud.net.cn/api/a-d/rewarded-video](https://uniapp.dcloud.net.cn/api/a-d/rewarded-video) 6 | 7 | 8 | **平台差异说明** 9 | 10 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序|元服务|小红书小程序| 11 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 12 | |√(3.4.8+)|x|x|x|x|x|x|x|x|x|x|x|x|x| 13 | 14 | - app端的广告源由腾讯优量汇、头条穿山甲、快手等广告联盟提供,DCloud负责聚合 15 | - 小程序端的广告由小程序平台提供 16 | 17 | **开通配置广告** 18 | 19 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 20 | 21 | 22 | 文档已迁移至 [全屏视频](https://uniapp.dcloud.net.cn/uni-ad/ad-fullscreen-video.html) 23 | -------------------------------------------------------------------------------- /docs/component/ad-grid.md: -------------------------------------------------------------------------------- 1 | ## Grid 广告 2 | 3 | ### 简介 4 | 5 | 开发者可以使用 ad 组件创建 Grid 广告组件,Grid 广告组件在创建后会自动拉取广告数据并显示。 6 | 7 | **平台差异说明** 8 | 9 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序|元服务|小红书小程序| 10 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 11 | |x|x|x|√ 3.5.1+|x|x|x|x|x|x|x|x|x|x| 12 | 13 | **开通配置广告** 14 | 15 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 16 | 17 | 18 | 文档已迁移至 [Grid 广告](https://uniapp.dcloud.net.cn/uni-ad/ad-grid.html) 19 | -------------------------------------------------------------------------------- /docs/component/ad-interactive.md: -------------------------------------------------------------------------------- 1 | ## 互动广告 2 | 3 | ## 简介 4 | 5 | 互动广告是DCloud联合三方服务商为开发者提供新的广告场景增值服务。开发者在App中放置入口,用户点击入口参与权益化、趣味性的活动。 6 | 7 | 8 | **平台差异说明** 9 | 10 | |App |HarmonyOS Next |Web |微信小程序 |支付宝小程序 |百度小程序 |抖音小程序 |QQ小程序 |快应用 |360小程序|快手小程序 |京东小程序 |元服务|小红书小程序| 11 | |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-:|:-:| 12 | |√(3.6.11+) |x |√(3.6.11+) |√(3.5.5+) |x |x |x |x |x |x |x |x |x|x| 13 | 14 | **开通配置广告** 15 | 16 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 17 | 18 | 19 | 文档已迁移至 [互动游戏](https://uniapp.dcloud.net.cn/uni-ad/interactive.html) 20 | -------------------------------------------------------------------------------- /docs/component/ad-interstitial.md: -------------------------------------------------------------------------------- 1 | ### 插屏广告 2 | 3 | 插屏广告组件是由客户端原生的图片、文本、视频控件组成的;插屏广告与信息流或横幅广告相比展现尺寸更大,同样能够满足您对大量曝光和用户转化的需求。 4 | 5 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/interstitial-ad.png) 6 | 7 | 8 | **平台差异说明** 9 | 10 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序|元服务|小红书小程序| 11 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 12 | |√(3.4.8+)|x|x|√(3.4.8+)|x|x|x|x|x|x|x|x|x|x| 13 | 14 | 15 | **开通配置广告** 16 | 17 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 18 | 19 | 20 | 文档已迁移至 [插屏视频](https://uniapp.dcloud.net.cn/uni-ad/ad-interstitial.html) 21 | -------------------------------------------------------------------------------- /docs/component/ad-rewarded-video.md: -------------------------------------------------------------------------------- 1 | ## 激励视频广告 2 | 3 | ### 简介 4 | 5 | 激励视频广告,是cpm收益**最高**的广告形式。 6 | 7 | 手机用户观看几十秒视频广告,在广告播放完毕后可获得应用开发商提供的奖励,而应用开发商则可以从广告平台获取不菲的广告收入。 8 | 9 | 10 | 11 | 与开屏、信息流等广告变现方式不同,激励视频需设计激励场景,给用户发放激励。 12 | 13 | 常见场景: 14 | - 合成类游戏,看广告获得道具,比如各种养龙、养凤凰、养牛、养蟹...... 15 | - 走路赚钱、看短视频赚钱、猜歌赚钱等应用也非常多 16 | - 网赚应用中,做各种任务赚钱,或者想要接赚钱的任务,前提是观看激励视频 17 | - 增值内容消费,比如小说、电影看一半,剩下的需要看广告后才能继续 18 | - 区块链应用融合激励视频,比如看广告提高收益或提高挖矿成功率 19 | - 游戏内看广告复活、看广告拿高级道具 20 | 21 | 注意激励不能直接发钱,那会被视为积分墙,而被广告平台禁封。 22 | 23 | - 激励视频还经常和邀请裂变结合在一起,应用开发者为用户设计邀请好友的奖励,让用户有动力邀请更多用户使用这个应用,邀请的人越多,获得的奖励越多。 24 | 25 | 激励视频是造富神器。行业经常出现几个人的团队,月收入百万的奇迹。 26 | 27 | 28 | **平台差异说明** 29 | 30 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序| 31 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 32 | |√(3.4.8+)|x|x|√(3.4.8+)|x|x|x|x|x|x|x|x| 33 | 34 | 35 | 文档已迁移至 [激励视频广告](https://uniapp.dcloud.net.cn/uni-ad/ad-rewarded-video.html) 36 | -------------------------------------------------------------------------------- /docs/component/ad-video.md: -------------------------------------------------------------------------------- 1 | ## 视频广告 2 | 3 | ### 简介 4 | 5 | 开发者可以使用 ad 组件创建视频广告,ad 广告组件在创建后会自动拉取广告数据并显示。 6 | 7 | 8 | 9 | **平台差异说明** 10 | 11 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序| 12 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 13 | |x|x|x|√ 3.7.2+|x|x|x|x|x|x|x|x| 14 | 15 | **开通配置广告** 16 | 17 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 18 | 19 | 20 | 文档已迁移至 [视频广告](https://uniapp.dcloud.net.cn/uni-ad/ad-video.html) 21 | -------------------------------------------------------------------------------- /docs/component/ad-weixin.md: -------------------------------------------------------------------------------- 1 | ## uni-ad支持微信小程序广告 2 | 3 | 文档已迁移至 [微信小程序广告](https://uniapp.dcloud.net.cn/uni-ad/ad-weixin.html) 4 | -------------------------------------------------------------------------------- /docs/component/ad.md: -------------------------------------------------------------------------------- 1 | ## 信息流广告 2 | 3 | ### 简介 4 | 5 | 应用内展示的广告组件,可用于banner或信息流。 6 | 7 | ### 适用场景 8 | 9 | Banner或信息流广告展现场景非常灵活,常见的展现场景为:文章顶部,详情页面顶部,第一屏中部等。建议信息流广告不要放置在底部 10 | 11 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/ad-feed.png) 12 | 13 | 14 | - App端的广告源由腾讯优量汇、头条穿山甲、快手广告联盟等主流广告渠道以及部分DCloud直投广告组成,在DCloud的uni-ad后台注册:[https://uniad.dcloud.net.cn/](https://uniad.dcloud.net.cn/) 15 | - H5端、微信小程序端的广告由DCloud直接提供 16 | - 其他小程序端由小程序平台提供 17 | 18 | **平台差异说明** 19 | 20 | |App|HarmonyOS Next|Web|微信小程序|支付宝小程序|百度小程序|抖音小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序|元服务|小红书小程序| 21 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 22 | |√(2.5.2+)|x|3.4.8+|√|x|√|√|√|x|x|√|x|x|x| 23 | 24 | **开通配置广告** 25 | 26 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 27 | 28 | 29 | 文档已迁移至 [信息流(Banner)广告](https://uniapp.dcloud.net.cn/uni-ad/ad-component.html) 30 | -------------------------------------------------------------------------------- /docs/component/cell.md: -------------------------------------------------------------------------------- 1 | ## cell 2 | 3 | > HarmonyOS Next 不支持 4 | 5 | app端nvue专用组件。它的重要价值在于告诉原生引擎,哪些部分是可重用的。 6 | 7 | `` Cell 必须以一级子组件的形式存在于 `list recycler waterfall` 中。 8 | 9 | #### 子组件 10 | 11 | Cell 支持添加任意类型的组件作为自己的子组件,但是请不要再内部添加滚动容器了。 12 | 13 | 14 | #### 属性 15 | 16 | - keep-scroll-position boolean, 它控制插入单元格后是否保持最后一个滑动位置。 17 | 18 | - insert-animation string, cell 的插入动画。当前只支持 `none` 和 `default`。 19 | 20 | - delete-animation string, cell 的删除动画。当前只支持 `none` 和 `default`。 21 | 22 | - recycle boolean, 默认值 true。这个属性控制这个 Cell 的 view 和子 views 是否在列表滚动时进行回收,在 iOS 上通常必须指定为 true (因为默认为 true,所以一般不需要写这个属性),如果设置为 false,列表滚动时,页面会占用非常高的内存。Android上默认是true,设置为false可以防止Image和Text上数据重新绑定。 23 | 24 | - render-reverse-position boolean, 默认值 false。定义开始渲染的位置,需搭配list的属性`render-reverse`共同使用,单独配置不起作用。HBuilderX3.6.9+支持。 25 | 26 | #### 样式 27 | 28 | - 通用样式. [详见](https://uniapp.dcloud.net.cn/tutorial/nvue-css.html) 29 | 30 | > TIP 31 | > - 不要指定 `` 的 `flex` 值。Cell 的宽度是由它的父容器决定的,你也不需要指定它的高度。 32 | > - Cell 的排版的位置是由父容器控制的,所以一般不要为其指定 `margin` 样式 33 | 34 | #### 事件 35 | 36 | - 通用事件. [详见](https://uniapp.dcloud.net.cn/tutorial/nvue-event.html) 37 | -------------------------------------------------------------------------------- /docs/component/custom-tab-bar.md: -------------------------------------------------------------------------------- 1 | ### custom-tab-bar 2 | 3 | 自定义tabBar组件。 4 | 5 | 在小程序和App端,为提升性能,在 `pages.json` 里配置固定的原生tabBar。但在H5端,这一设计并不会提升性能。 6 | 7 | 同时,H5端尤其是PC宽屏,对tabBar的位置和样式有更灵活的需求,tabBar作为一级导航,更多的时候是在PC网页顶部而不是底部。 8 | 9 | 自定义tabBar组件应需而生,它仍然读取 `pages.json` 里配置的tabBar信息,但这个组件可以自定义摆放的位置,可以灵活的配置各种css。 10 | 11 | 该组件支持 ``pages.json`` 中 ``tabBar`` 相关配置(兼容性和 H5 保持一致), 其中不支持 ``borderStyle`` 配置。 12 | 13 | 该组件支持所有 ``tabBar`` 相关 API,例如设置 tab 徽标、显示红点、以及 switchTab 等。 14 | 15 | **平台兼容性** 16 | 17 | __仅 H5 支持__,HBuilderX 2.9.9 + 。 18 | 19 | 20 | 21 | **属性说明** 22 | 23 | |属性名|类型|默认值|说明| 24 | |:-|:-|:-|:-| 25 | |direction|String|horizontal|选项的排列方向 可选值:horizontal,vertical| 26 | |show-icon|Boolean|false|是否显示icon| 27 | |selected|Number|0|选中的tabBar选项索引值| 28 | |onTabItemTap|EventHandle||点击事件,参数为Object,具体见下表| 29 | 30 | ``onTabItemTap`` 参数说明: 31 | 32 | |属性|类型|说明| 33 | |---|---|---| 34 | |index|String|被点击tabItem的序号,从0开始| 35 | |pagePath|String|被点击tabItem的页面路径| 36 | |text|String|被点击tabItem的按钮文字| 37 | 38 | 本组件无需配置 tabBar 的 list,每个 tabItem 仍然从 `pages.json` 中读取。避免多端编写重复代码。 39 | 40 | **示例** 41 | 42 | 在`hello uni-app`中,在 topWindow 中放置自定义tabBar组件,将页面一级导航放置在网页顶部。 43 | 44 | ```html 45 | 46 | 51 | ``` 52 | 53 | 示例体验:使用PC浏览器打开[https://hellouniapp.dcloud.net.cn/](https://hellouniapp.dcloud.net.cn/) 54 | 55 | 源码获取:HBuilderX 2.9.9+起新建uni-app项目,选择hello uni-app模板。 56 | 57 | 展现效果见下方截图: 58 | 59 | custom-tab-bar 水平布局(horizontal): 60 | 61 | ![uniapp](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/custom-tab-bar.png) 62 | 63 | custom-tab-bar 竖直布局(vertical): 64 | 65 | ![uniapp](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/vertical.png) 66 | -------------------------------------------------------------------------------- /docs/component/match-media.md: -------------------------------------------------------------------------------- 1 | ## match-media 2 | 3 | media query 匹配检测节点。 4 | 5 | 类似于网页开发中使用媒体查询来适配大屏小屏,match-media是一个可适配不同屏幕的基本视图组件。可以指定一组 media query 媒体查询规则,满足查询条件时,这个组件才会被展示。 6 | 7 | 例如在match-media组件中放置一个侧边栏,媒体查询规则设置为宽屏才显示,就可以实现在PC宽屏显示该侧边栏,而在手机窄屏中不显示侧边栏的效果。 8 | 9 | **平台兼容性** 10 | 11 | |app|h5|微信小程序|支付宝小程序|qq小程序|百度小程序|抖音小程序|飞书小程序|360小程序|快应用|京东小程序|元服务|小红书小程序| 12 | |:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-:| 13 | |2.8.12+,app-vue|√|基础库 2.11.1+|√|√|√|√|×|√|×|×|x|x| 14 | 15 | 16 | 17 | 注意:支付宝小程序、qq小程序、百度小程序、抖音小程序,暂不支持监听屏幕动态改变,即只执行一次媒体查询。 18 | 19 | **属性说明** 20 | 21 | |属性名|类型|默认值|必填|说明| 22 | |:-|:-|:-|:-|:-| 23 | |min-width|number||否|页面最小宽度( px 为单位)| 24 | |max-width|number||否|页面最大宽度( px 为单位)| 25 | |width|number||否|页面宽度( px 为单位)| 26 | |min-height|number||否|页面最小高度( px 为单位)| 27 | |max-height|number||否|页面最大高度( px 为单位)| 28 | |height|number||否|页面高度( px 为单位)| 29 | |orientation|string||否|屏幕方向( landscape 或 portrait )| 30 | 31 | **match-media 示例** 32 | 33 | 以下示例代码,推荐使用HBuilderX,新建uni-app项目,可直接体验完整示例。 34 | ```html 35 | 36 | 47 | ``` 48 | -------------------------------------------------------------------------------- /docs/component/movable-area.md: -------------------------------------------------------------------------------- 1 | ## movable-area 2 | 3 | 可拖动区域 4 | 5 | 由于app和小程序的架构是逻辑层与视图层分离,使用js监听拖动时会引发逻辑层和视图层的频繁通讯,影响性能。为了方便高性能的实现拖动,平台特封装了`movable-area`组件。 6 | 7 | `movable-area`指代可拖动的范围,在其中内嵌`movable-view`组件用于指示可拖动的区域。 8 | 9 | 即手指/鼠标按住`movable-view`拖动或双指缩放,但拖不出`movable-area`规定的范围。 10 | 11 | 当然也可以不拖动,而使用代码来触发`movable-view`在`movable-area`里的移动缩放。 12 | 13 | `movable-view`的规范另见[movable-view](/component/movable-view.md)。 14 | 15 | **平台差异说明** 16 | 17 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序|元服务|小红书小程序| 18 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 19 | |√|√|√|√|√|√|x|√|√|√|√|√|√|√| 20 | 21 | 22 | 23 | **属性说明** 24 | 25 | |属性名|类型|默认值|说明| 26 | |:-|:-|:-|:-| 27 | |scale-area|Boolean|false|当里面的 movable-view 设置为支持双指缩放时,设置此值可将缩放手势生效区域修改为整个 movable-area| 28 | 29 | **注意:movable-area 必须设置 width 和 height 属性,不设置默认为 10px** 30 | - movable-area app-nvue平台 暂不支持手势缩放,并且和滚动冲突。 31 | -------------------------------------------------------------------------------- /docs/component/official-account.md: -------------------------------------------------------------------------------- 1 | ### official-account 2 | 3 | 微信公众号关注组件。当用户扫小程序码打开小程序时,开发者可在小程序内配置公众号关注组件,方便用户快捷关注公众号,可嵌套在原生组件内。 4 | 5 | 仅微信小程序平台支持,[规范详情](https://developers.weixin.qq.com/miniprogram/dev/component/official-account.html) 6 | 7 | 支付宝平台另提供了`lifestyle`组件,可关注支付宝生活号,[规范详情](https://docs.alipay.com/mini/component/lifestyle) 8 | -------------------------------------------------------------------------------- /docs/component/open-data.md: -------------------------------------------------------------------------------- 1 | ## open-data 2 | 3 | 用于展示平台开放的数据。 4 | 5 | **平台差异说明** 6 | 7 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序| 8 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 9 | |x|x|√|x|√|√|x|√|x|x|x|x| 10 | 11 | **Tips** 12 | 13 | 该功能为各小程序平台提供的开放能力。App端和H5端不涉及此概念。 14 | 15 | 支付宝没有open-data组件,但提供了API方式获取相关信息。[参考](https://docs.alipay.com/mini/api/ch8chh) 16 | 17 | **属性说明** 18 | 19 | |属性名|类型|默认值|说明|平台差异说明| 20 | |:-:|:-:|:-:|:-:|:-:| 21 | |type|String||开放数据类型|| 22 | |open-gid|String||当 type="groupName" 时生效, 群id|微信小程序、QQ小程序| 23 | |lang|String|en|当 type="user*" 时生效,以哪种语言展示 userInfo,有效值有:en, zh_CN, zh_TW|微信小程序、QQ小程序| 24 | 25 | **type 有效值** 26 | 27 | |值|说明|平台差异说明| 28 | |:-:|:-:|:-:| 29 | |userNickName|用户昵称|微信小程序基础库 `1.9.90+` 返回 `"微信用户"`| 30 | |userAvatarUrl|用户头像|微信小程序基础库 `1.9.90+` 不再返回,展示 [灰色头像](https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0)| 31 | |userGender|用户性别|微信小程序基础库 `1.9.90+` 不再返回| 32 | |groupName|拉取群名称|微信小程序、QQ小程序| 33 | |userCity|用户所在城市|微信小程序基础库 `1.9.90+` 不再返回、QQ小程序| 34 | |userProvince|用户所在省份|微信小程序基础库 `1.9.90+` 不再返回、QQ小程序| 35 | |userCountry|用户所在国家|微信小程序基础库 `1.9.90+` 不再返回、QQ小程序| 36 | |userLanguage|用户的语言|微信小程序基础库 `1.9.90+` 不再返回、QQ小程序| 37 | 38 | **注意** 39 | - 微信小程序平台从 `2022年2月21日24时起` 回收通过 `` 展示个人信息的能力,[详情](https://developers.weixin.qq.com/community/develop/doc/000e881c7046a8fa1f4d464105b001?blockType=1)。若小程序需收集用户昵称头像等信息,可以通过 [头像昵称填写功能](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html) 进行收集。具体回收方式为: 40 | - 头像展示 [灰色头像](https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0) 41 | - 用户昵称展示 `微信用户` 42 | - 用户性别、地区、语言展示为为空 `“”` 43 | - 小程序通过 `` 展示群名称能力保留,平台会针对小程序生命周期内首次调用该组件展示群名称向用户提示:“群名称仅你可见,小程序无法获取。” 44 | 45 | **示例** 46 | 47 | ```html 48 | 49 | 50 | 51 | ``` 52 | -------------------------------------------------------------------------------- /docs/component/refresh.md: -------------------------------------------------------------------------------- 1 | ## refresh 2 | 3 | > HarmonyOS Next 不支持 4 | 5 | app端nvue专用组件。 6 | 7 | `` 为容器提供下拉刷新功能。在nvue上,可通过此组件实现灵活的、自定义的、高性能的下拉刷新。 8 | 9 | 10 | > 注意 11 | > - `` 是 ``、``、`` 的子组件,只能在被它们包含时才能被正确渲染。 12 | 13 | 14 | ``` 15 | 16 | 17 | Refreshing... 18 | 19 | 20 | {{num}} 21 | 22 | 23 | ``` 24 | 25 | #### 子组件 26 | 27 | - 诸如 ``、`` 之类的任何组件,都可以放到 `` 进行渲染。 28 | - 特殊子组件 ``: 只能作为 `` 和 `` 的子组件使用,拥有默认的动画效果实现。 29 | 30 | ``` 31 | 32 | Refreshing 33 | 34 | 35 | ``` 36 | 37 | #### 属性 38 | 39 | `display` 40 | 控制 `` 组件显示、隐藏。`display` 的设置必须成对出现,即设置 `display="show"`, 必须有对应的 `display="hide"`。可选值为 `show / hide`,默认值为 `show`。 41 | 42 | 43 | #### 事件 44 | - refresh 事件:当 ``、``、`` 被下拉完成时触发。 45 | - pullingdown 事件:当 ``、``、`` 被下拉时触发。 可以从 `event` 参数对象中获取以下数据: 46 | - `dy`: 前后两次回调滑动距离的差值 47 | - `pullingDistance`: 下拉的距离 48 | - `viewHeight`: refresh 组件高度 49 | - `type`: “pullingdown” 常数字符串 50 | 51 | ``` 52 | 53 | Refreshing ... 54 | 55 | 56 | ``` 57 | -------------------------------------------------------------------------------- /docs/component/uni-ad-unimp.md: -------------------------------------------------------------------------------- 1 | # uniMP激励视频广告 2 | 3 | ## 简介 4 | 5 | 通过App打开微信小程序播放激励视频广告 6 | 7 | 为了给开发者提供更高价格的广告,uni-ad 推出了高阶游戏广告预算。目前这种广告主预算只支持激励视频广告位 8 | 9 | 利用 uni-ad 多层调度策略动态调整渠道,在设备无广告时自动调整为其他广告渠道以增加广告填充率 10 | 11 | 12 | 13 | 文档已迁移至 [uniMP激励视频广告](https://uniapp.dcloud.net.cn/uni-ad/unimp.html) 14 | -------------------------------------------------------------------------------- /docs/component/uniui/uni-group.md: -------------------------------------------------------------------------------- 1 | ::: tip 组件名:uni-group 2 | > 代码块: `uGroup` 3 | 4 | [点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uni-group) 5 | ::: 6 | 7 | 分组组件可用于将组件分组,添加间隔,以产生明显的区块。 8 | 9 | ## 介绍 10 | ### 基本用法 11 | 12 | 13 | ```html 14 | 15 | 分组1 的内容 16 | 分组1 的内容 17 | 18 | 19 | 20 | 分组2 的内容 21 | 分组2 的内容 22 | 23 | ``` 24 | ## API 25 | ### Group Props 26 | 27 | |属性名|类型|默认值|说明| 28 | |:-:|:-:|:-:|:-:| 29 | |title|String|-|主标题| 30 | |top|Number|-|分组间隔| 31 | |mode|String|''|模式 ,card 为卡片模式| 32 | 33 | 34 | ## 示例 35 | ::: warning 注意 36 | 示例依赖了 `uni-card` `uni-section` `uni-scss` 等多个组件,直接拷贝示例代码将无法正常运行 。 37 | 38 | 请到 [组件下载页面](https://ext.dcloud.net.cn/plugin?name=uni-group) ,在页面右侧选择 `使用 HBuilderX导入示例项目` ,体验完整组件示例。 39 | ::: 40 | 41 | ::: preview https://hellouniapp.dcloud.net.cn/pages/extUI/group/group 42 | > Template 43 | ``` html 44 | 81 | ``` 82 | ::: 83 | 84 | [完整示例演示](https://hellouniapp.dcloud.net.cn/pages/extUI/group/group) -------------------------------------------------------------------------------- /docs/component/uniui/uni-ui.md: -------------------------------------------------------------------------------- 1 | # uni-ui 介绍 2 | 3 | uni-ui 是DCloud提供的一个跨端ui库,它是基于vue组件的、flex布局的、无dom的跨全端ui框架。 4 | 5 | `uni-ui` 不包括内置组件,**它是内置组件的补充**。 6 | 7 | ## uni-ui产品特点 8 | 9 | ### 1、高性能 10 | 11 | 目前为止,在小程序和混合app领域,uni-ui是性能的标杆。 12 | 13 | - 自动差量更新数据 14 | 15 | 虽然uni-app支持小程序自定义组件,所有小程序的ui库都可以用。但小程序自定义组件的ui库都需要使用setData手动更新数据,在大数据量时、或高频更新数据时,很容易产生性能问题。 16 | 17 | 而uni-ui属于vue组件,uni-app引擎底层自动diff更新数据。当然其实插件市场里众多vue组件都具备这个特点。 18 | 19 | - 优化逻辑层和视图层通讯折损 20 | 21 | 非H5,不管是小程序还是App,不管是app的webview渲染还是原生渲染,全都是逻辑层和视图层分离的。这里就有一个逻辑层和视图层通讯的折损问题。 22 | 比如在视图层拖动一个可跟手的组件,由于通讯的损耗,用js监听很难做到实时跟手。 23 | 24 | 这时就需要使用css动画以及平台底层提供的wxs、bindingx等技术。不过这些技术都比较复杂,所以uni-ui里做了封装,在需要跟手式操作的ui组件,比如swiperaction列表项左滑菜单,就在底层使用了这些技术,实现了高性能的交互体验 25 | 26 | - 背景停止 27 | 28 | 很多ui组件是会一直动的,比如轮播图、跑马灯。即便这个窗体被新窗体挡住,它在背景层仍然在消耗着硬件资源。在Android的webview版本为chrome66以上,背景操作ui会引发很严重的性能问题,造成前台界面明显卡顿。 29 | 30 | 而uni-ui的组件,会自动判断自己的显示状态,在组件不再可见时,不会再消耗硬件资源。 31 | 32 | ### 2、全端 33 | 34 | uni-ui的组件都是多端自适应的,底层会抹平很多小程序平台的差异或bug。 35 | 36 | 比如导航栏navbar组件,会自动处理不同端的状态栏; 37 | 比如swiperaction组件,在app和微信小程序上会使用交互体验更好的wxs技术,但在不支持wxs的其他小程序端会使用js模拟类似效果。 38 | 39 | uni-ui还支持nvue原生渲染。 40 | 41 | uni-ui还支持pc等宽屏设备,可以通过PC浏览器访问[https://hellouniapp.dcloud.net.cn/pages/extUI/badge/badge](https://hellouniapp.dcloud.net.cn/pages/extUI/badge/badge)体验 42 | 43 | ### 3、风格扩展 44 | 45 | uni-ui的默认风格是中型的,与uni-app基础组件风格一致。但它支持[uni.scss](https://uniapp.dcloud.io/collocation/uni-scss),可以方便的扩展和切换应用的风格。 46 | 47 | UI 是一种需求非常发散的产品,DCloud官方也无意用uni-ui压制第三方 UI 插件的空间,但官方有义务在性能和跨端方面提供一个开源的标杆给大家。 48 | 49 | 我们欢迎更多优秀的 UI 组件出现,也欢迎更多人贡献uni-ui的主题风格,满足更多用户的需求。 50 | 51 | ### 4、与uniCloud协作 52 | 53 | uni-ui里很多组件与uniCloud打通,可大幅提升开发效率 54 | 55 | ### 5、与uni统计自动集成实现免打点 56 | 57 | uni统计是优秀的多端统计平台,见 [tongji.dcloud.net.cn](https://tongji.dcloud.net.cn)。 58 | 59 | 除了一张报表看全端,它的另一个重要特点是免打点,也成为无侵入式埋点。 60 | 61 | 比如使用uni-ui的navbar标题栏、收藏、购物车等组件,均可实现自动打点,统计页面标题等各种行为数据。 62 | 63 | 当然你也可以关闭uni统计,这不是强制的。 64 | 65 | ### 6、uni-ui符合全套DCloud组件规范 66 | 67 | 包括 `easycom`、`uni_module`、`datacom`,全部遵循。 68 | -------------------------------------------------------------------------------- /docs/ecosystem.md: -------------------------------------------------------------------------------- 1 | 2 | `uni-app` 积极拥抱社区,创建了开放、兼容的生态系统。 3 | 4 | - [uni-app插件市场](https://ext.dcloud.net.cn),有数千款插件,支持前端组件、js sdk、页面模板、项目模板、原生插件等多种类型。在生态建设上远远领先于竞品。 5 | 6 | - 兼容 微信小程序 JS SDK 7 | 丰富的小程序生态内容可直接引入`uni-app`,并且在App侧通用。以前的跨平台开发框架普遍缺少三方SDK,由于大量SDK厂商均原厂维护小程序SDK,使得`uni-app`成为跨平台开发框架里生态最丰富的平台[参考](https://ask.dcloud.net.cn/article/35070) 8 | 9 | - 兼容 微信小程序自定义组件 10 | 小程序自定义组件是一种ui组件,uni-app里可以在App、H5、微信小程序、QQ小程序同时兼容微信小程序自定义组件,[参考](https://uniapp.dcloud.io/frame?id=小程序组件支持) 11 | 12 | - 兼容 NPM 包管理系统 13 | uni-app完整支持 NPM ,[详见](https://uniapp.dcloud.io/frame?id=npm%E6%94%AF%E6%8C%81) 14 | 15 | - 兼容 mpvue 项目及组件 16 | mpvue同样基于vue语法,但支持完善度不如`uni-app`,是`uni-app`的子集。mpvue的组件可以在uni-app里直接使用并全端通用。项目代码可以快速移植到uni-app,[参考](https://ask.dcloud.net.cn/article/34945) 17 | 18 | - 兼容 weex 插件生态 19 | uni-app内置了`weex`,`weex`的原生插件或ui库均可使用。注意`weex`的生态不如`uni-app`丰富,一般情况建议使用`uni-app`的插件市场。 20 | 21 | - 兼容 普通 web 库 22 | `uni-app`的H5端支持所有浏览器API。但众所周知,由于小程序的js不运行在浏览器里,所以小程序里不支持 HTML 和 DOM 的 API。 23 | 24 | `uni-app`的App端虽然和小程序是相同的架构,逻辑层也运行在独立jscore而不是浏览器里,但一方面可通过web-view组件加载HTML,引入web相关库; 25 | 另一方面可通过[renderjs](/tutorial/renderjs.md)实现在渲染层执行js,此时完整echart、threejs等web库均可使用。 26 | (但为了全端使用,仍然建议减少对dom库的依赖,在uni-app的插件市场可寻找全端可以的库来替代) 27 | 28 | - App端支持各种调用原生能力的方式 29 | 1. 支持 原生[混合开发](hybrid) 30 | 2. 支持 比小程序能力更多的[plus JSAPI](http://www.html5plus.org/doc/h5p.html) 31 | 3. 支持 [Native.js](https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/88) 直接调用原生api 32 | 4. 支持 [原生插件扩展](https://ask.dcloud.net.cn/article/35428) 33 | 5. 支持 [云打包原生插件](https://ask.dcloud.net.cn/article/35412)。 34 | 35 | - App端支持双渲染引擎 36 | `uni-app`逻辑层在独立jscore,而渲染层可选webview渲染和weex引擎渲染。 37 | 1. 使用webview渲染则整个架构与小程序相同,此时页面后缀为vue文件。 38 | 2. 使用weex引擎(经过改造)渲染,则整个架构与快应用相同,此时页面后缀为nvue文件。使用webview渲染时,可以指定由系统webview渲染还是由x5引擎渲染。 39 | 40 | -------------------------------------------------------------------------------- /docs/harmony/dev.md: -------------------------------------------------------------------------------- 1 | 文件已搬家,[前往新文档](../tutorial/harmony/intro.md) -------------------------------------------------------------------------------- /docs/history.md: -------------------------------------------------------------------------------- 1 | uni,读 `you ni`,是统一的意思。 2 | 3 | 很多人以为小程序是微信先推出的,其实,DCloud才是这个行业的开创者。 4 | 5 | DCloud于2012年开始研发小程序技术,优化webview的功能和性能,并加入W3C和HTML5中国产业联盟,推出了HBuilder开发工具,为后续产业化做准备。 6 | 7 | 2015年,DCloud正式商用了自己的小程序,产品名为“流应用”,它不是`B/S`模式的轻应用,而是能接近原生功能、性能的App,并且即点即用,第一次使用时可以做到边下载边使用。 8 | 9 | 为将该技术发扬光大,DCloud将技术标准捐献给工信部旗下的[HTML5中国产业联盟](https://www.html5plus.org/),并推进各家流量巨头接入该标准,开展小程序业务。 10 | 11 | 360手机助手率先接入,在其3.4版本实现应用的秒开运行。 12 | 13 | 14 | 15 | 随后DCloud推动大众点评、携程、京东、有道词典、唯品会等众多开发者为流应用平台提供应用。 16 | 17 | 在2015年9月,DCloud推进微信团队开展小程序业务,演示了流应用的秒开应用、扫码获取应用、分享链接获取应用等众多场景案例,以及分享了webview体验优化的经验。 18 | 19 | 微信团队经过分析,于2016年初决定上线小程序业务,但其没有接入联盟标准,而是订制了自己的标准。 20 | 21 | DCloud持续在业内普及小程序理念,推进各大流量巨头,包括手机厂商,陆续上线类似小程序/快应用等业务。 22 | 23 | 部分公司接入了联盟标准,但更多公司因利益纷争严重,标准难以统一。 24 | 25 | 技术是纯粹的,不应该因为商业利益而分裂。开发者面对如此多的私有标准不是一件正确的事情。 26 | 27 | 造成混乱的局面非DCloud所愿。于是我们决定开发一个免费开源的框架。 28 | 29 | 既然各巨头无法在标准上达成一致,那么就通过这个框架为开发者抹平各平台差异。 30 | 31 | 这,就是uni-app的由来。 32 | 33 | - 因为多年积累,所以DCloud拥有800多万开发者,并不意外 34 | - 因为DCloud一直都有小程序的iOS、Android引擎,所以uni-app的App端和小程序端保持高度一致,并不意外 35 | - 因为DCloud在引擎上的持续投入,所以uni-app的App端功能、性能比大多数小程序引擎都优秀,并不意外 36 | - 因为DCloud对各家小程序太了解了,所以做好抹平各端差异的跨端框架,并不意外 37 | 38 | 现在,uni-app已经是业内最风靡的应用框架,支撑着12亿活跃手机用户的庞大生态。 39 | 40 | 世界兜兜转转,当你踏出第一步时,随后很多事不会按你的预期发展。但只要你不忘初心,你想要的那个目标,最终会换个方式实现。 41 | 42 | DCloud的初心是什么? 43 | 44 | 1. **为开发者提供免费、高效的开发工具,让天下没有难做的应用** 45 | 2. **改进应用形态,让用户更方便地获取数字服务** 46 | 47 | DCloud也再次承诺不会对uni-app、HBuilderX等工具收费,感谢数百万开发者的一路陪伴,也请一直监督我们不忘初心! 48 | -------------------------------------------------------------------------------- /docs/hybrid.md: -------------------------------------------------------------------------------- 1 | **uni-app和原生App混合开发问题:** 2 | 3 | 首先务必确认uni-app和原生代码,谁是主谁是从的问题。 4 | 5 | - 如果你的应用是uni-app开发的,需要扩展一些原生能力,那么首先去[插件市场](https://ext.dcloud.net.cn/)看看有没有现成的插件,如果没有,就自己开发,开发文档请参考[原生插件开发教程](https://nativesupport.dcloud.net.cn/NativePlugin/README)。 6 | - 如果你的App是原生开发的,部分功能栏目想通过uni-app实现,有2种方式 7 | * 在原生App里集成uni小程序sdk,[参考](https://nativesupport.dcloud.net.cn/README) 8 | * 如果不想集成原生sdk,那就把uni-app代码发布成H5方式,在原生App里通过webview打开。 9 | 10 | 如果应用是uni-app开发为主,只是想离线打包,那么不应该使用uni小程序sdk,而是使用App离线打包SDK,[参考](https://nativesupport.dcloud.net.cn/AppDocs/README)。 11 | 另注意离线打包无法享受插件市场的付费原生插件,如有相关需求需自己进行原生插件开发。 12 | 13 | **uni-app和原生小程序混合开发问题:** 14 | 15 | - 方式1:把原生小程序转换为uni-app源码。有各种转换工具,[详见](translate.md) 16 | - 方式2:新建一个uni-app项目,把原生小程序的代码变成小程序组件,进而整合到uni-app项目下。uni-app支持使用小程序wxml组件,[参考](/tutorial/miniprogram-subject.md#小程序自定义组件支持) 17 | - 方式3:原生开发的小程序仍保留,部分新功能使用uni-app开发。 18 | * 使用发行为混合分包的功能 19 | + 在 HBuilderX 3.1.0+ 中点击发行小程序的菜单,勾选发行混合分包,填写分包目录名称,打包后,将对应目录文件拷贝至已有小程序中,需要自己补充原小程序app.json中的页面或分包配置 20 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/mp-weixin-hybrid.jpg) 21 | + 在 cli 中,执行命令:`npm run build:mp-weixin -- --subpackage=sub1` 或 `yarn build:mp-weixin --subpackage=sub1` 22 | 23 | 注意: 24 | 25 | * 发行混合分包后,App.vue中的onLaunch会在首次进入分包时触发(HBuilderX 3.1.1+)。 26 | * 开发时需要将资源(图片,css,js等)、页面的绝对路径调整为相对路径,否则打包到原生小程序中时,可能出现路径查找错误。 27 | * 需要自己把页面或分包配置添加到已有小程序的app.json中。 28 | * 目前支持微信小程序、百度小程序、支付宝小程序、抖音小程序、飞书小程序、QQ小程序。 29 | 30 | * 三方开发者插件,[参考](https://ext.dcloud.net.cn/plugin?id=1560) 31 | 32 | 如果想充分发挥uni-app的跨端特性,编译到各种其他小程序平台,建议使用方案1。 33 | 34 | 如果不需要其他小程序平台,仅需要h5和app,那方案1和方案2均可。 35 | 36 | 如果只需要开发微信小程序,但想使用vue的方式开发、或者想利用uni-app的插件生态、或者部分页面想跨多端复用,那么使用方案3。 37 | -------------------------------------------------------------------------------- /docs/license.md: -------------------------------------------------------------------------------- 1 | # uni-app使用许可协议 2 | 本协议是数字天堂(北京)网络技术有限公司(以下称“DCloud”)与您之间就uni-app产品使用达成的协议。 3 | 4 | 本协议签订地点为中华人民共和国北京市海淀区。 5 | 6 | 您使用本软件即视为您已阅读并同意受本协议的约束。 7 | 8 | ## 概念定义 9 | uni-app(含uni-app x),是DCloud公司提供的跨端开发框架(以下简称本框架)。 10 | 11 | ## 知识产权及使用授权 12 | uni-app开源的源码遵循 Apache-2.0 开源协议。 13 | 14 | 您可以自由下载、使用本框架来开发您的应用,而不需要向DCloud付费。 15 | 16 | 您使用本框架开发的代码及输出物,包括但不限于网站、App、小程序,其知识产权归属您所有。 17 | 18 | DCloud所拥有的知识产权,包括但不限于商标、专利、著作权、商业秘密、专有数据,仍归属DCloud公司,并不发生转移或共享。 19 | 20 | 如果您的应用中内嵌了uni-app的Runtime或sdk,该Runtime或sdk的知识产权仍然属于DCloud。 21 | 类似于您开发的应用内嵌了jvm或.net framework,虽然您的java代码的著作权属于您,但jvm等三方runtime的知识产权仍归原作者所有。 22 | 23 | ## 您的义务 24 | 您不得破解、反编译、逆向工程本框架,不得破解或劫持本框架网络请求,不得对DCloud服务进行网络攻击,不得利用DCloud系统漏洞谋利或侵害DCloud利益,不得替换、删改本框架非开源部分的内容。 25 | 26 | 未经书面许可您不可利用DCloud产品的全部或部分文件、模块、组件来制作与DCloud争夺开发者用户的产品(通过DCloud插件市场服务开发者不属于此范围)。 27 | 28 | 如果您使用uni-app开发App,可以且仅可以使用DCloud官方提供的云打包或离线sdk打包,不能使用第三方的App打包平台来打包uni-app开发的应用。 29 | 30 | 如果您违反您的义务,DCloud将有权停止您使用本框架,造成的损失由您自行承担。 31 | 32 | 如果您给DCloud造成重大损失,或者在接收到DCloud的停止违约通知后拒不改正,DCloud将有权停止对您的DCloud所有产品和服务的使用授权,冻结您在DCloud所有产品服务中的预付款项和应收款项,因此造成的损失由您自行承担。 33 | 34 | 如果您的行为产生法律问题,DCloud有权追责您的法律责任。 35 | 36 | ## 隐私条款 37 | DCloud尊重用户隐私及代码安全,不会采集用户代码,并在此公开所有uni-app会上报DCloud服务器的数据清单。 38 | 39 | 1. 异常崩溃、错误日志 40 | 本框架发生编译或运行时异常,会将错误信息发送给DCloud服务器,该错误信息会同时明示在uni-app编译/运行日志中。 41 | 42 | 2. 升级检测 43 | 为支持本框架的升级检测而提交的设备标志信息、版本信息。本框架需要统计每个版本的开发者占比,以及在需要时,给出明确的升级建议。 44 | 45 | 3. 校验开发者和应用的所属关系 46 | 为避免盗版、诈骗等违法应用,本框架有权利但无义务校验开发者的身份信息和应用信息的一致性。 47 | 48 | 4. 商业插件盗版检测 49 | 在DCloud的插件市场,有付费商业插件。由DCloud为插件作者提供版权保护,所以DCloud会检测您是否使用了盗版商业插件、插件的试用期和维保期是否正常。这种检测仅提取有限的特征值字符串,并不上传整体代码到DCloud服务器。 50 | 51 | 您使用本框架的事实默认情况下不视为保密信息,DCloud可能会在案例文档中列出您的应用。如果您不便公开相关信息,请联系service@dcloud.io声明。 52 | 53 | ## 安全 54 | 您理解并同意,本框架同其他软件一样,无法承诺绝对的安全性。 55 | 56 | 当DCloud发现本框架的任何安全漏洞时,将及时发布紧急更新补丁和升级推送通知。 57 | 58 | 随着时间的推移,本框架中部分功能可以会标记已废弃。已废弃的部分,DCloud不会进行更新、升级。 59 | 60 | ## 免责声明 61 | DCloud不因开发者使用本框架而承担任何赔偿责任。 62 | 63 | 本框架支持插件,本协议影响范围仅包含本框架,不包含插件。 64 | 65 | 如果您同时使用了DCloud的其他产品,请另见其许可协议。 66 | 67 | ## 协议修订 68 | 根据发展,DCloud可能会对本协议进行修改。修改时,DCloud会在产品或者网页中显著的位置发布相关信息以便及时通知到用户。如果您选择继续使用本框架,即表示您同意接受这些修改。 69 | 70 | ## 联系我们 71 | 若您对本框架有任何疑问、意见和建议,欢迎联系我们: 72 | [网站](https://DCloud.io) -------------------------------------------------------------------------------- /docs/m3w.md: -------------------------------------------------------------------------------- 1 | App/小程序/网站做好后,如何告知你的用户? 2 | 3 | 你需要为自己的业务制作一个名片,名片上统一展现:App 的下载地址、小程序二维码、H5访问链接等,也就是“统一发布页”。 4 | 5 | 而你自己从头开发这么一个发行平台,需要考虑的事情太多了: 6 | 7 | - 响应式布局,兼容PC/Mobile各种尺寸 8 | - 微信/微博浏览器判断不同逻辑,右上角提示通过浏览器打开 9 | - PC上制作二维码,方便用户直接扫码下载 10 | - 如果小程序有多个版本,微信、支付宝、百度、QQ、快应用,那搞起来。。。 11 | 12 | 别急,有了`uni-portal`统一发布页,一切迎刃而解,10分钟内搞定所有。 13 | 14 | 眼见为实,`uni-app`官方示例的发布页就是基于`uni-portal`制作的,快速体验[hello uni-app发布页](https://hellouniapp.dcloud.net.cn/portal)。 15 | 16 | `uni-portal`目前已内置在`uni-admin`项目中。 17 | 18 | 管理员在`uni-admin`的“应用管理”模块,创建应用并完善相关应用信息(如apk下载地址、小程序二维码)后,点击“发布页管理”,即可生成该应用的发布页。 19 | 20 | `uni-portal` 统一发布页面是响应式的,兼容PC宽屏和手机窄屏。 21 | 22 | - **PC宽屏** 23 | 24 | 25 | 26 | - **手机窄屏** 27 | 28 | 手机浏览器上,默认展示效果如下: 29 | 30 | 31 | 32 | `uni-portal`统一发布页同时会识别当前浏览器环境,在微信等特殊浏览器上,自动提示“点击右上角菜单,在浏览器中打开”,效果如下: 33 | 34 | -------------------------------------------------------------------------------- /docs/plugin/README.md: -------------------------------------------------------------------------------- 1 | `uni-app`积极拥抱社区,创建了开放、兼容的插件系统。 2 | 3 | - uni-app插件市场,[https://ext.dcloud.net.cn](https://ext.dcloud.net.cn),是uni-app官方插件生态集中地。有数千款插件,支持前端组件、js sdk、页面模板、项目模板、原生插件等多种类型。在生态建设上远远领先于竞品。请注意尽量在官方市场寻找插件,npm等三方市场没有uni-app兼容性描述,很容易下载到无法跨平台的、仅适配web的插件。 4 | 5 | - 兼容 微信小程序 JS SDK 6 | 7 | 小程序生态内容可直接引入```uni-app```,并且在App侧通用。以前的跨平台开发框架普遍缺少三方SDK,由于大量SDK厂商均原厂维护小程序SDK,使得```uni-app```成为跨平台开发框架里生态最丰富的平台[参考](https://ask.dcloud.net.cn/article/35070) 8 | 9 | - 兼容 微信小程序自定义组件 10 | 11 | 小程序自定义组件是一种ui组件,uni-app里可以在App、H5、微信小程序、QQ小程序同时兼容微信小程序自定义组件,[参考](https://uniapp.dcloud.io/frame?id=小程序组件支持) 12 | 13 | - 兼容 NPM 包管理系统 14 | 15 | uni-app支持npm包,但注意npm下载的插件很可能不是全端的,大多npm插件仅适配了web。需要全端插件还是要去uni-app插件市场[https://ext.dcloud.net.cn](https://ext.dcloud.net.cn)去找。 16 | 17 | - 兼容 weex 插件生态 18 | 19 | uni-app内置了`weex`,`weex`的原生插件或ui库均可使用。注意`weex`的生态不如`uni-app`丰富,一般情况建议使用`uni-app`的插件市场。 20 | 21 | - 兼容 普通 web 库 22 | 23 | `uni-app`的H5端支持所有浏览器API。但众所周知,由于小程序的js不运行在浏览器里,所以小程序里不支持 HTML 和 DOM 的 API。 24 | 25 | `uni-app`的App端虽然和小程序是相同的架构,逻辑层也运行在独立`jscore`而不是浏览器里,但App端和小程序还是有区别的: 26 | * 一方面可通过web-view组件加载本地HTML,引入web相关库; 27 | * 另一方面可通过[renderjs](/tutorial/renderjs.md)实现在渲染层执行js,此时完整`echart`、`threejs`等web库均可使用。 28 | (但为了全端使用,仍然建议减少对dom库的依赖,在`uni-app`的插件市场可寻找全端兼容的库来替代) 29 | 30 | - App端支持各种调用原生能力的方式 31 | 1. 支持 原生[混合开发](/hybrid.md) 32 | 2. 支持 比小程序能力更多的[plus JSAPI](http://www.html5plus.org/doc/h5p.html) 33 | 3. 支持 [Native.js](https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/88) 直接调用原生api 34 | 4. 支持 [uts插件](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html) 35 | 5. 支持 [原生语言插件](native-plugin.md) 36 | 37 | 38 | - App端支持双渲染引擎 39 | `uni-app`逻辑层在独立jscore,而渲染层可选webview渲染和weex引擎渲染。 40 | 1. 使用webview渲染则整个架构与小程序相同,此时页面后缀为vue文件。 41 | 2. 使用weex引擎(经过改造)原生渲染,则整个架构与快应用相同,此时页面后缀为nvue文件。使用webview渲染时,还可以指定由系统webview渲染还是由x5引擎渲染。 42 | 43 | -------------------------------------------------------------------------------- /docs/plugin/_sidebar.md: -------------------------------------------------------------------------------- 1 | * [插件全景描述](README.md) 2 | * [插件市场介绍](plugin-ext-introduction.md) 3 | * [uni_modules](uni_modules.md) 4 | * uts插件 5 | * [uts插件开发入门](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html) 6 | * [uts页面组件开发入门](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-component.html) 7 | * [uts中使用uni api](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-uni-api.html) 8 | * [Android平台uts开发指南](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-for-android.html) 9 | * [iOS平台uts开发指南](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-for-ios.html) 10 | * [使用CocoaPods依赖](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-ios-cocoapods.html) 11 | * [原生语言插件](native-plugin.md) 12 | * 插件作者专区 13 | * [发布插件](publish.md) 14 | * [销售变现](sell.md) 15 | * [支持多语言](language.md) 16 | * [oath开放平台](oath.md) 17 | -------------------------------------------------------------------------------- /docs/plugin/androidInnerLib.md: -------------------------------------------------------------------------------- 1 | ## android内置依赖 2 | 3 | |依赖名| 4 | |------| 5 | |com.alibaba:fastjson:1.1.46.android| 6 | |androidx.core:core-ktx:1.6.0| 7 | |org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10| 8 | |org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0| 9 | |org.jetbrains.kotlin:kotlin-reflect:1.6.0| 10 | |org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8| 11 | |org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8| 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/plugin/language.md: -------------------------------------------------------------------------------- 1 | 插件支持多语言是基于[uni-app国际化](https://uniapp.dcloud.net.cn/tutorial/i18n.html)及[HBuilderX插件国际化](https://hx.dcloud.net.cn/ExtensionTutorial/localized)规范延伸而来的,所以不同类型的插件多语言规范略有不同。 2 | 3 | ## uni-app及uniCloud分类 4 | 参考[国际化专题](https://uniapp.dcloud.net.cn/tutorial/i18n.html)相关教程 5 | 6 | ## HBuilderX分类 7 | 参考[HBuilderX插件国际化](https://hx.dcloud.net.cn/ExtensionTutorial/localized)规范教程,根据插件根目录下package.nls.[语言代码].json进行识别,如插件除默认语言之外支持英语及日语,插件包则需要包含如下文件: 8 | ``` 9 | 插件根目录 10 | ├── package.json 11 | ├── package.nls.en.json 12 | ├── package.nls.json 13 | └── package.nls.ja.json 14 | ``` 15 | 其中语言代码必须符合规范,[点击查看更多语言代码](https://github.com/dcloudio/hbuilderx-language-packs/blob/main/docs/localizations.html) -------------------------------------------------------------------------------- /docs/plugin/oath.md: -------------------------------------------------------------------------------- 1 | DCloud用户开放平台,[https://open.dcloud.net.cn](https://open.dcloud.net.cn/),是DCloud为三方开发者服务商提供的开放平台。 2 | 3 | DCloud将数百万开发者的流量通过开放平台提供给三方开发者服务商。 4 | 5 | 让每个为开发者服务的公司,快速分享DCloud的开发者流量。 6 | 7 | 使用文档参考:[https://ask.dcloud.net.cn/article/38005](https://ask.dcloud.net.cn/article/38005) -------------------------------------------------------------------------------- /docs/plugin/plugin-author.md: -------------------------------------------------------------------------------- 1 | ### 插件作者专区 2 | 3 | [oauth开放平台](https://open.dcloud.net.cn/pages/login/login) -------------------------------------------------------------------------------- /docs/plugin/plugin-xss.md: -------------------------------------------------------------------------------- 1 | # xss 2 | 3 | ## image onerror 4 | 5 | 6 | ## image onload 7 | -------------------------------------------------------------------------------- /docs/translate.md: -------------------------------------------------------------------------------- 1 | 2 | `uni-app`可以多端输出,也欢迎各平台之前的老项目向uni-app转换迁移。 3 | 4 | 5 | **vue h5项目转换uni-app指南:**[https://ask.dcloud.net.cn/article/36174](https://ask.dcloud.net.cn/article/36174) 6 | 7 | **微信小程序转换uni-app指南及转换器:**[https://ask.dcloud.net.cn/article/35786](https://ask.dcloud.net.cn/article/35786) 8 | 9 | **wepy转uni-app转换器:**[https://github.com/zhangdaren/wepy-to-uniapp](https://github.com/zhangdaren/wepy-to-uniapp) 10 | 11 | **另一种有效的wepy转uni-app方法:** [https://ask.dcloud.net.cn/article/39125](https://ask.dcloud.net.cn/article/39125) 12 | 13 | **mpvue 项目(组件)迁移指南、示例及资源汇总:** [https://ask.dcloud.net.cn/article/34945](https://ask.dcloud.net.cn/article/34945) 14 | -------------------------------------------------------------------------------- /docs/tutorial/app-android-antiresigne.md: -------------------------------------------------------------------------------- 1 | 在Android系统中,签名是应用发布和安装的重要环节。所有安装在系统中的应用都必须拥有数字证书,即应用的签名。Android SDK提供的apksigner工具可以对应用安装包进行签名。虽然这为开发者带来了便利,但也存在安全隐患。例如,其他开发者可能获取你的应用安装包,使用反编译工具进行修改,如修改uni-app项目的appid、应用包名、甚至植入恶意病毒或广告,然后重新打包签名,实施二次打包重签名攻击。这可能导致应用被篡改和数据泄露等严重后果。 2 | 3 | HBuilderX4.25版本Android平台云端打包提供“防重签”功能,避免应用安装包被二次打包重签名攻击。 4 | 5 | ## 配置方法 6 | 7 | 在HBuilderX中点击菜单 “发行” -> “原生App-云打包” 打开 “App打包” 界面,在 “Android设置” 栏中可配置 “防重签”,如下图所示: 8 | 9 | ![](https://web-ext-storage.dcloud.net.cn/doc/tutorial/app/android-antiresigne.png) 10 | 11 | Android应用的“防重签”功能会在启动时进行验证,如果验证失败则弹出提示框(如下图),关闭提示框则直接退出应用。 12 | 13 | ![](https://web-ext-storage.dcloud.net.cn/doc/tutorial/app/android-antiresigne-tips.png) 14 | 15 | 支持配置以下验证项: 16 | 17 | - appid 18 | 应用安装包绑定uni-app项目的 appid,默认情况会开启此项验证。 19 | 20 | - 包名 21 | 应用安装包绑定云端打包配置的 包名,避免应用被其它开发者修改包名后二次打包发布。 22 | 23 | - 证书 24 | 应用安装包绑定云端打包时配置的 证书 指纹信息,这种配置安全性最高。二次打包重签名需要用到签名证书,只要证书信息发生变化则无法通过验证。 25 | 这也要求开发者务必保护好自己的签名证书,避免证书被其它人获取后用于二次打包重签名。 26 | 27 | 28 | ## 注意事项 29 | 30 | - App加固 可对应用安装包进行安全新增强,同时也支持防二次打包功能,如需更高级别的安全性,推荐使用[uni安全加固](https://uniapp.dcloud.net.cn/tutorial/app-security.html) 31 | 32 | -------------------------------------------------------------------------------- /docs/tutorial/app-env.md: -------------------------------------------------------------------------------- 1 | # app平台 uni-app 项目云端打包环境 2 | 3 | > uni-app x 项目云端打包环境参考[这里](https://doc.dcloud.net.cn/uni-app-x/tutorial/app-env.html) 4 | 5 | ## Android平台云端打包环境 6 | 7 | > 使用 gradle 脚本编译 8 | 9 | ### HBulder4.41及以上版本升级云端打包环境 10 | - Android 编译 SDK(compileSdk): 35 11 | - Android 构建工具(buildToolsVersion):35.0.0 12 | - Gradle:8.11.1 13 | - Android Gradle 插件(com.android.tools.build:gradle):8.7.3 14 | - JDK:17 ([Amazon corretto 17.0.12.7.1](https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/what-is-corretto-17.html)) 15 | 16 | ### HBuilder4.25及以上版本云端打包环境(不推荐使用) 17 | - Android 编译 SDK(compileSdk): 34 18 | - Android 构建工具(buildToolsVersion):34.0.0 19 | - Gradle:8.5 20 | - Android Gradle 插件(com.android.tools.build:gradle):8.2.2 21 | - JDK:17 ([Amazon corretto 17.0.12.7.1](https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/what-is-corretto-17.html)) 22 | 23 | ### HBuilder4.24及以下版本云端打包环境(不推荐使用) 24 | - Android 编译 SDK(compileSdk): 33 25 | - Android 构建工具(buildToolsVersion) :30.0.3 26 | - Gradle:7.6.3 27 | - Android Gradle 插件(com.android.tools.build:gradle):4.2.0 28 | - JDK:11 ([Amazon corretto 11.0.24.8.1](https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/what-is-corretto-11.html)) 29 | 30 | **注意** 31 | 云端打包环境升级后可能导致某些 uni原生语言插件 无法兼容,如碰到无法兼容的问题请联系插件作者尽快升级支持,同时将在 [ask社区](https://ask.dcloud.net.cn/explore/) 反馈,我们也会跟进协助插件作者适配支持。 32 | 33 | 34 | ## iOS平台云端打包环境 35 | 36 | > 使用 XCode 的 xcodebuild 命令编译 37 | 38 | ### HBuilderX4.41及以上版本云端打包环境 39 | - XCode: 16.1 40 | - iOS SDK: 18.1 41 | - pod仓库:https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git 42 | 43 | ### HBuilderX4.36及以下版本云端打包环境(不推荐使用) 44 | - XCode:15.4 45 | - iOS SDK:17.5 46 | - pod仓库:https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git 47 | 48 | -------------------------------------------------------------------------------- /docs/tutorial/app-facialRecognitionVerify.md: -------------------------------------------------------------------------------- 1 | ## 实人认证 2 | ### 开通服务 3 | App使用实人认证功能需先开通uni实人认证服务,详情参考:[开通uni实人认证服务](https://doc.dcloud.net.cn/uniCloud/frv/service.html) 4 | 5 | ### 配置 6 | 在项目manifest.json的"App模块配置"中勾选"FacialRecognitionVerify(实人认证)" 7 | ![](https://native-res.dcloud.net.cn/images/uniapp/facialRecognitionVerify/68C3B72D-E281-4ED3-9B34-91AE9BB1B9F6.png) 8 | 9 | ### 使用 10 | App端API规范参考:[详情](https://doc.dcloud.net.cn/uniCloud/frv/dev.html#start-frv) 11 | App平台完整业务开发流程,参考[开发指南](https://doc.dcloud.net.cn/uniCloud/frv/dev.html) 12 | -------------------------------------------------------------------------------- /docs/tutorial/app-ios-dsym.md: -------------------------------------------------------------------------------- 1 | #### 什么是符号表 2 | 符号表是内存地址与源码文件名、函数名称、行号的映射表。符号表通常包括以下信息: 3 | ``` 4 | <内存起始地址><内存结束地址><源码函数名称>[<源码文件名称:源码行号>] 5 | ``` 6 | 应用正式发布后二进制代码中不再包含源码信息,应用发生异常(Crash)时可以捕获异常发生时的堆栈信息,但这些信息使用内存地址表示,这时候可以通过符号表进行解析还原成源码堆栈信息,从而方便开发者定位并解决异常问题。 7 | 8 | 9 | #### 什么是dsym文件 10 | iOS平台中,dSYM文件是指具有调试信息的目标文件,存储着源码文件名、函数名、行号等信息,与可执行文件中的函数内存地址一一对应。 11 | XCode中发布生成xcarchive文件默认包含dysm文件,通常为:xxxx.app.dSYM,其中xxxx为应用程序的包名,如下所示: 12 | 13 | ![](https://img-cdn-aliyun.dcloud.net.cn/client/doc/ios/dsym-xcarchive.png) 14 | 15 | dSYM文件内容为: 16 | 17 | ![](https://img-cdn-aliyun.dcloud.net.cn/client/doc/ios/dsym-content.png) 18 | 19 | 20 | #### dsym文件的用途 21 | 当应用发布上线后,无法在XCode中直观看到应用崩溃的错误,这时需要分析 crash report 文件,iOS设备中会有日志文件保存每个应用崩溃时的函数内存地址,通过 XCode 的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件,这时就可以通过函数内存地址在 dsym 文件中查找到对应的函数名称和源码文件名。 22 | 23 | 多数统计平台都会捕获应用崩溃错误时的函数内存地址并提交到统计服务器,为了更好的分析崩溃日志,也需要 dysm 文件来查找到崩溃的函数名称和源码文件名称。 24 | 因此统计平台也需要开发者上传 dsym 文件。 25 | 26 | 27 | #### HBuilderX中云端打包配置生成符号表文件 28 | 29 | > HBuilderX3.5.0+版本生成iOS符号表 dsym 文件配置项调整到原生App-云打包窗口 30 | 31 | 在HBuilderX中菜单项 “发行” -> “原生App-云打包” 界面勾选“生成iOS符号表(dsym)文件”: 32 | 33 | ![](https://native-res.dcloud.net.cn/images/hx/dist/ios-dsym.png) 34 | 35 | > HBuilderX 从 3.2.23 至 3.4.18 版本 在项目的 manifest.json 可视化界面中配置生成iOS符号表 dsym 文件 36 | 37 | 在HBuilderX中打开项目的manifest.json文件,在“App常用其它设置”界面中的勾选“生成iOS符号表(dsym)文件”: 38 | 39 | ![](https://img-cdn-aliyun.dcloud.net.cn/client/doc/ios/dsym-hx.png) 40 | 41 | 保存后提交云端。 42 | 43 | 云端打包成功后会在HBuilderX控制台输出 dsym 文件下载地址: 44 | 45 | ![](https://img-cdn-aliyun.dcloud.net.cn/client/doc/ios/dsym-download.png) 46 | 47 | #### 注意事项 48 | - 下载文件格式为zip,解压后可获得 dsym 文件 49 | - 生成符号表 dsym 文件需要消耗云端打包CDN资源,使用此功能需单独计费 50 | - 生成的 dsym 文件下载地址有效期为两天,过期后自动删除,无法恢复,生成后请尽快下载到本地备份 51 | 52 | -------------------------------------------------------------------------------- /docs/tutorial/app-ios-uibackgroundmodes.md: -------------------------------------------------------------------------------- 1 | iOS平台为了减少系统资源消耗,应用默认不支持后台运行,切换到后台会停止运行。比如当应用切换到后台时音乐将暂停播放,下次切换到前台继续播放。如果应用切换到后台继续运行如播放音乐,定位等功能,需要配置支持后台运行的能力。 2 | 3 | 可支持以下能力: 4 | - 后台播放音乐,设置值为"audio" 5 | - 后台获取位置信息(定位),设置值为"location" 6 | 7 | 8 | ### 设置后台运行能力 9 | **可视化界面配置** 10 | 打开项目的manifest.json文件,在 “App常用其它设置” -> “iOS设置” -> “后台运行能力” 项中进行设置: 11 | ![](https://native-res.dcloud.net.cn/images/uniapp/others/backgroundmodes-manifest.png) 12 | 13 | >注意: 14 | >"audio"表示后台播放音乐能力,"location"表示后台定位能力,更多后台能力配置参考苹果官网[UIBackgroundModes文档](https://developer.apple.com/documentation/bundleresources/information_property_list/uibackgroundmodes/); 15 | >多个后台能力使用 "," 分割; 16 | >如果可视化界面无法编辑,请切换到“源码视图”删除`UIBackgroundModes`节点数据重新操作。 17 | 18 | **源码视图配置** 19 | 打开项目的manifest.json文件,切换到“源码视图”,根据项目类型进行配置 20 | 21 | - uni-app项目 22 | 在 "app-plus"->"distribute"->"ios" 节点的 UIBackgroundModes 属性配置后台运行能力,示例如下: 23 | ``` js 24 | "app-plus": { 25 | "distribute": { 26 | "ios": { 27 | "UIBackgroundModes": "audio,location" 28 | //... 29 | }, 30 | //... 31 | }, 32 | //... 33 | }, 34 | //... 35 | ``` 36 | 37 | - 5+App/Wap2App项目 38 | 在 "plus"->"distribute"->"ios" 节点的 UIBackgroundModes 属性配置后台运行能力,示例如下: 39 | ``` js 40 | "plus": { 41 | "distribute": { 42 | "ios": { 43 | "UIBackgroundModes": "audio,location" 44 | //... 45 | }, 46 | //... 47 | }, 48 | //... 49 | }, 50 | //... 51 | ``` 52 | 53 | > 注:为了向下兼容,HBuilderX源码视图配置时`UIBackgroundModes`属性值支持字符串数组,上面示例中的值也可以这么配置["audio","location"] 54 | 55 | **保存后提交App云端打包生效** 56 | 57 | 58 | 59 | 60 | #### 注意事项 61 | - 配置后需提交云端打包后才能生效,真机运行时请使用[自定义调试基座](https://ask.dcloud.net.cn/article/35115) 62 | 真机运行不支持此功能,需要提交到打App云端打包才生效 63 | - 应用切换到后台运行时,需要避免调用同步5+ API(调用直接返回数据的API),在后台运行时此类API将无法同步返回数据 64 | 65 | -------------------------------------------------------------------------------- /docs/tutorial/app-oauth-facebook-open.md: -------------------------------------------------------------------------------- 1 | #### 准备条件 2 | - 可访问Facebook服务器 3 | 注意:中国境内可能无法访问Fackbook服务器 4 | - 注册Facebook账号,登录[Facebook](http://www.facebook.com) 5 | 6 | 7 | #### 创建应用 8 | * 打开[Facebook开发者中心](http://developers.facebook.com/) 9 | * 点击右上角"我的应用" 10 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-myApplication.png) 11 | 12 | * 进入应用管理界面,点击"创建应用" 13 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-createApplication.png) 14 | 15 | 16 | * 根据需要选择应用产品的类型(应用类型详见"详细了解应用类型"),然后点击继续 17 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-chooseApplicationType.png) 18 | 19 | 20 | * 填写应用信息 21 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-fillInAppInfo.png) 22 | 23 | 24 | * 创建完成后即可获取应用的应用编号(即appID) 25 | 26 | * 为应用添加登录功能 27 | 28 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-addProduct.png) 29 | 30 | 31 | 32 | #### 设置登录-iOS 33 | * 我的应用--设置--基本,选择添加平台,选择iOS 34 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-ios-addPlatform.png) 35 | 36 | 37 | * 填写信息保存即可 38 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-ios-saveInfo.png) 39 | 40 | 41 | 42 | #### 设置登录-Android 43 | 44 | * 我的应用--设置--基本,选择添加平台 45 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-android-addPlatform.png) 46 | 47 | 48 | * 选择android平台,应用商店选择Google Play 49 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-android-appstore.png) 50 | 51 | 52 | * 填写必要的包名和散列信息,类名是固定的。如图 53 | 散列的获取方法,参考文档: 54 | https://developers.facebook.com/docs/facebook-login/android 第六小节 55 | 如果获取到的散列位数不对,需要找台linux/mac 计算机。 56 | 使用下面的命令获取 57 | keytool -exportcert -alias hbuilder -keystore ./HBuilder.keystore | openssl dgst -sha1 -binary | openssl base64 58 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-android-saveInfo.png) 59 | 60 | 61 | 62 | #### 应用权限 63 | 使用Facebook登录需开启"public_profile"以及"email"的访问权限 64 | 点击"应用审核"-"权限和功能",开启"public_profile"以及"email"的高级访问权限 65 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-fb-permission.png) 66 | 67 | -------------------------------------------------------------------------------- /docs/tutorial/app-oauth-google-open.md: -------------------------------------------------------------------------------- 1 | #### 准备条件 2 | - 可访问Google服务器 3 | 注意:中国境内无法访问Google服务器 4 | - 注册Google账号 5 | 6 | 7 | #### Android开通步骤 8 | 9 | * 打开Google 登录引导页 10 | 网址: https://developers.google.com/identity/sign-in/android/sign-in?hl=zh-cn 11 | 12 | * 选择项目配置 13 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-android-apiConfig.png) 14 | 点击后出现项目与应用选择界面,如果你有已创建过的Firebase项目,可以直接选择。如果没有,可以选择新建一个Google Api 项目。 15 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-android-configureProject.png) 16 | 17 | * 选择项目后,在该项目下新建一个应用 18 | 选择应用平台 android 19 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-android-appType.png) 20 | 需要填写应用的包名和sha1指纹,指纹的获取方法在界面上有提示。按照提示操作即可。 21 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-android-createApp.png) 22 | 点击创建,即可完成开通步骤。 23 | 24 | #### iOS开通步骤 25 | 26 | * 打开[Google登录iOS引导页](http://developers.google.com/identity/sign-in/ios/start-integrating?hl=zh-cn) 27 | 28 | * 点击创建OAuth客户端ID,填写项目名称 29 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-ios-config.png) 30 | 31 | * 选择iOS平台、填写BundleID后,点击CREATE,即可获取Client ID 32 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/oauth-google-ios-create.png) 33 | 34 | -------------------------------------------------------------------------------- /docs/tutorial/app-oauth.md: -------------------------------------------------------------------------------- 1 | App端OAuth(登录鉴权)模块封装了市场上主流的三方登录SDK,提供JS API统一调用登录鉴权功能。 2 | 3 | |项目类型|API| 4 | |:-|:-| 5 | |uni-app|[uni.preLogin(OBJECT)](https://uniapp.dcloud.io/api/plugins/login?id=prelogin)、[uni.login(OBJECT)](/api/plugins/login.md#login)、[uni.getUserInfo(OBJECT)](https://uniapp.dcloud.io/api/plugins/login?id=getuserinfo)、[uni.closeAuthView()](https://uniapp.dcloud.io/api/plugins/login?id=closeauthview)、[uni.getCheckBoxState(OBJECT)](https://uniapp.dcloud.io/api/plugins/login?id=getcheckboxstate)、[uni.getUniverifyManager(OBJECT)](https://uniapp.dcloud.io/api/plugins/login?id=getuniverifymanager)| 6 | |5+App/Wap2App|[plus.oauth.*](https://www.html5plus.org/doc/zh_cn/oauth.html) 7 | 8 | 如果服务端使用[uniCloud](https://uniapp.dcloud.io/uniCloud/README),官方提供了[uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id)云端统一登录服务,把微信登录、短信验证码登录及角色权限管理等服务端登录开发,进行了统一的封装。前端统一的`uni.login`和云端统一的`uni-id`搭配,可以极大提升登录业务的开发效率,强烈推荐给开发者使用。 9 | 10 | 使用登录鉴权功能需在项目manifest.json的“App模块配置”中勾选“OAuth(登录鉴权)”,并根据项目实际情况勾选使用的三方登录平台: 11 | ![](https://native-res.dcloud.net.cn/images/uniapp/oauth/modules.png) 12 | 13 | > 提示:三方登录模块参数配置需提交云端打包后才能生效,真机运行调试时请使用[自定义基座](http://ask.dcloud.net.cn/article/35115) 14 | 15 | 使用登录鉴权功能基本流程: 16 | - 向三方登录平台申请开通,有些平台(如微信登录)申请成功后会获取appid 17 | - 在HBuilderX中配置申请的参数(如appid等),提交云端打包生成[自定义基座](http://ask.dcloud.net.cn/article/35115) 18 | - 在App项目中调用API进行登录,成功后获取到授权标识提交到业务服务器完成登录操作 19 | 20 | 支持的三方登录平台: 21 | - [一键登录(univerify)](/univerify.md) 22 | - [苹果登录(Sign in with Apple)](app-oauth-apple.md) 23 | - [微信登录](app-oauth-weixin.md) 24 | - [QQ登录](app-oauth-qq.md) 25 | - [新浪微博登录](app-oauth-weixin.md) 26 | - [Google登录](app-oauth-google.md) 27 | - [Facebook登录](app-oauth-facebook.md) 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /docs/tutorial/app-pack.md: -------------------------------------------------------------------------------- 1 | #### App 打包 -------------------------------------------------------------------------------- /docs/tutorial/app-payment-paypal-open.md: -------------------------------------------------------------------------------- 1 | ## 申请开通Paypal 2 | * [登录/注册](https://www.paypal.com/c2/signin) 3 | * 打开[paypal开发者中心](https://developer.paypal.com/developer/applications) 4 | 选择 **Apps & Credentials** 点击 **Create App**创建应用,创建后点击编辑按钮,如图: 5 | ![](https://native-res.dcloud.net.cn/images/uniapp/payment/paypal_app_center.png) 6 | * 进入应用详情,勾选**Log in with PayPal**点击 **Advanced Settings** 添加return URL等信息并保存。如图: 7 | ![](https://native-res.dcloud.net.cn/images/uniapp/payment/paypal_add_feature.png) 8 | 9 | ![](https://native-res.dcloud.net.cn/images/uniapp/payment/paypal_edit_logininfo.png) 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/tutorial/app-payment-stripe-open.md: -------------------------------------------------------------------------------- 1 | ## 申请开通Stripe 2 | * [登录/注册](https://dashboard.stripe.com/login) 3 | 4 | * 进入主页后,点击顶部继续按钮 5 | ![](https://native-res.dcloud.net.cn/images/uniapp/payment/stripe_home_page.png) 6 | 7 | * 完善公司信息 8 | ![](https://native-res.dcloud.net.cn/images/uniapp/payment/stripe_company_info.png) 9 | 10 | * 完善信息后,回到首页即可在右侧查看密钥 11 | ![](https://native-res.dcloud.net.cn/images/uniapp/payment/stripe_get_publishkey.png) 12 | 13 | -------------------------------------------------------------------------------- /docs/tutorial/app-payment.md: -------------------------------------------------------------------------------- 1 | App端支付模块封装了市场上主流的三方支付平台SDK,提供JS API统一调用移动支付功能。 2 | 3 | |项目类型|API| 4 | |:-|:-| 5 | |uni-app|[uni.requestPayment(OBJECT)](/api/plugins/payment.md#requestpayment)| 6 | |5+ App/Wap2App|[plus.payment.*](https://www.html5plus.org/doc/zh_cn/payment.html) 7 | 8 | 如果服务端使用[uniCloud](https://uniapp.dcloud.io/uniCloud/README),官方提供了[uniPay](https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html)云端统一支付服务,极大提升支付业务的开发效率,强烈推荐给开发者使用,参考示例:[https://ext.dcloud.net.cn/plugin?id=1835](https://ext.dcloud.net.cn/plugin?id=1835) 9 | 10 | 使用支付功能需在项目manifest.json的“App模块配置”中勾选“Payment(支付)”,并根据项目实际情况勾选使用的三方支付平台: 11 | ![](https://native-res.dcloud.net.cn/images/uniapp/payment/modules.png) 12 | 13 | > 提示:支付模块参数配置需提交云端打包后才能生效,真机运行调试时请使用[自定义基座](http://ask.dcloud.net.cn/article/35115) 14 | 15 | 使用支付功能基本流程: 16 | - 向三方支付平台申请开通,有些平台(如微信支付)申请成功后会获取appid 17 | - 在服务端生成支付订单,获取支付订单数据 18 | - 在客户端调用API进行支付 19 | 20 | 支持的三方支付平台: 21 | - [Apple应用内支付](https://uniapp.dcloud.io/app-payment-aip) 22 | HBuilderX1.0.0+版本支持 23 | - [支付宝支付](https://uniapp.dcloud.io/app-payment-alipay) 24 | - [微信支付](https://uniapp.dcloud.io/app-payment-weixin) 25 | - [Paypal支付](https://uniapp.dcloud.io/app-payment-paypal) 26 | HBuilderX3.3.7+版本支持 27 | - [Stripe支付](https://uniapp.dcloud.io/app-payment-stripe) 28 | HBuilderX3.3.7+版本支持 29 | - [Google支付](https://uniapp.dcloud.io/app-payment-google) 30 | HBuilderX3.3.7+版本支持 31 | 32 | -------------------------------------------------------------------------------- /docs/tutorial/app-privacy-detect.md: -------------------------------------------------------------------------------- 1 | ## uni隐私合规产品简介 2 | 3 | uni隐私合规检测是DCloud联合业内主流隐私合规检测服务商提供的移动App隐私权限检测技术。 4 | 5 | uni隐私合规检测目前仅支持Android App,后续会扩展到iOS App。 6 | 7 | uni隐私合规检测目前已上线蚂蚁⼩程序云版。 8 | 9 | ## 应用场景 10 | 11 | ### 应用上架前隐私检测 12 | 13 | 各大移动应用市场在应用上架前,需要对应用进行隐私检测,确保安全合规、提醒应用存在的风险 14 | 15 | ### 应用合规检测 16 | 网信办、工信部等监管部门依据GB35273、164号文、《违法违规使用个人信息自评估指南》、《认定方法》等多个监管条文,防止对客户信息过度收集,进行app日常合规检测、整改、二次检测和抽检等。 17 | 18 | 19 | ## 计费规则 20 | - 隐私合规检测:150元/次 21 | 22 | ## 使用指南 23 | 24 | 1. 使用开发者账号登录[开发者中心](https://dev.dcloud.net.cn/) ,选择`uni隐私合规检测`栏目。阅读uni隐私合规检测服务协议并点击协议下方的“同意协议并开通”按钮,便可开通uni隐私合规检测服务。 25 | 26 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/app-detect/20230919006.png) 27 | 28 | 2. 在提交检测之前,您需要先进行充值,因为应用隐私合规检测是一项预付费业务。点击页面上的“充值”按钮,并输入充值金额进行充值。 29 | 30 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/app-detect/2023091900702.png) 31 | 32 | 3. 完成充值后,前往`检测记录`栏目,点击"新增检测"按钮后,将打开一个新页面,用于上传应用。 33 | 34 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/app-detect/2023091900802.png) 35 | 36 | 37 | 38 | 39 | 4. 当您提交成功后,您可以查看应用检测记录来跟踪检测的进展和结果。 40 | 41 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/app-detect/20230919009.png) 42 | 43 | ## 常见问题 44 | - **蚂蚁小程序云的隐私合规检测产品有哪些优势?** 45 | 46 | 首先,它提供以下产品能力: 47 | 48 | | 敏感权限检测 | 敏感信息检测 | 检测必要的材料准备 | SDK检测 | SDK库 | 报告产出时间 49 | | --- | --- | --- | --- | --- | --- | 50 | | 有 |有 |非加固包+隐私权政策链接 | 有| 有| 24h| 51 | 52 | 其次,产品的亮点包括: 53 | 1. 行业认证:检测能力通过CCRC组织的“移动互联网应用程序(App)个人信息安全测试”能力验证,并获得CCRC颁发的能力验证合格证书。 54 | 2. 检测手段丰富:客户端代码扫描、隐私权政策解析、SDK扫码等多种技术手段结合支持全方位检测客户端隐私风险。 55 | 3. 数智化监测:基于NLP以及代码扫描,对App与集成SDK的隐私政策内容、隐私权限、个人信息收集与使用、用户权利保障等方面,进行全面高效的自动化分析。 56 | 4. 扫描特征库持续更新:API标准集,SDK特征库基于支付宝技术团队长期沉淀积累,并持续更新,保证检出数据的准确性与完整性。 57 | 5. 检测结果比应用宝、应用商店更全面细致:能扫描出隐私权限、敏感信息api的具体调用代码位置,并可以区分是App本身代码调用,还是SDK代码的调用,能方便开发者快速定位问题并及时修复上架。 58 | 59 | - **uni隐私合规检测价格有何优势?** 60 | 61 | 对比竞对价格最优:360的检测能力,最低价位的检测3999/次,爱加密公司检测5万/次,DCloud检测150/次。 62 | -------------------------------------------------------------------------------- /docs/tutorial/app-share-qq.md: -------------------------------------------------------------------------------- 1 | ### 开通 2 | - 登录[腾讯开放平台](https://connect.qq.com/index.html),打开 “应用管理” -> “移动应用” 页面 3 | - 在页面中选择 “创建应用” -> “创建移动应用”,根据提示填写信息创建应用 4 | - 创建成功后,在应用详情中页面可以获取 APP ID 5 | - 在应用详情页面的 “基本信息” -> “平台信息” 中,点击“修改”可以设置iOS平台的通用链接(UniversalLink) 6 | 7 | 更多信息详见QQ官方文档 [移动应用接入概述](https://wiki.connect.qq.com/%e7%a7%bb%e5%8a%a8%e5%ba%94%e7%94%a8%e6%8e%a5%e5%85%a5%e6%a6%82%e8%bf%b0) 8 | 9 | 10 | 11 | ### 配置 12 | 打开项目的manifest.json文件,在“App模块配置”项的“Share(分享)”下,勾选“QQ分享”: 13 | ![](https://native-res.dcloud.net.cn/images/uniapp/share/qq-manifest.png) 14 | 15 | - appid 16 | QQ开放平台申请应用的AppID值 17 | - UniversalLinks 18 | iOS平台通用链接,必须与QQ开放平台配置的一致,推荐使用[一键生成iOS通用链接](https://uniapp.dcloud.io/api/plugins/universal-links.html) 19 | 20 | 21 | **注意** 22 | - HBuilderX中标准真机运行基座使用的是DCloud申请HBuilder应用的AppID等信息,仅用于体验QQ分享功能 23 | - 配置参数需提交云端打包后才能生效,真机运行时请使用[自定义调试基座](https://ask.dcloud.net.cn/article/35115) 24 | 25 | 26 | ### 使用QQ分享 27 | 28 | - uni-app项目 29 | 调用 [uni.share(OBJECT)](/api/plugins/share.md#share) 发起分享操作,OBJECT参数中provider属性值固定为`qq` 30 | - 5+ App项目 31 | 调用 [plus.share.getServices(successCB,errorCB)](https://www.html5plus.org/doc/zh_cn/share.html#plus.share.getServices) 获取分享服务对象 [ShareService](https://www.html5plus.org/doc/zh_cn/share.html#plus.share.ShareService), 再调用其 [send](https://www.html5plus.org/doc/zh_cn/share.html#plus.share.ShareService.send) 方法发送分享消息 32 | 33 | 34 | #### 示例代码 35 | - uni-app项目 36 | ``` js 37 | uni.share({ 38 | provider: 'qq', 39 | summary: "我正在使用HBuilderX开发uni-app,赶紧跟我一起来体验!", 40 | success: function (res) { 41 | console.log("success:" + JSON.stringify(res)); 42 | }, 43 | fail: function (err) { 44 | console.log("fail:" + JSON.stringify(err)); 45 | } 46 | }); 47 | ``` 48 | 49 | - 5+ App项目 50 | ``` js 51 | var qqShare = null; 52 | plus.share.getServices(function(services) { 53 | for (var i in services) { 54 | var service = services[i]; 55 | // 获取QQ分享对象 56 | if (service.id == 'qq') { 57 | qqShare = service; 58 | break; 59 | } 60 | } 61 | qqShare.send( { 62 | content: '我正在使用HBuilderX开发App,赶紧跟我一起来体验!' 63 | }, function(){ 64 | // 分享成功 65 | }, function(err) { 66 | // 分享操作失败 67 | // err.code是错误码 68 | }) 69 | }, function(err) { 70 | // 获取 services 失败 71 | }) 72 | ``` 73 | 74 | -------------------------------------------------------------------------------- /docs/tutorial/app-share-weibo.md: -------------------------------------------------------------------------------- 1 | ### 开通 2 | - 登录[新浪微博开放平台](http://open.weibo.com/),打开 “移动应用 MOBILE” 页面 3 | - 在页面中选择 “立即接入”,根据提示填写信息创建应用 4 | - 创建成功后,在 “我的应用” 中点击应用,可以在应用详情页面 5 | - 在应用详情页面的 “应用信息” -> “基本信息” 中可获取 App Key,点击编辑可设置iOS平台的通用链接(UniversalLink) 6 | 7 | 更多信息详见新浪微博官方文档 [移动应用接入](https://open.weibo.com/wiki/Connect/login) 8 | 9 | 10 | 11 | ### 配置 12 | 打开项目的manifest.json文件,在“App模块配置”项的“Share(分享)”下,勾选“新浪微博分享”: 13 | ![](https://native-res.dcloud.net.cn/images/uniapp/share/sina-manifest.png) 14 | 15 | - appkey 16 | 新浪微博开放平台申请应用的AppKey值 17 | - redirect_url 18 | 新浪微博开放平台申请应用中设置的回调页 19 | - UniversalLinks 20 | iOS平台通用链接,必须与新浪微博开放平台配置的一致,推荐使用[一键生成iOS通用链接](https://uniapp.dcloud.io/api/plugins/universal-links.html) 21 | 22 | 23 | **注意** 24 | - HBuilderX中标准真机运行基座使用的是DCloud申请HBuilder应用的AppID等信息,仅用于体验新浪微博分享功能 25 | - 配置参数需提交云端打包后才能生效,真机运行时请使用[自定义调试基座](https://ask.dcloud.net.cn/article/35115) 26 | 27 | 28 | ### 使用新浪微博分享 29 | 30 | - uni-app项目 31 | 调用 [uni.share(OBJECT)](/api/plugins/share.md#share) 发起分享操作,OBJECT参数中provider属性值固定为`sinaweibo` 32 | - 5+ App项目 33 | 调用 [plus.share.getServices(successCB,errorCB)](https://www.html5plus.org/doc/zh_cn/share.html#plus.share.getServices) 获取分享服务对象 [ShareService](https://www.html5plus.org/doc/zh_cn/share.html#plus.share.ShareService), 再调用其 [send](https://www.html5plus.org/doc/zh_cn/share.html#plus.share.ShareService.send) 方法发送分享消息 34 | 35 | 36 | #### 示例代码 37 | - uni-app项目 38 | ``` js 39 | uni.share({ 40 | provider: 'sinaweibo', 41 | summary: "我正在使用HBuilderX开发uni-app,赶紧跟我一起来体验!", 42 | success: function (res) { 43 | console.log("success:" + JSON.stringify(res)); 44 | }, 45 | fail: function (err) { 46 | console.log("fail:" + JSON.stringify(err)); 47 | } 48 | }); 49 | ``` 50 | 51 | - 5+ App项目 52 | ``` js 53 | var weiboShare = null; 54 | plus.share.getServices(function(services) { 55 | for (var i in services) { 56 | var service = services[i]; 57 | // 获取微博分享对象 58 | if (service.id == 'sinaweibo') { 59 | weiboShare = service; 60 | break; 61 | } 62 | } 63 | weiboShare.send( { 64 | content: '我正在使用HBuilderX开发App,赶紧跟我一起来体验!' 65 | }, function(){ 66 | // 分享成功 67 | }, function(err) { 68 | // 分享操作失败 69 | // err.code是错误码 70 | }) 71 | }, function(err) { 72 | // 获取 services 失败 73 | }) 74 | ``` 75 | 76 | -------------------------------------------------------------------------------- /docs/tutorial/app-share-weixin.md: -------------------------------------------------------------------------------- 1 | ### 开通 2 | - 登录[微信开放平台](https://open.weixin.qq.com/),添加移动应用并提交审核,审核通过后可获取应用ID(AppID) 3 | - 在应用详情中确认已获取`分享到朋友圈`、`分享给朋友`等接口 4 | - 在HBuilderX中配置appid、iOS通用链接后即可打包使用微信分享功能 5 | 6 | 更多信息详见微信官方文档 [分享与收藏功能](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Share_and_Favorites/Share_and_Favorites.html) 7 | 8 | 9 | 10 | ### 配置 11 | 打开项目的manifest.json文件,在“App模块配置”项的“Share(分享)”下,勾选“微信分享”: 12 | ![](https://native-res.dcloud.net.cn/images/uniapp/share/weixin-manifest.png) 13 | 14 | - appid 15 | 微信开放平台申请应用的AppID值 16 | - UniversalLinks 17 | iOS平台通用链接,必须与微信开放平台配置的一致,推荐使用[一键生成iOS通用链接](https://uniapp.dcloud.io/api/plugins/universal-links.html) 18 | 19 | 20 | **注意** 21 | - HBuilderX中标准真机运行基座使用的是DCloud申请HBuilder应用的AppID等信息,仅用于体验微信分享功能 22 | - 配置参数需提交云端打包后才能生效,真机运行时请使用[自定义调试基座](https://ask.dcloud.net.cn/article/35115) 23 | 24 | 25 | ### 使用微信分享 26 | 27 | - uni-app项目 28 | 调用 [uni.share(OBJECT)](/api/plugins/share.md#share) 发起分享操作,OBJECT参数中provider属性值固定为`weixin` 29 | - 5+ App项目 30 | 调用 [plus.share.getServices(successCB,errorCB)](https://www.html5plus.org/doc/zh_cn/share.html#plus.share.getServices) 获取分享服务对象 [ShareService](https://www.html5plus.org/doc/zh_cn/share.html#plus.share.ShareService), 再调用其 [send](https://www.html5plus.org/doc/zh_cn/share.html#plus.share.ShareService.send) 方法发送分享消息 31 | 32 | 33 | #### 示例代码 34 | - uni-app项目 35 | ``` js 36 | uni.share({ 37 | provider: "weixin", 38 | scene: "WXSceneSession", 39 | type: 1, 40 | summary: "我正在使用HBuilderX开发uni-app,赶紧跟我一起来体验!", 41 | success: function (res) { 42 | console.log("success:" + JSON.stringify(res)); 43 | }, 44 | fail: function (err) { 45 | console.log("fail:" + JSON.stringify(err)); 46 | } 47 | }); 48 | ``` 49 | 50 | - 5+ App项目 51 | ``` js 52 | var weixinShare = null; 53 | plus.share.getServices(function(services) { 54 | for (var i in services) { 55 | var service = services[i]; 56 | // 获取微信分享对象 57 | if (service.id == 'weixin') { 58 | weixinShare = service; 59 | break; 60 | } 61 | } 62 | weixinShare.send( { 63 | content: '我正在使用HBuilderX开发App,赶紧跟我一起来体验!' 64 | }, function(){ 65 | // 分享成功 66 | }, function(err) { 67 | // 分享操作失败 68 | // err.code是错误码 69 | }) 70 | }, function(err) { 71 | // 获取 services 失败 72 | }) 73 | ``` 74 | 75 | -------------------------------------------------------------------------------- /docs/tutorial/app-share.md: -------------------------------------------------------------------------------- 1 | App端Share(分享)模块封装了市场上主流的三方分享SDK,提供JS API统一调用分享功能。 2 | 3 | |项目类型|API| 4 | |:-|:-| 5 | |uni-app|[uni.share(OBJECT)](/api/plugins/share.md#share)、[uni.shareWithSystem(OBJECT)](/api/plugins/share.md#sharewithsystem)| 6 | |5+App/Wap2App|[plus.share.*](https://www.html5plus.org/doc/zh_cn/share.html) 7 | 8 | uni-app项目中,官方提供了封装好的[uni-share](https://ext.dcloud.net.cn/plugin?id=4860)插件方便开发者使用。 9 | 10 | 使用分享功能需在项目manifest.json的“App模块配置”中勾选“Share(分享)”,并根据项目实际情况勾选使用的三方分享平台: 11 | ![](https://native-res.dcloud.net.cn/images/uniapp/share/modules.png) 12 | 13 | > 提示:三方分享模块参数配置需提交云端打包后才能生效,真机运行调试时请使用[自定义基座](http://ask.dcloud.net.cn/article/35115) 14 | 15 | 使用分享功能基本流程: 16 | - 向三方分享平台申请开通,有些平台(如微信分享)申请成功后会获取appid 17 | - 在HBuilderX中配置申请的参数(如appid等),提交云端打包生成[自定义基座](http://ask.dcloud.net.cn/article/35115) 18 | - 在App项目中调用API进行分享操作 19 | 20 | 支持的三方分享平台: 21 | - [微信分享](./app-share-weixin.md) 22 | - [QQ分享](./app-share-qq.md) 23 | - [新浪微博分享](./app-share-weibo.md) 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/tutorial/app-statistic-umeng.md: -------------------------------------------------------------------------------- 1 | #### 申请开通友盟统计 2 | 3 | App云端打包友盟统计功能,需要到友盟开发平台申请应用后获取相关配置参数: 4 | [友盟统计](http://dev.umeng.com/analytics) 5 | 6 | #### 使用友盟统计 7 | 8 | 在项目manifest.json文件的“App模块配置”页面,在“Statistic(统计)”下勾选“友盟统计”项,并输入从友盟统计平台申请的参数: 9 | ![](https://native-res.dcloud.net.cn/images/uniapp/statistic/umeng.png) 10 | 11 | - appkey_ios 12 | 友盟统计平台申请应用获取的iOS平台appkey 13 | - channelid_ios 14 | iOS平台的渠道字符串,可输入任意字符串 15 | - appkey_android 16 | 友盟统计平台申请应用获取的Android平台appkey 17 | - channelid_android 18 | Android平台的渠道字符串,可输入任意字符串 19 | 20 | -------------------------------------------------------------------------------- /docs/tutorial/app-statistic.md: -------------------------------------------------------------------------------- 1 | App端统计模块封装了市场上主流的三方移动App统计SDK,提供JS API统一调用统计功能。 2 | 3 | |项目类型|API| 4 | |:-|:-| 5 | |uni-app|uni-app暂时没有封装统计API,建议使用[uni统计](https://tongji.dcloud.io/)| 6 | |5+ App|[plus.statistic.*](https://www.html5plus.org/doc/zh_cn/statistic.html) 7 | 8 | 注意:打包时勾选三方统计模块后会自动统计应用日活、启动次数等数据,统计API是为了扩展自定义统计数据时使用。 9 | 10 | **uni-app自带uni统计,无需使用三方统计。三方统计增加包体积且无法做到自带的免埋点采集行为数据。详见:[https://tongji.dcloud.io/](https://tongji.dcloud.io/)** 11 | 12 | 使用统计功能需在项目manifest.json的“App模块配置”中勾选“Statistic(统计)”,并根据项目实际情况勾选使用的三方统计平台: 13 | ![](https://native-res.dcloud.net.cn/images/uniapp/statistic/moudules.png) 14 | 15 | > 提示:统计模块参数配置需提交云端打包后才能生效,真机运行调试时请使用[自定义基座](http://ask.dcloud.net.cn/article/35115) 16 | 17 | 18 | 支持的三方统计平台: 19 | - [友盟统计](https://uniapp.dcloud.io/app-statistic-umeng) 20 | - [Google统计](https://uniapp.dcloud.io/app-statistic-google) 21 | HBuilderX3.3.7+版本支持 22 | 23 | -------------------------------------------------------------------------------- /docs/tutorial/app-webview-error.md: -------------------------------------------------------------------------------- 1 | 当webview组件(窗口)加载错误地址(如本地页面不存在)或者访问网络资源失败(如无法访问网络)时会自动显示默认错误页面: 2 | ![](https://native-res.dcloud.net.cn/images/uniapp/others/error-default.jpg) 3 | 4 | 如需修改默认错误页面样式,可以通过以下方法自定义Webview的404等错误页面。 5 | 6 | ### 设置自定义错误页面 7 | 8 | **可视化界面配置** 9 | 10 | 打开项目的manifest.json文件,在 “App常用其它设置” -> “自定义404错误页面” 下点击 “浏览” 选择页面文件: 11 | ![](https://native-res.dcloud.net.cn/images/uniapp/others/error-manifest.png) 12 | 13 | > 注:建议使用html文件,并放到项目根目录下的 hybrid/html 文件夹中 14 | 15 | **源码视图配置** 16 | 打开项目的manifest.json文件,切换到“源码视图”,根据项目类型进行配置错误页面路径,推荐使用本地地址,相对于应用根目录;设置 url 属性值为 "none" 表示关闭自定义错误页面功能,加载页面错误时显示系统默认错误页面内容。 17 | 18 | - uni-app项目 19 | 在 "app-plus" -> "error" 节点的 url 属性配置自定义错误页面路径,示例如下: 20 | ``` js 21 | "app-plus": { 22 | "error": { 23 | "url": "hybrid/html/error.html" 24 | }, 25 | //... 26 | }, 27 | //... 28 | ``` 29 | 30 | - 5+App/Wap2App项目 31 | 在 "plus" -> "error" 节点的 url 属性配置自定义错误页面路径,示例如下: 32 | ``` javascript 33 | "plus": { 34 | "error": { 35 | "url": "error.html" 36 | }, 37 | //... 38 | }, 39 | //... 40 | ``` 41 | 其中url地址推荐使用本地地址,相对于应用根目录。 42 | 设置为“none”则关闭跳转到错误页面功能,此时页面显示Webview默认的错误页面内容。 43 | 44 | 45 | ### 错误页面中监听事件 46 | 自定义404错误页面时,可能需要在 error.html 页面中获取错误原因,可以通过以下方法监听 "error" 事件获取完整错误信息,示例如下: 47 | ```javascript 48 | // 获取错误信息 49 | document.addEventListener("error", function(e){ 50 | var url = e.url; // 错误页面的url地址 51 | var href = e.href; // 错误页面的完整路径(包括完整的协议头) 52 | },false); 53 | ``` 54 | 55 | 56 | ### 运行时动态设置自定义错误页面 57 | 如果需要单独自定义某个Webview窗口的错误页面,则需要在创建时通过[WebviewStyle](http://www.dcloud.io/docs/api/zh_cn/webview.html#plus.webview.WebviewStyle)对象的errorPage属性控制: 58 | ```js 59 | var styles = {errorPage: "error.html"}; // 设置为“none”则关闭此Webview窗口的跳转到错误页面功能 60 | var webview = plus.webview.create("url", "id", styles); 61 | webview.show(); 62 | ``` 63 | 64 | > 注:仅5+App/Wap2App项目支持 65 | 66 | 67 | ### 常见问题 68 | - Android平台使用iframe时如果无法加载页面在不同版本系统上存在差异: 69 | + Android5.0及以上版本:Webview窗口对象不会加载错误页面,仅iframe节点显示无法加载页面; 70 | + 5.0以下版本:Webview窗口对象会加载错误页面。 71 | 72 | -------------------------------------------------------------------------------- /docs/tutorial/build/iosSafePack.md: -------------------------------------------------------------------------------- 1 | # ios 安心打包证书安装 2 | 3 | 6 | 7 | > 本文档不适用windows 8 | 9 | ## 前言 10 | 11 | 某些MacOSX系统上, 使用ios安心打包, 需要安装相关证书. 12 | 13 | ![](https://hx.dcloud.net.cn/static/snapshots/tutorial/ios-safe-pack-1.png) 14 | 15 | 16 | ## 打开证书目录 17 | 18 | ![](https://hx.dcloud.net.cn/static/snapshots/tutorial/ios-safe-pack-2.png) 19 | 20 | ## 安装证书 21 | 22 | 1. 点击证书文件, 会自动打开`钥匙串`, 下拉列表`钥匙串`, 选择`系统`, 点击 添加 按钮 23 | 2. 点击添加后, 请在弹窗中,输入电脑密码, 允许钥匙串访问. 24 | 3. 按照上面的步骤, 依次完成其它证书的导入. 25 | 26 | ![](https://hx.dcloud.net.cn/static/snapshots/tutorial/ios-safe-pack-3.png) 27 | -------------------------------------------------------------------------------- /docs/tutorial/build/publish-mp-weixin-cli.md: -------------------------------------------------------------------------------- 1 | # uni-app发行到微信小程序@uploadPrivateKey 2 | 3 | > HBuilderX 3.3.7+, uni-app 发行到微信小程序,支持自动上传代码到微信平台,无需再打开微信开发者工具上传发行 4 | 5 | 6 | 7 | 通过微信小程序CI,使用上传密钥上传代码,无需打开微信开发者工具,一键完成微信小程序代码的上传、预览等操作。 8 | 9 | **注意:** 10 | 11 | - 自动上传到微信平台,依赖CI插件,如弹窗提示要求安装CI插件,请点击确认安装; 12 | - 自动上传到微信平台,需要配置`上传密钥`,并正确填写`微信小程序appid`和`privatekey`; 13 | - 自动上传到微信平台,如果开启了`IP白名单`,请确保微信平台已正确配置 `IP白名单`。 14 | - 关于微信ci机器人编号,仅支持HBuilderX 3.6.18+ -------------------------------------------------------------------------------- /docs/tutorial/compiler-cautions.md: -------------------------------------------------------------------------------- 1 | #### 编译器注意事项 -------------------------------------------------------------------------------- /docs/tutorial/compiler-config.md: -------------------------------------------------------------------------------- 1 | 你可以通过如下入口,对`uni-app`编译器进行配置: 2 | 3 | **manifest.json** 4 | 5 | 在manifest.json中,你可以配置Vue的版本(Vue2/Vue3),以及发行H5平台路由模式,详见: [manifest.json](/collocation/manifest) 6 | 7 | **vue.config.js** 8 | 9 | 在 vue.config.js 中可以修改 webpack 配置,包括环境变量,具体参考 [vue-config.js](/collocation/vue-config)。 10 | 11 | **vite.config.js** 12 | 13 | 在 vite.config.js 中可以修改 Vite 配置,包括环境变量,具体参考 [vite.config.js](/collocation/vite-config)。 14 | 15 | **package.json** 16 | 17 | 在自定义条件编译平台时,可以在 package.json 文件的 env 节点下配置环境变量,具体参考 [package.json](/collocation/package) 18 | 19 | **.env** 20 | 21 | CLI 创建的项目中可以在根目录中放置 ``.env`` 文件来指定环境变量,具体参考:[环境变量](https://cli.vuejs.org/zh/guide/mode-and-env.html#%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F)。 -------------------------------------------------------------------------------- /docs/tutorial/compiler.md: -------------------------------------------------------------------------------- 1 | #### 什么是编译器 2 | 3 | `uni-app`能实现一套代码、多端运行,核心是通过`编译器 + 运行时`实现的: 4 | - 编译器:将`uni-app`统一代码编译生成每个平台支持的特有代码;如在小程序平台,编译器将`.vue`文件拆分生成`wxml`、`wxss`、`js`等代码。 5 | - 运行时:动态处理数据绑定、事件代理,保证Vue和平台宿主数据的一致性; 6 | 7 | `uni-app`项目根据所依赖的`Vue`版本不同,编译器的实现也不同: 8 | - vue2:`uni-app`编译器基于wepback实现 9 | - vue3:`uni-app`编译器基于Vite实现,编译速度更快,详见:[vue3和vite双向加持,uni-app性能再次提升](https://ask.dcloud.net.cn/article/39628) 10 | 11 | `uni-app`项目根据创建方式的不同,编译器在使用上也有差异: 12 | - `cli` 方式创建的项目,编译器安装在项目下。编译器不会跟随`HBuilderX`升级。如需升级编译器,可以参考:[更新依赖到指定版本](/quickstart-cli.md#cliversion)。 13 | - `HBuilderX`可视化界面创建的项目,编译器在`HBuilderX`的安装目录下的`plugin`目录,随着`HBuilderX`的升级会自动升级编译器。 14 | - 已经使用`cli`创建的项目,如果想继续在`HBuilderX`里使用,可以把工程拖到`HBuilderX`中。注意如果是把整个项目拖入`HBuilderX`,则编译时走的是项目下的编译器。如果是把src目录拖入到`HBuilderX`中,则走的是`HBuilderX`安装目录下`plugin`目录下的编译器。 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/tutorial/debug/debug-mp.md: -------------------------------------------------------------------------------- 1 | ## 使用各家小程序开发工具调试@mp-debug 2 | 3 | `uni-app` 运行到微信、阿里等平台的小程序开发者工具时,可在这些工具的控制台查看 `console` 信息,网络请求等信息等。 4 | 5 | 页面样式调试和一般的`web`项目一样,通过调试的箭头选中元素即可查看相应的节点和样式,如下图: 6 | 7 | ![uni-app](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/debug1.png) 8 | 9 | 调试 `js` 时需要切换到 `Sources` 栏,根据 sourcemap,找到 `webpack` 里正确的目录,选中想要调试的那个页面的`js`,进行调试(如果`js`代码是压缩过的,点击右下角的{}可格式化代码),如下图: 10 | 11 | ![uni-app](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/debug2.png) -------------------------------------------------------------------------------- /docs/tutorial/debug/debug-web-via-chrome.md: -------------------------------------------------------------------------------- 1 | # uni-app web版调试@h5-debug 2 | 3 | > HBuilderX 3.5.0版本,uni-app 运行到 web 平台,可通过 HBuilder自带的调试面板进行调试。 4 | 5 | ## 简介@introduction 6 | 7 | - 运行uni-app到web后,支持在HBuilder自带的调试面板中调试js代码。 8 | - 调试需要本机安装chrome浏览器,因为使用了chrome debug 协议 9 | - 调试支持的文件类型:`vue`文件、`nvue`文件、`ts`文件、`js`文件,断点只能打在js或ts代码中,请勿在vue文件template、style节点添加断点。 10 | 11 | **注意事项:** 12 | 1. uni-app,某些生命周期方法内,添加断点,debug调试后,断点无法进入。 13 | 2. uni-app Vue3项目,debug调试后,可能会在 HBuilderX 内打开一个虚拟目录的文件,如`/localhost:3000/src/pages/index/index.vue`。Debug调试视图,点击继续即可。 14 | 15 | ![](https://hx.dcloud.net.cn/static/snapshots/app/h5-debug/overview.png) 16 | 17 | ## 开启调试@start-debug 18 | 19 | 项目管理器,选中任意 uni-app项目,运行到Chrome。控制台右上角,点击debug图标(红色虫子),即可打开调试。如下图: 20 | 21 | ![](https://hx.dcloud.net.cn/static/snapshots/app/h5-debug/open-debug.png) 22 | 23 | uni-app web调试,依赖debug插件,弹窗提示安装依赖插件,请务必点击安装,否则无法进行调试。 24 | 25 | ## 添加/删除断点@add-breakpoint 26 | 27 | 打开要调试的文件,在js或ts代码行号上,鼠标右击或双击添加断点。 28 | 29 | ![](https://hx.dcloud.net.cn/static/snapshots/app/h5-debug/add_breakpoint.png) 30 | 31 | ## 调试视图@DebugView 32 | 33 | 开启调试后,即可在HBuilderX左侧视图,看到调试视图,具体如下: 34 | 35 | **调试视图分为5部分:** 36 | - [调试工具栏](#debugactions) 37 | - 变量窗口 (`复制值`、`复制表达式`、`添加到监视`) 38 | - 监视窗口(包含`添加`/`编辑`/`删除`表达式,以及`复制值`) 39 | - 调用堆栈窗口 40 | - 断点窗口(包含`删除`/`启用`/`禁用`断点) 41 | 42 | ![](https://hx.dcloud.net.cn/static/snapshots/app/h5-debug/debug_view.png) 43 | 44 | ## 调试操作@DebugActions 45 | 46 | ![](https://hx.dcloud.net.cn/static/snapshots/app/h5-debug/debug_toolbar.png) 47 | 48 | - [继续](#continue) `F8` 49 | - 下一步 `F10` 50 | - 进入 `F11` 51 | - 返回 `Shift+F11` 52 | 53 | ### 继续@Continue 54 | 55 | 继续(F8):点击后,运行直到下一个断点。 56 | 57 | ![](https://hx.dcloud.net.cn/static/snapshots/app/h5-debug/continue.png) 58 | 59 | ## 数据检查和查看变量@data 60 | 61 | ### 添加到监视@add-to-watch 62 | 63 | 在【变量窗口】,选中变量,右键菜单,即可将变量添加到监视窗口。 64 | 65 | ![](https://hx.dcloud.net.cn/static/snapshots/app/h5-debug/add_to_monitor.png) 66 | 67 | ### 悬停显示@hover 68 | 69 | 断点调试过程中,将鼠标悬停在要查看的变量上,即可打开悬停窗口。 70 | 71 | ![](https://hx.dcloud.net.cn/static/snapshots/app/h5-debug/hovering_window.png) 72 | -------------------------------------------------------------------------------- /docs/tutorial/debug/debug-web-via-hx.md: -------------------------------------------------------------------------------- 1 | ## HBuilderX 内置浏览器运行 web 2 | 3 | 打开 `uni-app` 项目的页面,点 HBuilderX 右上角的`预览`按钮,可以在内置浏览器里打开 Web 运行结果,也可以点右键打开控制台调试。 4 | 5 | 修改保存工程源码时,右边的浏览器内容可以自动刷新。 6 | 7 | 在 HBuilderX 控制台里,可以直接看到内置浏览器打印的日志。 8 | 9 | 点击日志,可以直接跳转到对应的代码处。 10 | 11 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/consolelogjump.jpg) 12 | 13 | 注意浏览器控制台打印的日志无法转到代码,只有HBuilder控制台打印的才能转到代码。而运行到外部浏览器是没有这个功能的。只有HBuilder内置浏览器才可以。 14 | 15 | ## 同步断点@h5-debug-hx 16 | 17 | HBuilder中有2种断点调试方案,一种是使用浏览器自带的调试控制台;一种是使用HBuilderX的调试控制台。 18 | 19 | 在HBuilderX内置浏览器中,可以使用HBuilderX内置浏览器的控制台。此时无需点击运行控制台的红色虫子按钮。 20 | 21 | 对源码点右键,可以同步断点到内置浏览器的调试工具,调试方法同chrome通行的用法。 22 | 23 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/syncbreakpoint.jpg) 24 | 25 | 关于另一种使用HBuilderX的调试控制台的方案,[另见](/tutorial/debug/debug-web-via-chrome.md#h5-debug) -------------------------------------------------------------------------------- /docs/tutorial/debug/uni-uts-debug-harmony.md: -------------------------------------------------------------------------------- 1 | HBuilderX 4.61+ 运行到鸿蒙,支持Debug调试。包括uvue、uts、混编的ets都支持。 2 | 3 | ## 开启调试 4 | 5 | 如下图所示,运行uni-app x项目到鸿蒙,运行成功后,HBuilderX控制台点击`红色虫子`图标,下拉菜单选择【开启调试】,即可开启鸿蒙调试功能。 6 | 7 | 8 | 9 | > 注意:鸿蒙调试,依赖鸿蒙调试插件,弹窗提示安装依赖插件,请务必点击安装,否则无法进行调试。 10 | 11 | > 注意:如果需要触发应用初始化中的断点,比如App.uvue的onLaunch中,需要点击`红色虫子`图标右边的`重启应用`按钮,重启之后应用初始化中的断点才会生效 12 | 13 | > 注意:目前部分变量的显示可能还是以ets的方式显示,因为uts编译结果是ets 14 | 15 | ## 打断点@add-breakpoint 16 | 17 | 打开要调试的uts、uvue、ets文件,在代码行号上,鼠标右击或双击添加断点。 18 | 19 | 20 | 21 | ## 调试视图@debug-View 22 | 23 | 开启调试后,即可在HBuilderX左侧视图,看到调试视图,具体如下: 24 | 25 | 下图中包含了uvue、uts、ets的调试步骤 26 | 27 | 28 | 29 | 调试视图分为5部分: 30 | 31 | - [调试工具栏](#debugactions) 32 | - 变量窗口 (`复制值`、`复制表达式`、`添加到监视`) 33 | - 监视窗口(包含`添加`/`编辑`/`删除`表达式,以及`复制值`) 34 | - 调用堆栈窗口 35 | - 断点窗口(包含`删除`/`启用`/`禁用`断点) 36 | 37 | ## 调试操作@DebugActions 38 | 39 | - 继续 `F8` 40 | - 下一步 `F10` 41 | - 进入 `F11` 42 | - 返回 `Shift+F11` 43 | 44 | 45 | 46 | ## 数据检查和查看变量@data 47 | 48 | ### 添加到监视@add-to-watch 49 | 50 | 在【变量窗口】,选中变量,右键菜单,即可将变量添加到监视窗口。 51 | 52 | 53 | 54 | ### 悬停显示@hover 55 | 56 | 断点调试过程中,将鼠标悬停在要查看的变量上,即可打开悬停窗口。 57 | 58 | 59 | -------------------------------------------------------------------------------- /docs/tutorial/debug/uni-uts-debug.md: -------------------------------------------------------------------------------- 1 | # uts Android调试 2 | 3 | uts在Android上的调试,包括3部分: 4 | 1. uni-app和uni-app x的uts插件的uts代码。需HBuilderX 4.0+ 5 | 1. uni-app和uni-app x的uts插件的混编kt代码。需HBuilderX 4.61+ 6 | 3. uni-app x的uvue页面。需HBuilderX 4.61+ 7 | 8 | uts、uvue、kt,这三种文件,本质上都是在调试运行时的kt文件。 9 | 10 | HBuilderX中可以对这3种文件打断点,联编、跨语言、跨文件跳转断点。 11 | 12 | ## 开启调试 13 | 14 | 如下Gif动画所示,运行uni-app uts项目到Android,运行成功后,HBuilder控制台点击`红色虫子`图标,下拉菜单选择【uts调试】,即可开启uts调试功能。 15 | 16 | 17 | 18 | > 注意:如果需要触发应用初始化中的断点,比如App.uvue的onLaunch中,需要点击`红色虫子`图标右边的`重启应用`按钮,重启之后应用初始化中的断点才会生效 19 | 20 | > 注意:目前部分变量的显示可能还是以kotlin的方式显示,因为uts编译结果是kotlin 21 | 22 | > 注意:断点时App可能会出现Application Not Responding(应用无响应)的弹框(部分机型的表现是app会重启),这是因为调试默认是以Attach的方式连接,Android系统不允许UI线程被阻塞太长时间,点击下一步或者断点结束时该弹框会自动消失。(开启断点之后点击点击`红色虫子`图标右边的`重启应用`按钮会以调试模式启动, 此时断点时不会出现`应用无响应`的弹框) 23 | 24 | ## 添加/删除断点@add-breakpoint 25 | 26 | 打开要调试的uts文件,在代码行号上,鼠标右击或双击添加断点。 27 | 28 | 29 | 30 | ## 调试视图@debug-View 31 | 32 | 开启调试后,即可在HBuilderX左侧视图,看到调试视图,具体如下: 33 | 34 | 35 | 36 | 下图中包含了uvue、uts、kotlin的调试步骤 37 | 38 | 39 | 40 | 调试视图分为5部分: 41 | 42 | - [调试工具栏](#debugactions) 43 | - 变量窗口 (`复制值`、`复制表达式`、`添加到监视`) 44 | - 监视窗口(包含`添加`/`编辑`/`删除`表达式,以及`复制值`) 45 | - 调用堆栈窗口 46 | - 断点窗口(包含`删除`/`启用`/`禁用`断点) 47 | 48 | ## 调试操作@DebugActions 49 | 50 | - 继续 `F8` 51 | - 下一步 `F10` 52 | - 进入 `F11` 53 | - 返回 `Shift+F11` 54 | 55 | 56 | 57 | ## 数据检查和查看变量@data 58 | 59 | ### 添加到监视@add-to-watch 60 | 61 | 在【变量窗口】,选中变量,右键菜单,即可将变量添加到监视窗口。 62 | 63 | 64 | 65 | ### 悬停显示@hover 66 | 67 | 断点调试过程中,将鼠标悬停在要查看的变量上,即可打开悬停窗口。 68 | 69 | 70 | -------------------------------------------------------------------------------- /docs/tutorial/env.md: -------------------------------------------------------------------------------- 1 | uni-app 项目中配置环境变量主要有如下三种方式: 2 | 3 | ### vue-config.js 4 | 5 | 在 vue.config.js 中可以修改 webpack 配置,包括环境变量,具体参考 [vue-config.js](/collocation/vue-config)。 6 | 7 | ### package.json 8 | 9 | 在自定义条件编译平台时,可以在 package.json 文件的 env 节点下配置环境变量,具体参考 [package.json](/collocation/package) 10 | 11 | ### .env 12 | 13 | `HBuilderX` 中的 `uni-app vue3` 和 `uni-app x (4.25+)` 项目及 `CLI` 创建的项目中可以在根目录中放置 ``.env`` 文件来指定环境变量,具体参考:[Vue2](https://cli.vuejs.org/zh/guide/mode-and-env.html#%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F),[Vue3](https://cn.vitejs.dev/guide/env-and-mode.html)。 14 | 15 | ### 注意 16 | * uni-app x不支持自定义环境变量。 17 | -------------------------------------------------------------------------------- /docs/tutorial/harmony/dev.md: -------------------------------------------------------------------------------- 1 | 文件已搬家,[前往新文档](./intro.md) -------------------------------------------------------------------------------- /docs/tutorial/harmony/history.md: -------------------------------------------------------------------------------- 1 | # 历史变更 2 | 3 | 自 uni-app 4.31 版本开始,鸿蒙运行时架构进行了较大的变更。逻辑层从 ArkTS 环境加载改为使用 [JSVM](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/jsvm-introduction-V5) 加载。uts插件仍然是ArkTS环境,仅开发者编写的普通代码和vue框架运行在 JSVM 中。 4 | 5 | 其影响如下: 6 | 7 | - 因为 ArkTS 和 JS 的差异,之前存在部分 JS 代码在 ArkTS 环境下执行结果和预期不符的情况,这些问题在迁移在 JSVM 环境下不再存在。 8 | - JSVM 下不再支持直接调用鸿蒙的原生接口。调用原生API的代码请写在 [uts 插件](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-for-harmony.html)中。 9 | - 不支持在 DevEco Studio 中设置断点调试。 10 | - 目前由于华为 JSVM 的限制,仅支持运行在 arm64 架构的设备或模拟器上。也就是目前不支持x86模拟器了,当然不排除未来华为升级后支持的可能性,届时无需HBuilderX更新。 11 | 12 | 升级至 uni-app 4.51 版本后,由于 SDK 调整,影响如下: 13 | 14 | - 需要在工程级的 `build-profile.json5` 的 `products` 字段(如果有多项都要配置)中配置 `compatibleSdkVersionStage: "beta6"` [鸿蒙文档](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-hvigor-build-profile-V5) 15 | -------------------------------------------------------------------------------- /docs/tutorial/harmony/intro.md: -------------------------------------------------------------------------------- 1 | # 概述 2 | 3 | 自 `HBuilderX 4.27` 版本开始,uni-app 支持`Harmony Next`平台的App开发。 4 | 5 | 目前仅支持 vue3 项目编译到鸿蒙平台,vue2 项目升级 vue3 项目请参考:[vue2 项目迁移到 vue3](../migration-to-vue3.md) 6 | 7 | 本专题旨在介绍如何使用 `uni-app` 框架开发适用于`Harmony Next`操作系统的应用,帮助开发者快速掌握鸿蒙应用的开发方法。 8 | 9 | 本文档主要包括以下内容: 10 | 11 | 1. [运行和发行](runbuild.md) 12 | 2. [调用鸿蒙原生API](native-api.md) 13 | 3. [嵌入鸿蒙原生组件](native-component.md) 14 | 4. [内置模块说明](built-in-module.md) 15 | 5. [历史变更](history.md) 16 | 17 | 欢迎加入 [uni-app鸿蒙化技术交流群](https://im.dcloud.net.cn/#/?joinGroup=668685db8185e1e6e7b7b15e) 18 | -------------------------------------------------------------------------------- /docs/tutorial/harmony/mp-sdk.md: -------------------------------------------------------------------------------- 1 | # uni-app 鸿蒙使用uni小程序SDK(内部简易教程) 2 | 3 | 文档已迁移,[前往新地址](https://nativesupport.dcloud.net.cn/UniMPDocs/UseSdk/harmony.html) -------------------------------------------------------------------------------- /docs/tutorial/hosting.md: -------------------------------------------------------------------------------- 1 | #### 前端网页托管 -------------------------------------------------------------------------------- /docs/tutorial/internationalization.md: -------------------------------------------------------------------------------- 1 | > 本教程仅适用于没有中国大陆手机号的海外开发者。 2 | 3 | ## 背景 4 | 5 | 因中国法律的要求,开发者使用HBuilderX进行云端打包时,需完成手机号验证,但目前DCloud仅支持中国大陆地区手机号的验证,其它地区的手机号暂不支持。 6 | 7 | DCloud为支持海外开发者,特推出“国际区”注册服务,注册在“国际区”的账号,仅需验证邮箱,即可使用云端打包服务。 8 | 9 | ## 注册“国际区”账号 10 | 11 | 请按照如下步骤完成账号注册: 12 | 1. 点击 HBuilderX 左下角的“未登录”文字,打开登录窗口 13 | 2. 选择“Global”,点击下方的“No account?Sign up”连接 14 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/intern-01.png) 15 | 3. 在打开的浏览器中,输入用户名、邮箱、密码等信息 16 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/intern-02.png) 17 | 4. 注册成功的话,会提示已发送激活邮箱 18 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/intern-03.png) 19 | 5. 登录你的邮箱,收取激活邮件,并点击其中的链接,完成账号激活 20 | 6. 账号激活后,返回 HBuilderX 界面,重新点击左下角的”未登录”文字,打开登录窗口,使用刚才注册的账号、密码,完成登录。 21 | 22 | ## App打包 23 | 24 | “国际区”账号的云端打包和“中国大陆地区”账号的云端打包基本操作相同,参考:[App打包](https://uniapp.dcloud.net.cn/tutorial/app-base.html)。 25 | 26 | “国际区”账号尚不支持部分功能点,具体如下: 27 | 1. “国际区”账号尚不支持[问答社区](https://ask.dcloud.net.cn)发帖,但你可以到Github提交[issue](https://github.com/dcloudio/uni-app/issues) 28 | 2. “国际区”账号不能使用插件市场、uniCloud、uni-ad 服务; 29 | 3. “国际区”账号仅支持”uniapp“项目打包,不支持 "5+APp"、"wap2app"打包; 30 | 4. “国际区”账号不支持使用公共测试证书(test keystore)和DCloud老版证书(DCloud keystore) 31 | 32 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/intern-06.png) 33 | 34 | ## 隐私政策 35 | 36 | 请严格遵守所属地区的法律法规,不要使用DCloud提供的工具制作任何违法犯罪的应用。 37 | 38 | 请认真阅读如下说明: 39 | 1. HBuilderX国际区账号,仅为中国大陆以外的开发者提供; 40 | 2. 如果你身处中国大陆地区,注册时请选择“中国大陆地区”;如果你身处中国大陆地区,但注册账号时,却选择了“国际区”,后期一旦被系统发现,你的账号可能会被冻结或封禁; 41 | 3. 你基于HBuilderX开发的App,在上线发行后,如果被中国大陆地区用户使用,会遵循中国大陆地区的法律法规,进行相关信息采集;非中国大陆地区的用户,不受此影响。 42 | 43 | ## 海外共建 44 | 45 | DCloud正在积极开拓海外市场,面向海外工程师提供高效便捷的开发工具,我们正在开发 [uni-app官网英文站](https://en.uniapp.dcloud.io),欢迎熟悉英语的各位开发者,一起参与完善。 46 | 47 | 文档源码地址:[https://github.com/dcloudio/unidocs-en](https://github.com/dcloudio/unidocs-en),欢迎各位踊跃提交 pr 或 issue。 48 | -------------------------------------------------------------------------------- /docs/tutorial/ios-app-store.md: -------------------------------------------------------------------------------- 1 | #### App Store上架 2 | 3 | >再次说明:uni-app并不是简单的使用Webview套壳,Webview仅负责vue页面的UI渲染,nvue页面则完全由原生UI渲染,业务逻辑代码是运行在独立的JS引擎(JSCore)中,并且封装了很多JS API调用原生能力(OC代码实现),完全可以上架苹果应用市场。 4 | 5 | 苹果App Store上架审核规范比较细,提交审核前建议仔细阅读苹果官方[App Store审核指南](https://developer.apple.com/cn/app-store/review/guidelines/)。 6 | 7 | 需要注意以下问题: 8 | - 应用功能不能过于简单 9 | - 应用功能不能跟已经上架的应用相似,就是不能做马甲包 10 | 11 | **使用广告标识(IDFA)相关说明:**[https://ask.dcloud.net.cn/article/36107](https://ask.dcloud.net.cn/article/36107) 12 | 13 | **UIWebview API 已废弃:**[https://ask.dcloud.net.cn/article/36348](https://ask.dcloud.net.cn/article/36348) -------------------------------------------------------------------------------- /docs/tutorial/mp-weixin-user-privacy.md: -------------------------------------------------------------------------------- 1 | ## 微信小程序隐私协议开发指南 2 | 3 | 4 | 涉及处理用户个人信息的小程序开发者,需通过弹窗等明显方式提示用户阅读隐私政策等收集使用规则。 5 | 6 | 为规范开发者的用户个人信息处理行为,保障用户合法权益,微信要求开发者主动同步微信当前用户已阅读并同意小程序的隐私政策等收集使用规则,方可调用微信提供的隐私接口。 7 | 8 | 9 | **2023.08.22更新** 10 | 11 | 以下指南中涉及的 [getPrivacySetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/privacy/wx.getPrivacySetting.html)、[onNeedPrivacyAuthorization](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/privacy/wx.onNeedPrivacyAuthorization.html)、[requirePrivacyAuthorize](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/privacy/wx.requirePrivacyAuthorize.html) 等接口目前可以正常接入调试。调试说明: 12 | 13 | - 在 2023年9月15号之前,在 app.json 中配置 `__usePrivacyCheck__: true` 后,会启用隐私相关功能,如果不配置或者配置为 false 则不会启用。 14 | 15 | - 在 2023年9月15号之后,不论 app.json 中是否有配置 `__usePrivacyCheck__`,隐私相关功能都会启用。 16 | 17 | > 从基础库 2.32.3 开始支持,低于 2.32.3 版本的基础库未集成隐私相关功能,也不会拦截隐私接口调用。 18 | 19 | 20 | **2023.09.14更新** 21 | 22 | 隐私相关功能启用时间延期至 2023年10月17日。 23 | 24 | - 在 2023年10月17日之前,在 app.json 中配置 __usePrivacyCheck__: true 后,会启用隐私相关功能,如果不配置或者配置为 false 则不会启用。 25 | 26 | - 在 2023年10月17日之后,不论 app.json 中是否有配置 __usePrivacyCheck__,隐私相关功能都会启用。 27 | 28 | 新增官方隐私授权弹窗功能,相关功能参考[小程序隐私协议开发指南](https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html)。 29 | 30 | 31 | 在uni-app编译后的 app.json 文件中配置:`__usePrivacyCheck__: true`,启用隐私相关功能。 32 | 33 | -------------------------------------------------------------------------------- /docs/tutorial/nvue-event.md: -------------------------------------------------------------------------------- 1 | 2 | ```Weex``` 提供了通过事件触发动作的能力,例如在用户点击组件时执行 ```JavaScript```。 3 | 下面列出了可被添加到 ```Weex``` 组件上以定义事件动作的属性: 4 | 5 | ### 事件穿透 6 | 7 | > Android和iOS下原生事件传递机制不同,这里仅针对iOS 8 | 9 | 当一个父View存在多个同级子View时,由于iOS会选择层级最高的View来响应事件,底层的View的事件永远都不会响应。 10 | 11 | Weex在```view```组件中增加了```eventPenetrationEnabled```属性,当值为true(默认为false)时,View的子View仍能正常响应事件,但View自身将不会响应事件。 12 | 13 | 14 | ### View交互性 15 | 16 | > 仅iOS支持 17 | 18 | Weex在```view```组件中增加了```userInteractionEnabled```属性,当值为false(默认为true)时,View及其子View均不响应事件,事件向下层View传递。 19 | 20 | **longpress** 21 | 22 | 如果一个组件被绑定了 longpress 事件,那么当用户长按这个组件时,该事件将会被触发。 23 | 24 | **事件对象** 25 | 26 | 27 | |key |value |备注 | 28 | |-- |-- |-- | 29 | |type |longpress| | 30 | |target | |触发长按事件的目标组件 | 31 | |timestamp| |长按事件触发时的时间戳(不支持 H5) | 32 | 33 | 34 | **Appear** 35 | 36 | 如果一个位于某个可滚动区域内的组件被绑定了 appear 事件,那么当这个组件的状态变为在屏幕上可见时,该事件将被触发。 37 | 38 | **事件对象** 39 | 40 | |key |value |备注 | 41 | |-- |-- |-- | 42 | |type |appear | | 43 | |target | |触发 Appear 事件的组件对象 | 44 | |timestamp | |事件被触发时的时间戳(不支持 H5)| 45 | |direction | ```up```或 ```down``` |触发事件时屏幕的滚动方向 | 46 | 47 | 48 | **Disappear** 49 | 50 | 如果一个位于某个可滚动区域内的组件被绑定了 ```disappear``` 事件,那么当这个组件被滑出屏幕变为不可见状态时,该事件将被触发。 51 | 52 | **事件对象** 53 | 54 | |key |value |备注 | 55 | |-- |-- |-- | 56 | |type |disappear | | 57 | |target | |触发 Disappear 事件的组件对象 | 58 | |timestamp| |事件被触发时的时间戳(不支持 H5)| 59 | |direction| ```up```或 ```down``` |触发事件时屏幕的滚动方向 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /docs/tutorial/page-component.md: -------------------------------------------------------------------------------- 1 | 传统vue项目开发,引用组件需要`导入 - 注册 - 使用`三个步骤,如下: 2 | 3 | ```html 4 | 10 | 17 | ``` 18 | 19 | Vue 3.x增加了`script setup`特性,将三步优化为两步,无需注册步骤,更为简洁: 20 | 21 | ```html 22 | 28 | 32 | ``` 33 | 34 | `uni-app`的`easycom`机制,将组件引用进一步优化,开发者只管使用,无需考虑导入和注册,更为高效: 35 | 36 | 37 | ```html 38 | 44 | 46 | ``` 47 | 48 | 在 uni-app 项目中,页面引用组件和组件引用组件的方式都是一样的(可以理解为:页面是一种特殊的组件),均支持通过 `easycom` 方式直接引用。 49 | 50 | easycom 规范详细介绍,参考:[easycom](/collocation/pages.md#easycom) -------------------------------------------------------------------------------- /docs/tutorial/page-json.md: -------------------------------------------------------------------------------- 1 | ### json 文件引入 2 | 3 | `uni-app vue3` 和 `uni-app x (HBuilderX 4.25+)` 项目支持引入 `json` 文件。 4 | 5 | `js | ts | uts` 文件或 `script` 标签内引入 `json` 文件时,可以使用相对路径或绝对路径,例如: 6 | 7 | ```js 8 | // 绝对路径,@指向项目根目录,在cli项目中@指向src目录 9 | import pagesJson from '@/pages.json'; 10 | // 相对路径 11 | import pagesJson from '../../common/pages.json'; 12 | ``` 13 | 14 | 导入 `json` 文件时支持解构,此时会根据导入内容进行摇树,减小包体积,例如: 15 | ```js 16 | import { pages } from '@/pages.json'; 17 | ``` 18 | 19 | 导入的 `json` 文件内部支持条件编译, 导入的结果是根据条件编译规则进行处理后的结果,以如下 `json` 文件为例: 20 | ```json 21 | { 22 | "pages": [{ 23 | "path": "pages/index/index", 24 | "style": { 25 | "navigationBarTitleText": "index" 26 | } 27 | }, 28 | // #ifdef APP 29 | { 30 | "path": "pages/index/app", 31 | "style": { 32 | "navigationBarTitleText": "app" 33 | } 34 | }, 35 | // #endif 36 | // #ifdef H5 37 | { 38 | "path": "pages/index/web", 39 | "style": { 40 | "navigationBarTitleText": "web" 41 | } 42 | } 43 | // #endif 44 | ], 45 | "globalStyle": { 46 | "navigationBarTextStyle": "black", 47 | "navigationBarTitleText": "uni-app", 48 | "navigationBarBackgroundColor": "#F8F8F8", 49 | "backgroundColor": "#F8F8F8" 50 | }, 51 | "uniIdRouter": {} 52 | } 53 | ``` 54 | 在 `App` 平台导入的结果中,`pages` 下只包含 `path` 为 `pages/index/index` 和 `pages/index/app` 的对象。\ 55 | 在 `Web` 平台导入的结果中,`pages` 下只包含 `path` 为 `pages/index/index` 和 `pages/index/web` 的对象。 56 | 57 | 58 | -------------------------------------------------------------------------------- /docs/tutorial/page-path.md: -------------------------------------------------------------------------------- 1 | ### 绝对路径和相对路径 @absolute-path-relative-path 2 | 3 | 在日常开发中,经常会遇到使用绝对路径还是相对路径的问题,下面我们介绍下这两种路径。 4 | 5 | #### 绝对路径 @absolute-path 6 | 7 | 绝对路径:是指从项目根目录开始的完整路径。它用于指定文件或目录的确切位置。绝对路径通常以斜杠(/)开头,表示从根目录开始。 8 | 9 | 例如: 10 | 11 | ```vue 12 | 19 | 29 | ``` 30 | 31 | 这里的`/static/logo.png`就是一个绝对路径,表示图片文件位于项目根目录下的 static 文件夹中。 32 | 33 | 绝对路径的优点是可以直接定位到文件的确切位置,不受当前目录的影响,通常需要动态传递的路径,我们建议使用绝对路径。 34 | 35 | **注意** 36 | 37 | - 当使用`import`语句导入代码文件或静态资源时,`@/`表示项目根目录的绝对路径。如`import { add } from "@/common/utils"` 38 | 39 | #### 相对路径 @relative-path 40 | 41 | 相对路径:在编译时是指一个文件或目录相对于另一个文件或目录的位置,在运行时是指一个文件相对于当前页面路由的位置(不建议使用运行时的相对路径,应该优先使用绝对路径)。 42 | 43 | 例如: 44 | 45 | 组件 components/custom/custom.vue 46 | 47 | ```vue 48 | 52 | 69 | ``` 70 | 71 | **注意** 72 | 73 | - 在 uni-app x 项目中,dialogPage 不影响页面栈和路由地址,所以也不会影响运行时的相对路径转换 74 | -------------------------------------------------------------------------------- /docs/tutorial/page-script.md: -------------------------------------------------------------------------------- 1 | ### js 文件引入 2 | 3 | > `js`文件或`script`标签内(包括 renderjs 等)引入`js`文件时,可以使用相对路径和绝对路径,形式如下 4 | 5 | ```js 6 | // 绝对路径,@指向项目根目录,在cli项目中@指向src目录 7 | import add from '@/common/add.js'; 8 | // 相对路径 9 | import add from '../../common/add.js'; 10 | ``` 11 | 12 | **注意** 13 | 14 | - js 文件不支持使用`/`开头的方式引入 15 | 16 | ## NPM支持 17 | 18 | uni-app支持使用**npm**安装第三方包。 19 | 20 | 此文档要求开发者们对**npm**有一定的了解,因此不会再去介绍**npm**的基本功能。如若之前未接触过**npm**,请翻阅[NPM官方文档](https://docs.npmjs.com/getting-started/what-is-npm)进行学习。 21 | 22 | **初始化npm工程** 23 | 24 | 若项目之前未使用npm管理依赖(项目根目录下无package.json文件),先在项目根目录执行命令初始化npm工程: 25 | ```shell 26 | npm init -y 27 | ``` 28 | 29 | cli项目默认已经有package.json了。HBuilderX创建的项目默认没有,需要通过初始化命令来创建。 30 | 31 | **安装依赖** 32 | 33 | 在项目根目录执行命令安装npm包: 34 | ```shell 35 | npm install packageName --save 36 | ``` 37 | 38 | **使用** 39 | 40 | 安装完即可使用npm包,js中引入npm包: 41 | ```js 42 | import package from 'packageName' 43 | const package = require('packageName') 44 | ``` 45 | 46 | **注意** 47 | 48 | * 为多端兼容考虑,建议优先从 [uni-app插件市场](https://ext.dcloud.net.cn/) 获取插件。直接从 npm 下载库很容易只兼容H5端。 49 | * 非 H5 端不支持使用含有 dom、window 等操作的 vue 组件和 js 模块,安装的模块及其依赖的模块使用的 API 必须是 uni-app 已有的 [API](/api/)(兼容小程序 API),比如:支持[高德地图微信小程序 SDK](https://www.npmjs.com/package/amap-wx)。类似[jQuery](https://www.npmjs.com/package/jquery) 等库只能用于H5端。 50 | * node_modules 目录必须在项目根目录下。不管是cli项目还是HBuilderX创建的项目。 51 | * 关于ui库的获取,详见[多端UI库](https://ask.dcloud.net.cn/article/35489) -------------------------------------------------------------------------------- /docs/tutorial/page-style.md: -------------------------------------------------------------------------------- 1 | 2 | 使用`@import`语句可以导入外联样式表,`@import`后跟需要导入的外联样式表的相对路径,用`;`表示语句结束。 3 | 4 | **示例代码:** 5 | 6 | ```html 7 | 14 | ``` 15 | -------------------------------------------------------------------------------- /docs/tutorial/project-concept.md: -------------------------------------------------------------------------------- 1 | #### 工程的概念 -------------------------------------------------------------------------------- /docs/tutorial/run-and-debug.md: -------------------------------------------------------------------------------- 1 | 运行,指将项目运行起来,可以一边修改代码、一边立即看到修改结果,同时可以打log日志(console.log)。 2 | 3 | 而调试,也称之为`debug`,在运行的基础之上,进一步可以打断点、单步跟踪、看堆栈信息。 4 | 5 | uni-app可以用cli项目的npm命令运行,但更重要的是,DCloud提供了uni-app的专用开发工具HBuilder,可以更好的开发uni-app。 6 | 7 | 如果使用cli项目,在非HBuilder环境下运行uni-app,那就执行普通的 `npm run dev:%platform%`命令即可,使用外部工具运行。[详见](../quickstart-cli.md#运行、发布uni-app) 8 | 9 | 本文重点讲述HBuilder中的运行和调试方法。 10 | 11 | 简要来讲,HBuilder为uni-app提供了内置的web浏览器、web端调试环境、App的真机运行环境、App调试环境、uniCloud运行环境、uniCloud调试环境。 12 | 13 | - 运行容器方面 14 | 15 | | |web |app |小程序 |uniCloud| 16 | |-- |-- |-- |-- |-- | 17 | |uni-app+其他ide |运行在普通浏览器 |不支持 |三方小程序开发工具 |不支持 | 18 | |uni-app+HBuilder |HBuilder额外内置了浏览器 |支持 |三方小程序开发工具 |支持 | 19 | 20 | - debug方面 21 | 22 | | |web |app |小程序 |uniCloud| 23 | |-- |-- |-- |-- |-- | 24 | |uni-app+其他ide |视ide功能 |不支持 |依靠三方小程序开发工具 |不支持 | 25 | |uni-app+HBuilder |支持 |支持 |依靠三方小程序开发工具 |支持 | 26 | 27 | ## 运行调试入口 28 | 29 | ### 运行入口 30 | 在HBuilder中,有顶部菜单、toolbar运行按钮、快捷键三种运行入口。 31 | 32 | 1. 顶部运行菜单 33 | 34 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/menurun.png) 35 | 36 | 2. toolbar工具栏上的运行按钮 37 | 38 | ![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/toolbarrun.png) 39 | 40 | toolbar的运行按钮点击后会展开一个菜单。这个菜单可配置,通过`自定义菜单`将不常用的运行项目折叠起来。 41 | 42 | 3. 快捷键 43 | 44 | 运行快捷键是【Ctrl+r】 45 | 46 | 弹出的菜单还支持键盘快捷选择:按回车可以选中菜单的第一项;按数字可以快捷选中菜单项开头数字对应的菜单项。 47 | 48 | 如果你不能看到相关菜单,那么HBuilder当前打开的文件可能不是uni-app项目下的文件。 49 | 50 | ### 调试入口 51 | 52 | uni-app一般是先运行后调试。debug的入口在运行之后的控制台上。 53 | 54 | 运行后的控制台,右上角会有一个红色虫子图标或调试的checkbox。 55 | 56 | ![](https://hx.dcloud.net.cn/static/snapshots/app/h5-debug/open-debug.png) 57 | 58 | ### 线上平台排错 59 | 60 | 应用上线后,各种用户环境下可能会有报错,需要开发者统计和分析。但三方统计系统(如友盟、阿拉丁、百度),对运行端的报错采集,提示的是uni-app编译器编译后的代码报错的行数,相当于乱码,无法告知开发者是uni-app的vue或js的哪一行代码报错。 61 | 62 | 为了解决这个问题,DCloud提供了uni统计的sourceMap功能,在uni统计后台可以清晰的看到报错的环境和准确的报错代码,是uni-app编译前的vue或js的具体信息。[详见](https://uniapp.dcloud.net.cn/uni-stat-v2.html#sourcemap-parse-error) 63 | -------------------------------------------------------------------------------- /docs/tutorial/run/OOM.md: -------------------------------------------------------------------------------- 1 | 1. 配置node默认内存。mac位置为"偏好设置->运行配置->node启动内存参数",Windows位置为"工具->设置->运行配置->node启动内存参数"。 2 | 2. 关闭日志回显 3 | 3. 升级电脑内存 4 | -------------------------------------------------------------------------------- /docs/tutorial/run/apple-signature-ipa.md: -------------------------------------------------------------------------------- 1 | # iOS 标准基座 - Apple证书签名 2 | 3 | > 本文档仅适用于MacOSX HBuilderX 3.6.11+ 4 | 5 | MacOSX HBuilderX 3.6.11+,支持选择标准基座签名后的位置。如下图所示: 6 | 7 | 8 | 9 | **保存在HBuilderX插件目录下** 10 | 11 | 选择`保存在HBuilderX插件目录下`,真机运行时会使用插件目录下的ipa包。具体路径为: 12 | 13 | ```js 14 | # 正式版 15 | /Applications/HBuilderX.app/Contents/HBuilderX/plugins/launcher/base 16 | 17 | # alpha版 18 | /Applications/HBuilderX-Alpha.app/Contents/HBuilderX/plugins/launcher/base 19 | ``` 20 | 21 | 22 | **保存在项目下** 23 | 24 | 选择存放在项目下,项目运行时,则会使用该目录下的ipa包。具体路径为:`项目目录/unpackage/debug`;如果是cli项目,则是在`dist/debug`目录下。 -------------------------------------------------------------------------------- /docs/tutorial/run/ios-apple-certificate-signature.md: -------------------------------------------------------------------------------- 1 | # 使用Apple证书签名iOS标准基座@iOSAppleCertificateSignature 2 | 3 | > mac需HBuilderX 3.6.9+; 4 | 5 | > win需HBuilderX 3.6.20+ 6 | 7 | 因苹果公司禁止企业证书用于非企业内部开发者。所以开发者无法再使用DCloud的企业证书签名的标准运行基座。 8 | 9 | 运行标准基座到iOS真机设备前,需要使用开发者的证书对基座签名后才能运行。(运行到xcode模拟器不受限制) 10 | 11 | **注意**: `HBuilderX每次升级,因为标准基座更新,需要重新对iOS标准基座进行签名。` 12 | 13 | 14 | ## 如何用Apple证书对iOS标准基座签名 15 | 16 | 选择任意App项目,点击工具栏运行图标,选择【运行到iOS App基座】,在弹出的窗口中,点击按钮【使用Apple证书签名】,如下图 17 | 18 | 19 | 20 | 在iOS标准基座签名窗口,输入`Bundle ID`、`证书私钥密码`、`证书profile文件`、`私钥证书P12文件`,即可完成签名。 21 | 22 | 23 | 24 | ::: warning 提示 25 | 26 | 项目中包含`uts插件`,在 Mac OS 系统中如果安装了 XCode 环境,在以下情况下会重新编译 uts插件,自动弹出重签名界面。 27 | 28 | - 真机运行时勾选了`清除构建缓存` 29 | - 修改了`uts插件`的源码 30 | 31 | ::: 32 | 33 | 34 | ## 其他签名方案 35 | 36 | > 项目中包含uts插件时,在 Mac OS 系统存在 XCode 时会自动编译uts插件,这时需要对安装包重新签名,这种场景不适用其它签名方案,请使用HBuilderX自带签名功能。 37 | 38 | Windows系统,HBuilderX 3.6.20以下版本,没有内置重签功能,开发者可以使用三方工具(如爱思助手)对标准基座签名。 39 | 40 | Windows, iOS标准基座路径:`HBuilderX安装目录\plugins\launcher\base\iPhone_base.ipa`,如下所示: 41 | 42 | 43 | 44 | 下面讲描述如何使用爱思助手对iOS标准基座签名。 45 | 46 | 47 | 48 | 如果签名成功,爱思助手会提示签名成功。签名成功后,找到签名后的ipa文件,并命名为`iPhone_base_signed.ipa`,然后将其拷贝到`HBuilderX安装目录\plugins\launcher\base`。 49 | 50 | 51 | 52 | 上述操作完成后,打开HBuilderX,选择要运行的项目,点击工具栏运行图标,选择【运行到iOS App基座】,如下图所示,即可运行标准基座到iOS真机了。 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /docs/tutorial/run/mp-log.md: -------------------------------------------------------------------------------- 1 | # 小程序运行日志回显 2 | > HBuilderX 4.41+ 3 | 4 | 以往运行到小程序开发者工具时,打印的日志或报错,只能在小程序开发工具里看编译后的代码。 5 | 6 | 从HBuilderX 4.41+,uni-app(x) 运行到小程序开发者工具时,可以在HBuilderX的控制台查看运行时日志,并且显示uni-app源码位置,方便回源。 7 | - 目前支持 vue3 项目的微信、支付宝、百度、抖音小程序。其他小程序平台未放开。 8 | - 包含console信息和onError数据。其他信息(如:小程序开发工具自身的信息提示、视图层wxs/sjs、worklet等)无法获取,模板(如wxml/ttml等)警告、错误等信息暂不支持回溯到源码位置。 9 | - 确保开启了不校验合法域名(默认已开启)。 10 | - 如使用手机真机,需确保手机可以连接HBuilderX安装的电脑,手机和电脑在同一ip段,且电脑的防火墙没有拒绝连接。 11 | - 真机预览的错误堆栈可能回溯不到源码位置。 12 | - 日志回显使用了 socket 连接,为了避免冲突,建议使用 [SocketTask](https://uniapp.dcloud.net.cn/api/request/socket-task.html) 的方式去管理 WebSocket,而不是全局的 socket API 方式。因为小程序上全局 Socket 只能有一个连接,而 SocketTask 在小程序上目前最多允许并发 5 个 socket 连接(微信小程序文档标明最多5个,但有的设备上测试只有2个可用),如果您的小程序不希望日志回显占用 socket 连接,可以在 HBuilderX 控制台右上角手动取消日志回显功能(注意:切换后,需要重新运行)。 13 | 14 | 日志回显开关 15 | ![](https://web-ext-storage.dcloud.net.cn/doc/hx/WX20250104-125814@2x_1.png) 16 | 17 | 日志回显效果: 18 | ![](https://web-ext-storage.dcloud.net.cn/hx/05519546-456A-4B0C-AA0E-23199917F7B8.png) 19 | -------------------------------------------------------------------------------- /docs/tutorial/run/run-app-android-wifi.md: -------------------------------------------------------------------------------- 1 | # 使用WIFI连接Android真机@AndroidWifi 2 | 3 | ### 环境说明 4 | 5 | 1. HBuilderX 4.61之前的版本,内置的adb版本,不支持无线adb。如果您的HBuilderX版本低于4.61,请自行配置adb。 6 | 2. HBuilderX 4.61+版本,内置adb已支持无线调试。内置adb路径:`/plugins/launcher-tools/tools/adbs` 7 | 3. 如果hx已启动,在操作系统任务管理器中杀掉hx的adb进程。 8 | 9 | ### 注意事项 10 | 11 | 1. Android WiFi连接,仅支持Android 11+版本,如果您的手机系统低于11, 就不用尝试WiFi连接了。 12 | 2. 连接前,请确保您的工作站和设备已连接到同一无线网络。即手机和电脑处于同一无线网络。 13 | 14 | ### 手机无线配置 15 | 16 | 1. 在手机开发者选项里,打开无线调试。 17 | 2. 如下图标红部分,打开后,继续点击【无线调试】。 18 | 3. 点击【使用配对码配对设备】 19 | 20 | 21 | 22 | 23 | ### 电脑命令行执行adb pair命令 24 | 25 | 1. 查看手机配对弹窗中的【IP地址和端口】 26 | 2. 打开电脑命令行输入如下命令, 然后输入手机端显示的验证码. 27 | 3. 如果命令输出`Successfully paired`, 就代表配对成功。 28 | 29 | > 大家可能发现我下面输入的跟上面的截图不一样了。这是因为你每次点击,端口和配对码都会变动。 30 | 31 | ```shell 32 | adb pair : 33 | 34 | # 我的设备是192.168.31.196:38255 35 | adb pair 192.168.31.196:38255 36 | ``` 37 | 38 | 39 | 40 | ### HBuilderX内查看配对手机 41 | 42 | 上面的步骤操作完成后,在HBuilderX的运行界面就可以看到这个配对好的手机了。 43 | 44 | 45 | 46 | ### 扩展 47 | 48 | - [Google官网adb命令行工具介绍](https://developer.android.google.cn/tools/adb?hl=zh-cn) -------------------------------------------------------------------------------- /docs/tutorial/run/run-app-harmony-moved.md: -------------------------------------------------------------------------------- 1 | ## 此文档已迁移 2 | 3 | **新文档链接:[鸿蒙App专题-运行和发行](/tutorial/harmony/runbuild.md)** 4 | -------------------------------------------------------------------------------- /docs/tutorial/run/run-custom-base-ios-simulator.md: -------------------------------------------------------------------------------- 1 | # 运行自定义基座到iOS模拟器 2 | 3 | HBuilderX 3.7.13起,MacOSX系统,App项目,支持运行自定义基座到iOS模拟器。 4 | 5 | ### 制作iOS模拟器自定义基座 6 | 7 | MacOSX系统,App项目,运行自定义基座到iOS模拟器前,需要先制作自定义基座。 8 | 9 | 如何制作自定义基座? 选择项目,点击顶部菜单【发行】【原生App - 云打包】,如下窗口所示: 10 | 11 | 12 | 13 | ### iOS模拟器设备选择窗口选择自定义基座 14 | 15 | 选择uni-app等App项目,点击工具栏运行菜单,在下拉列表中,点击【运行到iOS模拟器 App基座】 16 | 17 | -------------------------------------------------------------------------------- /docs/tutorial/run/uts-development-ios.md: -------------------------------------------------------------------------------- 1 | # iOS UTS扩展开发 2 | 3 | > 版本要求: HBuilderX 3.6.9+ 4 | 5 | HBuilderX 3.6.9+,新增 uts插件 iOS平台 支持本地编译和真机运行,需要配置Xcode环境。 6 | 7 | 安装[uts扩展插件](#uts扩展插件)和[Xcode](#xcode环境配置)后,您在本地修改uts插件iOS平台代码,即可在本地编译并真机运行到iOS设备,而无需再提交代码到云端制作自定义基座。 8 | 9 | 10 | 11 | ## uts扩展插件 12 | 13 | 当您运行带有uts插件的项目到`iOS真机设备`时,会自动安装【uts开发扩展 - iOS】插件,请务必安装。具体如下: 14 | 15 | 16 | 17 | ## Xcode环境配置@xcodeConfig 18 | 19 | 本地真机运行 `uts插件` 目前需要安装`Xcode 15.2` 或更高版本,以及和 Xcode版本相同的 Xcode Command Line Tools。 20 | 21 | 你可以通过 `App Store` 或到[Apple 开发者官网上下载](https://developer.apple.com/xcode/downloads/ank)。这一步骤会同时安装 `Xcode IDE`、`Xcode` 的命令行工具和 `iOS` 模拟器。 22 | 23 | 如果是新下载Xcode后, 要打开一次,并确认Xcode的命令行工具如下图所示: 24 | 25 | #### Xcode 的命令行工具 26 | 27 | 启动 `Xcode`,并在`Xcode | Settings(或者 Preferences) | Locations`菜单中检查一下是否装有某个版本的`Command Line Tools`。`Xcode` 的命令行工具中包含一些必须的工具,比如`git`等。 28 | 29 | ![Command Line Tools](https://native-res.dcloud.net.cn/images/uts/iOS/xcode_command_line_tool.jpeg) 30 | 31 | 请在使用uts插件真机运行 之前确保你本地的环境 如上图一样 准备完毕。 -------------------------------------------------------------------------------- /docs/tutorial/snippet.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 为提升开发效率,HBuilderX将 `uni-app` 常用代码封装成了以 `u` 开头的代码块,如在 `template` 标签内输入 `ulist` 回车,会自动生成如下代码: 4 | 5 | ```html 6 | 7 | 8 | 9 | 10 | ``` 11 | 12 | 注意:需确保`uni-list`组件已保存在项目的`components`目录下。比较简单的方式,是新建项目时,选`uni-ui`项目模板,在里面即可随便敲所有u开头的代码块。如果你的项目不是`uni-ui`项目模板,那么你需要去插件市场手动把[uni ui组件](https://ext.dcloud.net.cn/plugin?id=55)下载到工程里。 13 | 14 | 15 | 代码块分为`Tag`代码块、`JS`代码块,如在 `script` 标签内输入 `uShowToast` 回车,会自动生成如下代码: 16 | 17 | ```js 18 | uni.showToast({ 19 | title: '', 20 | mask: false, 21 | duration: 1500 22 | }); 23 | ``` 24 | 25 | `uni-app`已支持代码块见下方列表。 26 | 27 | 28 | ### Tag代码块 29 | 30 | - uButton 31 | - uCheckbox 32 | - uGrid:宫格,需引用uni ui 33 | - uList:列表,需引用uni ui 34 | - uListMedia 35 | - uRadio 36 | - uSwiper 37 | - ...... 38 | 39 | 几乎各种组件不管是内置组件还是`uni-ui`的组件,均已封装为代码块;使用`HBuilderX`打开`uni-app`项目中的`.vue`文件,在`template`区域敲`u`,代码助手会提示所有可见代码块列表。 40 | 41 | 你也可以在HBuilderX菜单-工具-代码块设置-vue代码块的左侧列表查阅所有已支持的代码块。 42 | 43 | 除组件外,其他常用代码块包括: 44 | 45 | - viewfor:生成一段带有v-for循环结构的视图代码块 46 | - vbase:生成一段基本的vue代码结构 47 | 48 | ### JS代码块 49 | 50 | #### uni api代码块 51 | - uRequest 52 | - uGetLocation 53 | - uShowToast 54 | - uShowLoading 55 | - uHideLoading 56 | - uShowModal 57 | - uShowActionSheet 58 | - uNavigateTo 59 | - uNavigateBack 60 | - uRedirectTo 61 | - uStartPullDownRefresh 62 | - uStopPullDownRefresh 63 | - uLogin 64 | - uShare 65 | - uPay 66 | - ...... 67 | 68 | 几乎各种常用js api,均已封装为代码块,在HBuilderX的js代码中敲u,代码助手会提示所有可见列表。也可在HBuilderX菜单-工具-代码块设置-js代码块的左侧列表查阅所有。 69 | 70 | #### vue js代码块 71 | - vImport:导入文件 72 | - ed:export default 73 | - vData:输出 data(){return{}} 74 | - vMethod:输出 methods:{} 75 | - vComponents:输出 components: {} 76 | 77 | #### 其他常用js代码块 78 | - iff:简单if 79 | - forr:for循环结构体 80 | - fori:for循环结构体并包含i 81 | - funn:函数 82 | - funa:匿名函数 83 | - rt:return true 84 | - clog:输出:"console.log()" 85 | - clogvar:增强的日志输出,可同时把变量的名字打印出来 86 | - varcw:输出:"var currentWebview = this.$scope.page.$getAppWebview()" 87 | - ifios:iOS的平台判断 88 | - ifAndroid:Android的平台判断 89 | 90 | 预置代码块不满足需求的话,可以自定义代码块,教程参考[https://ask.dcloud.net.cn/article/35924](https://ask.dcloud.net.cn/article/35924) 91 | 92 | 93 | -------------------------------------------------------------------------------- /docs/tutorial/syntax-jsx.md: -------------------------------------------------------------------------------- 1 | ## JSX/TSX 支持 2 | 3 | uniapp 支持 [JSX](https://facebook.github.io/jsx) 开发,可参考 [Vue.js JSX/TSX 支持](https://cn.vuejs.org/guide/extras/render-function.html#jsx-tsx) 说明。 4 | 5 | **平台差异说明** 6 | 7 | |App-vue3|H5-vue3|小程序平台| 8 | |:-:|:-:|:-:| 9 | |√|√|x| 10 | 11 | ## 支持方式 12 | 13 | ### 安装插件 14 | 15 | ```shell 16 | npm install @vitejs/plugin-vue-jsx --save-dev 17 | ``` 18 | 19 | ### 配置 vite.config.js 20 | 21 | - HBuilderX创建的项目 22 | 23 | 项目根目录新增 vite.config.js 文件,并增加如下配置: 24 | 25 | ```js 26 | import { defineConfig } from "vite"; 27 | import uni from "@dcloudio/vite-plugin-uni"; 28 | import vueJsx from '@vitejs/plugin-vue-jsx' 29 | 30 | export default defineConfig({ 31 | plugins: [ 32 | uni(), 33 | vueJsx({ 34 | // options are passed on to @vue/babel-plugin-jsx 35 | }) 36 | ], 37 | }); 38 | 39 | ``` 40 | 41 | - cli创建的项目 42 | 43 | 项目根目录 vite.config.js 文件中增加如下配置: 44 | 45 | ```js 46 | import vueJsx from '@vitejs/plugin-vue-jsx' 47 | 48 | export default defineConfig({ 49 | plugins: [ 50 | vueJsx({ 51 | // options are passed on to @vue/babel-plugin-jsx 52 | }), 53 | ], 54 | } 55 | ``` -------------------------------------------------------------------------------- /docs/tutorial/use-html5plus.md: -------------------------------------------------------------------------------- 1 | `uni-app` App 端内置 [HTML5+](https://www.html5plus.org/doc/) 引擎,让 js 可以直接调用丰富的原生能力。 2 | 3 | #### 条件编译调用 HTML5+ 4 | 5 | 小程序及 H5 等平台是没有 HTML5+ 扩展规范的,因此在 `uni-app` 调用 HTML5+ 的扩展规范时,需要注意使用条件编译。否则运行到h5、小程序等平台会出现 `plus is not defined`错误。 6 | 7 | ```javascript 8 | // #ifdef APP-PLUS 9 | var appid = plus.runtime.appid; 10 | console.log('应用的 appid 为:' + appid); 11 | // #endif 12 | ``` 13 | 14 | #### `uni-app`不需要 `plus ready` 15 | 在html中使用plus的api,需要等待plus ready。 16 | 而`uni-app`不需要等,可以直接使用。而且如果你调用plus ready,反而不会触发。 17 | 18 | 19 | #### `uni-app` 中的事件监听 20 | 21 | 在普通的 H5+ 项目中,需要使用 `document.addEventListener` 监听原生扩展的事件。 22 | 23 | `uni-app` 中,没有 document。可以使用 `plus.globalEvent.addEventListener` 来实现。 24 | 25 | ```javascript 26 | // #ifdef APP-PLUS 27 | // 监听新意图事件 28 | plus.globalEvent.addEventListener('newintent', function(){}); 29 | // #endif 30 | ``` 31 | 32 | 同理,在 `uni-app` 中使用 Native.js 时,一些 Native.js 中对于原生事件的监听同样需要按照上面的方法去实现。 33 | -------------------------------------------------------------------------------- /docs/tutorial/vue3-composition-api.md: -------------------------------------------------------------------------------- 1 | ## 组合式 API(Composition API) 2 | 3 | 通过组合式 API,我们可以使用导入的 API 函数来描述组件逻辑。在单文件组件中,组合式 API 通常会与 ``` 38 | ``` 39 | -------------------------------------------------------------------------------- /docs/tutorial/web-security.md: -------------------------------------------------------------------------------- 1 | #### 前端安全专题 -------------------------------------------------------------------------------- /docs/uni-ad/_sidebar.md: -------------------------------------------------------------------------------- 1 | * [业务介绍](README.md) 2 | * [开屏广告](uni-ad/ad-splash.md) 3 | * [信息流(Banner)广告](uni-ad/ad-component.md) 4 | * [激励视频广告](uni-ad/ad-rewarded-video.md) 5 | * [uniMP激励视频广告](uni-ad/unimp.md) 6 | * [全屏视频广告](uni-ad/ad-fullscreen-video.md) 7 | * [插屏广告](uni-ad/ad-interstitial.md) 8 | * [Draw视频信息流广告](uni-ad/ad-draw.md) 9 | * [短视频内容联盟广告](uni-ad/ad-content-page.md) 10 | * [微信小程序业务介绍](uni-ad/ad-weixin.md) 11 | * [微信小程序广告开通指南](uni-ad/ad-weixin-dcloud.md) 12 | * [微信小程序视频广告](uni-ad/ad-video.md) 13 | * [微信小程序格子广告](uni-ad/ad-grid.md) 14 | * [广告错误码](uni-ad/ad-error-code.md) 15 | * [uni-ad管理后台更新说明](uni-ad/release.md) -------------------------------------------------------------------------------- /docs/uni-ad/ad-alipay.md: -------------------------------------------------------------------------------- 1 | ## uni-ad支持支付宝小程序广告 2 | 3 | 4.28+ 支持 4 | 5 | 1. 开通方式 6 | 7 | 在DCloud网站[uniad.dcloud.net.cn](https://uniad.dcloud.net.cn)申请 8 | 9 | 2. 订购广告插件 10 | 11 | 使用小程序所属支付宝主账号登录,在能力中心订购: 12 | 13 | [https://business.alipay.com/page/fw-market/home/detail/AM010401000000140190](https://business.alipay.com/page/fw-market/home/detail/AM010401000000140190) 14 | 15 | 16 | ## 不同广告类型的开发文档 17 | 18 | - banner/信息流广告 19 | 20 | 详细开发文档地址:[https://uniapp.dcloud.net.cn/uni-ad/ad-component.html](https://uniapp.dcloud.net.cn/uni-ad/ad-component.html) 21 | 22 | - 激励视频广告 23 | 24 | 详细开发文档地址:[https://uniapp.dcloud.net.cn/uni-ad/ad-rewarded-video.html](https://uniapp.dcloud.net.cn/uni-ad/ad-rewarded-video.html) 25 | 26 | - 插屏广告 27 | 28 | 详细开发文档地址:[https://uniapp.dcloud.net.cn/uni-ad/ad-interstitial.html](https://uniapp.dcloud.net.cn/uni-ad/ad-interstitial.html) 29 | 30 | - 全屏广告 31 | 32 | 详细开发文档地址:[https://uniapp.dcloud.net.cn/uni-ad/ad-fullscreen-video.html](https://uniapp.dcloud.net.cn/uni-ad/ad-fullscreen-video.html) 33 | 34 | **注意** 35 | 36 | - 支付宝小程序平台暂不提供测试广告位,开发期间也可以预览广告效果,仅支持真机效果 37 | -------------------------------------------------------------------------------- /docs/uni-ad/ad-card.md: -------------------------------------------------------------------------------- 1 | ## 卡券广告 2 | 3 | ### 简介 4 | 5 | 广告激励场景。 6 | 7 | ### 适用场景 8 | 9 | ![](https://web-ext-storage.dcloud.net.cn/uniad/ad-card-01.png) 10 | 11 | ![](https://web-ext-storage.dcloud.net.cn/uniad/ad-card-02.png) 12 | 13 | ![](https://web-ext-storage.dcloud.net.cn/uniad/ad-card-03.png) 14 | 15 | **平台差异说明** 16 | 17 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序| 18 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 19 | |x|x|3.4.8|x|x|x|x|x|x|x|x| 20 | 21 | 22 | **开通配置广告** 23 | 24 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 25 | 26 | 27 | **属性说明** 28 | 29 | |属性名|类型|默认值|说明|平台差异| 30 | |:-|:-|:-|:-|:-| 31 | |adpid|String||uni-ad 广告位id,在[uni-ad官网](https://uniad.dcloud.net.cn/)申请广告位|微信小程序3.4.8+| 32 | |@load|EventHandle||广告加载成功的回调|| 33 | |@error|EventHandle||广告加载失败的回调,event.detail = {errCode: }|| 34 | |@close|EventHandle||广告关闭的回调|| 35 | 36 | 37 | **接入代码** 38 | 39 | ```html 40 | 41 | ``` 42 | 43 | 44 | 45 | **错误码** 46 | 47 | [错误码相关问题排查](https://uniapp.dcloud.net.cn/uni-ad/ad-error-code.html) 48 | -------------------------------------------------------------------------------- /docs/uni-ad/ad-grid.md: -------------------------------------------------------------------------------- 1 | ## Grid 广告 2 | 3 | ### 简介 4 | 5 | 开发者可以使用 ad 组件创建 Grid 广告组件,Grid 广告组件在创建后会自动拉取广告数据并显示。 6 | 7 | **平台差异说明** 8 | 9 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序| 10 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 11 | |x|x|√ 3.5.1+|x|x|x|x|x|x|x|x| 12 | 13 | **开通配置广告** 14 | 15 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 16 | 17 | 18 | **属性说明** 19 | 20 | |属性名|类型|默认值|说明| 21 | |:-|:-|:-|:-| 22 | |adpid|String||uni-ad 广告位id,在[uni-ad官网](https://uniad.dcloud.net.cn/)申请广告位| 23 | |@load|EventHandle||广告加载成功的回调| 24 | |@error|EventHandle||广告加载失败的回调,event.detail = {errCode: xxx}| 25 | 26 | 27 | ### 广告事件监听 28 | 29 | Grid 广告在创建后会自动拉取广告。开发者可以通过 ad 组件的 load 和 error 事件监听广告拉取成功或失败,可以通过 close 事件监听广告被关闭。 30 | 31 | ```html 32 | 37 | ``` 38 | 39 | ```js 40 | 56 | ``` 57 | -------------------------------------------------------------------------------- /docs/uni-ad/ad-splash.md: -------------------------------------------------------------------------------- 1 | ## 开屏广告 2 | 3 | ### 简介 4 | 5 | 开屏广告是一种在应用启动时且在应用主界面显示之前需要被展示的广告 6 | 7 | 8 | 9 | **平台差异说明** 10 | 11 | |uni-app|Android uni-app x|iOS uni-app x| 12 | |:-: |:-: |:-: | 13 | |2.5.2 |4.0 |4.22 | 14 | 15 | 16 | **开通配置广告** 17 | 18 | 1. 登录 uni-ad web 控制台开通广告功能,[详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 19 | 2. 在打包界面勾选对应渠道 20 | 21 | 22 | -------------------------------------------------------------------------------- /docs/uni-ad/ad-video.md: -------------------------------------------------------------------------------- 1 | ## 视频广告 2 | 3 | ### 简介 4 | 5 | 开发者可以使用 ad 组件创建视频广告,ad 广告组件在创建后会自动拉取广告数据并显示。 6 | 7 | 8 | 9 | **平台差异说明** 10 | 11 | |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序| 12 | |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 13 | |x|x|√ 3.7.2+|x|x|x|x|x|x|x|x| 14 | 15 | **开通配置广告** 16 | 17 | [开通广告步骤详情](https://uniapp.dcloud.net.cn/uni-ad.html#start) 18 | 19 | 20 | **属性说明** 21 | 22 | |属性名|类型|默认值|说明| 23 | |:-|:-|:-|:-| 24 | |adpid|String||uni-ad 广告位id,在[uni-ad官网](https://uniad.dcloud.net.cn/)申请广告位| 25 | |@load|EventHandle||广告加载成功的回调| 26 | |@error|EventHandle||广告加载失败的回调,event.detail = {errCode: xxx}| 27 | 28 | 29 | ### 广告事件监听 30 | 31 | 视频广告在创建后会自动拉取广告。开发者可以通过 ad 组件的 load 和 error 事件监听广告拉取成功或失败。 32 | 33 | ```html 34 | 39 | ``` 40 | 41 | ```js 42 | 58 | ``` 59 | -------------------------------------------------------------------------------- /docs/uni-ad/ad-weixin-agency.md: -------------------------------------------------------------------------------- 1 | ## uni-ad微信小程序流量主代运营广告 2 | 3 | ### 简介 4 | 5 | DCloud是微信官方核准的广告代运营服务商,代运营是微信给开发者和服务商之间搭建的合作方案。 6 | 7 | 开发者可以通过代运营的方式将微信小程序流量主广告的变现委托给uni-ad。这样uni-ad可以聚合微信流量主及uni-ad的其他广告源,进行综合比价,给予开发者更高的变现收益。 8 | 9 | 同时uni-ad还会提供模板、激励视频防刷等易用性、安全性方面的增值服务,帮助开发者更好的做变现。 10 | 11 | 如果您之前未开通微信流量主,通过本流程授权代运营后,uni-ad也会帮您开通微信流量主,然后和uni-ad的其他广告进行整体聚合比价。 12 | 13 | ### 开通条件 14 | 1. 首先需要开通[uni-ad](https://uniad.dcloud.net.cn), 15 | 16 | 2. 开通uni-ad的微信小程序广告,开通指南[点击这里](https://uniapp.dcloud.net.cn/uni-ad/ad-weixin-dcloud.html) 17 | 18 | ### 开通流程 19 | 1. 登录[uni-ad](https://uniad.dcloud.net.cn/),点击左侧导航栏 **广告设置->点击应用进入应用详情->点击微信小程序广告->点击授权微信小程序流量主代运营** 20 | ![](https://web-ext-storage.dcloud.net.cn/doc/ad/wx_agency/apply.png) 21 | 确认微信appid及名称并勾选后点击下一步 22 | ![](https://web-ext-storage.dcloud.net.cn/doc/ad/wx_agency/step.png) 23 | 2. 使用微信小程序appid绑定的管理员个人微信号进行扫码授权 24 | ![](https://web-ext-storage.dcloud.net.cn/doc/ad/wx_agency/qrcode_agree.png) 25 | 然后在手机端按流程提示完成授权: 26 | ![](https://web-ext-storage.dcloud.net.cn/doc/ad/wx_agency/mobile.png) 27 | ::: warning FAQ 28 | - **Q:微信小程序绑定的管理员在哪查看?** 29 | - A:登录[微信公众平台](https://mp.weixin.qq.com/),点击左侧导航栏 **成员管理** 查看管理员账户 30 | - ![](https://web-ext-storage.dcloud.net.cn/doc/ad/wx_agency/mp_admin.png) 31 | - **Q:授权代运营的管理费** 32 | - A:uni-ad默认收取开发者流量主广告收益的1%作为服务费。同时uni-ad承诺给开发者提供比单纯的流量主广告变现更高的收益提升,如未达到此目标,开发者可以申请退还服务费。 33 | - **Q:结款流程** 34 | - A:授权代运营后,微信流量主的广告收益,仍然由微信直接结算给开发者。开发者可以在自己的微信小程序后台看到账单,根据账单向微信开票。uni-ad聚合的其他广告收益,由DCloud给开发者结算,在uni-ad后台查看。 35 | - **Q:授权后是否可以再取消代运营** 36 | - A:开发者可以随时取消代运营(小程序管理员微信在手机端自助操作,无需DCloud审核)。uni-ad的核心是为开发者创造更高收益、更方便和安全的变现,如果开发者没有达到期待,可以随时取消代运营。但取消前建议和DCloud商务沟通,查验不满意的原因,因为正常情况下uni-ad会更有优势。 37 | - **Q:数据查看** 38 | - A:授权代运营后,微信流量主的广告收益在微信后台仍然可以看到。同时在uni-ad后台可以看到聚合比价后的整体总收益,会大于微信后台的收益。 39 | ::: 40 | 41 | 3. 代运营授权完成后uni-ad系统会自动检测该小程序是否已开通微信流量主广告。如未开通且符合条件,uni-ad会自动开通微信流量主广告,如果检测不通过,uni-ad会提示错误原因。 42 | 43 | 4. 开发者通过`HBuilder X 4.63+ (Alpha版本)` 重新发布微信小程序 44 | 45 | ### 广告位说明 46 | - 开发者在开通uni-ad微信小程序广告时,uni-ad已经会自动创建5个小程序广告位,列表如下: 47 | ![](https://web-ext-storage.dcloud.net.cn/doc/ad/wx_agency/adp_list.png) 48 | 49 | 然后授权uni-ad流量主代运营后,uni-ad会针对以上广告位创建流量主广告位,名称为:`uni-ad-[广告位名称]`,开发者如已使用以上广告位adpid,则不需要修改对应代码,重新发布小程序即可。 50 | -------------------------------------------------------------------------------- /docs/uni-ad/ad-weixin-native.md: -------------------------------------------------------------------------------- 1 | ## uni-ad 原生微信小程序开发接入方式 2 | 3 | 4 | **app.json** 5 | 6 | ```json 7 | { 8 | "plugins": { 9 | "uni-ad": { 10 | "version": "1.2.1", 11 | "provider": "wxf72d316417b6767f" 12 | }, 13 | "coral-adv": { 14 | "version": "1.0.24", 15 | "provider": "wx0e203209e27b1e66" 16 | } 17 | } 18 | } 19 | ``` 20 | 21 | 22 | **page.json** 23 | 24 | ```json 25 | { 26 | "usingComponents": { 27 | "uni-ad": "plugin://uni-ad/ad" 28 | } 29 | } 30 | ``` 31 | 32 | 33 | **page.wxml** 34 | 35 | ```html 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 53 | 54 | 55 | 56 | ``` 57 | 58 | 59 | **page.js** 60 | 61 | ```js 62 | Page({ 63 | data: {}, 64 | showRewardedVideoAd: function (e) { 65 | this.selectComponent('.uni-rewarded-video-ad').show(); 66 | }, 67 | showInterstitialAd: function (e) { 68 | this.selectComponent('.uni-interstitial-ad').show(); 69 | }, 70 | onadload: function(e) { 71 | console.log('广告加载成功:', e) 72 | }, 73 | onadclose: function(e) { 74 | const detail = e.detail 75 | // 用户点击了【关闭广告】按钮 76 | if (detail && detail.isEnded) { 77 | // 正常播放结束 78 | console.log("onClose-正常播放结束:" + detail.isEnded); 79 | } else { 80 | // 播放中途退出 81 | console.log("onClose-播放中途退出:" + detail.isEnded); 82 | } 83 | }, 84 | onaderror: function(e) { 85 | // 广告加载失败 86 | console.log('广告加载失败:', e.detail) 87 | } 88 | }) 89 | ``` 90 | -------------------------------------------------------------------------------- /docs/uni-app-x/readme.md: -------------------------------------------------------------------------------- 1 | `请前往新地址访问`:文档地址已迁移至:[https://doc.dcloud.net.cn/uni-app-x/](https://doc.dcloud.net.cn/uni-app-x/) 2 | 3 | `请前往新仓库修改`:文档仓库已迁移至 [https://gitcode.net/dcloud/unidocs-uni-app-x-zh](https://gitcode.net/dcloud/unidocs-uni-app-x-zh) -------------------------------------------------------------------------------- /docs/uni-stat.md: -------------------------------------------------------------------------------- 1 | ## uni统计 2 | 3 | uni统计是DCloud出品的统计平台,是所有uni-app开发者首选的统计平台。 4 | 5 | uni统计有两个版本: 6 | - 2.0版新版文档地址:[https://uniapp.dcloud.net.cn/uni-stat-v2.html](https://uniapp.dcloud.net.cn/uni-stat-v2.html) 7 | - 1.0版老版文档地址:[https://uniapp.dcloud.net.cn/uni-stat-v1.html](https://uniapp.dcloud.net.cn/uni-stat-v1.html) 8 | -------------------------------------------------------------------------------- /docs/uniCloud/README.md: -------------------------------------------------------------------------------- 1 | `请前往新地址访问`:文档地址已迁移至:[https://doc.dcloud.net.cn/uniCloud/](https://doc.dcloud.net.cn/uniCloud/) 2 | 3 | `请前往新仓库修改`:文档仓库已迁移至 [https://gitcode.net/dcloud/unidocs-unicloud-zh](https://gitcode.net/dcloud/unidocs-unicloud-zh) -------------------------------------------------------------------------------- /docs/unipush.md: -------------------------------------------------------------------------------- 1 | ## uni-push 2 | 3 | UniPush 是 DCloud 联合个推公司推出的集成型统一推送服务,是所有uni-app开发者首选的推送服务。 4 | 5 | 有两个版本: 6 | - 2.0版新版文档地址:[https://uniapp.dcloud.net.cn/unipush-v2.html](https://uniapp.dcloud.net.cn/unipush-v2.html) 7 | - 1.0版老版文档地址:[https://uniapp.dcloud.net.cn/unipush-v1.html](https://uniapp.dcloud.net.cn/unipush-v1.html) -------------------------------------------------------------------------------- /docs/use.md: -------------------------------------------------------------------------------- 1 | ## 此文档已迁移 2 | 3 | **新文档链接:[Vue教程](/tutorial/vue-basics.md)** 4 | -------------------------------------------------------------------------------- /docs/user-frv-auth.md: -------------------------------------------------------------------------------- 1 | # 实人认证 2 | 3 | 开发者在使用 DCloud 部分服务(如云端打包、uniCloud等)时会要求开发者进行扫脸`实人认证`,与`实名认证`有所不同: 4 | 5 | - 实名认证,在开发者中心提交身份证或营业执照进行认证,用于账号归属确认 6 | - 实人认证,在开发者中心通过扫脸进行认证,用于账号安全检测 7 | 8 | 本文将引导开发者如何完成实人认证。 9 | 10 | 1、用户使用 HBuilder 账号登录[开发者中心](https://dev.dcloud.net.cn/pages/user/info),选择 个人中心 => 账户信息 菜单,此时可看到认证信息中的实人认证状态 11 | 12 | ![](https://web-assets.dcloud.net.cn/unidoc/zh/rpa/frv-auth-status.png) 13 | 14 | 15 | 2、点击`去实人认证`,此时: 16 | 17 | - 企业实名认证或未实名认证用户,需填写账号联系人身份信息来进行实人认证 18 | - 个人已实名认证用户,会基于当前账号的实名信息来进行实人认证 19 | 20 | 两种情况最终都会获得一个实人认证的二维码 21 | 22 | ![](https://web-assets.dcloud.net.cn/unidoc/zh/rpa/frv-auth-qrcode.png) 23 | 24 | 3、使用微信或手机浏览器扫码进行扫脸实人认证,扫脸用户需与账号联系人或实名信息一致,否则无法通过。 25 | 26 | 4、实人认证通过后,可继续使用相应业务。 27 | 28 | ![](https://web-assets.dcloud.net.cn/unidoc/zh/rpa/frv-auth-success.png) 29 | 30 | ::: warning 注意 31 | - 实人认证扫脸用户必须与填写的联系人或已实名的身份信息一致,否则无法通过认证。如无法完成,可邮件到 service@dcloud.io 说明情况进行申诉。 32 | ::: 33 | -------------------------------------------------------------------------------- /docs/worktile/CI.md: -------------------------------------------------------------------------------- 1 | ## 持续集成 2 | 3 | 很多公司的开发人员提交代码后,需要自动打包或持续集成。 4 | 5 | 此时需要在服务器安装uni-app的cli版本来发布。 6 | 7 | HBuilderX版与cli版互转指南参考:[https://ask.dcloud.net.cn/article/35750](https://ask.dcloud.net.cn/article/35750) 8 | 9 | 如果是发布App,还需要使用[离线打包](https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/508),配置原生环境,来实现持续集成。 10 | -------------------------------------------------------------------------------- /docs/worktile/README.md: -------------------------------------------------------------------------------- 1 | ### 工程化 2 | 3 | uni-app 支持较为完整的工程化支持,主要包括: 4 | 5 | - 版本管理控制:如git/svn 6 | - cli脚手架 7 | - 运行环境管理 8 | - 自动化测试 9 | - 持续集成 10 | -------------------------------------------------------------------------------- /docs/worktile/_sidebar.md: -------------------------------------------------------------------------------- 1 | * [Git/SVN](git-svn.md) 2 | * [cli 脚手架](CLI.md) 3 | * [编译运行环境](running-env.md) 4 | * [自动化测试](auto/quick-start.md) 5 | * [快速开始](auto/quick-start.md) 6 | * [API](auto/api.md) 7 | * [HBuilderX自动化测试插件](auto/hbuilderx-extension/index.md) 8 | * [CLI项目自动化测试](auto/uniapp-cli-project.md) 9 | * [持续集成](CI.md) -------------------------------------------------------------------------------- /docs/worktile/git-svn.md: -------------------------------------------------------------------------------- 1 | 2 | HBuilderX 提供了完备的版本控制功能,参考:[https://hx.dcloud.net.cn/Tutorial/SourceControl/Git/README](https://hx.dcloud.net.cn/Tutorial/SourceControl/Git/README) 3 | -------------------------------------------------------------------------------- /docs/worktile/running-env.md: -------------------------------------------------------------------------------- 1 | ## 开发环境和生产环境 2 | 3 | `uni-app` 可通过 `process.env.NODE_ENV` 判断当前环境是开发环境还是生产环境。一般用于连接测试服务器或生产服务器的动态切换。 4 | 5 | - 在 HBuilderX 中,点击“运行”编译出来的代码是开发环境,点击“发行”编译出来的代码是生产环境 6 | - cli 模式下,是通行的编译环境处理方式。 7 | 8 | ```javascript 9 | if (process.env.NODE_ENV === 'development') { 10 | console.log('开发环境');// 发布到生产环境时,此处代码会被摇树移除掉。 11 | } else { 12 | console.log('生产环境'); 13 | } 14 | ``` 15 | 16 | 如果你需要自定义更多环境,比如测试环境: 17 | 18 | - 假设只需要对单一平台配置,可以 package.json 中配置,在 HBuilderX 的运行和发行菜单里会多一个出来。[https://uniapp.dcloud.io/collocation/package](https://uniapp.dcloud.io/collocation/package) 19 | - 如果是针对所有平台配置,可以在 vue-config.js 中配置。[https://uniapp.dcloud.io/collocation/vue-config](https://uniapp.dcloud.io/collocation/vue-config) 20 | 21 | ### 注意 22 | * uni-app x不支持自定义环境变量。 23 | 24 | **快捷代码块** 25 | 26 | HBuilderX 中敲入代码块 `uEnvDev`、`uEnvProd` 可以快速生成对应 `development`、`production` 的运行环境判定代码。 27 | 28 | ```javascript 29 | // uEnvDev 30 | if (process.env.NODE_ENV === 'development') { 31 | // TODO 32 | } 33 | // uEnvProd 34 | if (process.env.NODE_ENV === 'production') { 35 | // TODO 36 | } 37 | ``` 38 | 39 | ## 判断平台 40 | 41 | 平台判断有 2 种场景,一种是在编译期判断,一种是在运行期判断。 42 | 43 | - 编译期判断 44 | 编译期判断,即条件编译,不同平台在编译出包后已经是不同的代码。详见:[条件编译](/tutorial/platform.md) 45 | 46 | ```javascript 47 | // #ifdef H5 48 | alert('只有h5平台才有alert方法'); 49 | // #endif 50 | ``` 51 | 52 | 如上代码只会编译到 H5 的发行包里,其他平台的包不会包含如上代码。 53 | 54 | - 运行期判断 55 | 运行期判断是指代码已经打入包中,仍然需要在运行期判断平台,此时可使用 `uni.getSystemInfoSync().platform` 判断客户端环境是 Android、iOS 还是小程序开发工具(在百度小程序开发工具、微信小程序开发工具、支付宝小程序开发工具中使用 `uni.getSystemInfoSync().platform` 返回值均为 devtools)。 56 | 57 | ```javascript 58 | switch (uni.getSystemInfoSync().platform) { 59 | case 'android': 60 | console.log('运行Android上'); 61 | break; 62 | case 'ios': 63 | console.log('运行iOS上'); 64 | break; 65 | default: 66 | console.log('运行在开发者工具上'); 67 | break; 68 | } 69 | ``` 70 | 71 | 如有必要,也可以在条件编译里自己定义一个变量,赋不同值。在后续运行代码中动态判断环境。 72 | 73 | ## 其他环境变量 74 | 75 | 其他环境变量的定义方式参考 [环境变量](/tutorial/env)。 76 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "unidocs-zh", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "directories": { 7 | "doc": "docs" 8 | }, 9 | "scripts": { 10 | "dev": "vuepress dev docs", 11 | "build": "node --max_old_space_size=4096 ./node_modules/vuepress/cli.js build docs --no-cache", 12 | "build-lite": "cross-env DOCS_LITE=true node --max_old_space_size=4096 ./node_modules/vuepress/cli.js build docs-lite --no-cache", 13 | "check-md":"vuepress check-md2 docs" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/dcloudio/unidoc-zh.git" 18 | }, 19 | "keywords": [], 20 | "author": "", 21 | "license": "ISC", 22 | "bugs": { 23 | "url": "https://github.com/dcloudio/unidoc-zh/issues" 24 | }, 25 | "homepage": "https://github.com/dcloudio/unidoc-zh#readme", 26 | "devDependencies": { 27 | "cross-env": "^7.0.3", 28 | "dom-serializer": "^2.0.0", 29 | "fs-extra": "^10.0.0", 30 | "glob": "^7.1.7", 31 | "htmlparser2": "^9.0.0" 32 | }, 33 | "dependencies": { 34 | "vuepress": "1.9.9", 35 | "vuepress-theme-uniapp-official": "^1.4.35" 36 | }, 37 | "resolutions": { 38 | "terser-webpack-plugin": "1.4.6", 39 | "markdown-it": "< 14" 40 | } 41 | } 42 | --------------------------------------------------------------------------------