├── .github └── workflows │ └── nodejs.yml ├── .gitignore ├── LICENSE ├── README.md ├── _config.yml ├── deploy.sh ├── package.json ├── program-docs ├── docs │ ├── .vuepress │ │ ├── config.js │ │ ├── enhanceApp.js │ │ ├── plugins │ │ │ ├── code-pre-wapper.js │ │ │ ├── container.js │ │ │ ├── gen-search.js │ │ │ ├── make-sitemap.js │ │ │ ├── md-loader.js │ │ │ └── router.js │ │ ├── templates │ │ │ ├── dev.html │ │ │ └── ssr.html │ │ ├── theme │ │ │ ├── assets │ │ │ │ ├── images │ │ │ │ │ ├── arrow-relative.png │ │ │ │ │ ├── arrow.png │ │ │ │ │ ├── back-to-top.png │ │ │ │ │ ├── copy-active.png │ │ │ │ │ ├── copy.png │ │ │ │ │ ├── edit-active.png │ │ │ │ │ ├── edit.png │ │ │ │ │ ├── feedback.png │ │ │ │ │ ├── head-menu-mobile.png │ │ │ │ │ ├── logo-mobile.png │ │ │ │ │ ├── logo.png │ │ │ │ │ ├── logo_docs.png │ │ │ │ │ ├── mobile-close.png │ │ │ │ │ ├── mobile-select.png │ │ │ │ │ ├── next.png │ │ │ │ │ ├── prev.png │ │ │ │ │ ├── qrcode-logo.png │ │ │ │ │ ├── search-icon-mobile.png │ │ │ │ │ ├── search-icon.png │ │ │ │ │ ├── status.png │ │ │ │ │ ├── title-bg.png │ │ │ │ │ ├── tool-hover.png │ │ │ │ │ ├── tool.png │ │ │ │ │ └── webview.png │ │ │ │ └── less │ │ │ │ │ ├── common │ │ │ │ │ ├── code-tab.less │ │ │ │ │ ├── color.less │ │ │ │ │ ├── common.less │ │ │ │ │ ├── custom.css │ │ │ │ │ ├── global-menu.less │ │ │ │ │ ├── params.less │ │ │ │ │ ├── plugin-container.less │ │ │ │ │ ├── qr-code.less │ │ │ │ │ └── table.less │ │ │ │ │ └── components │ │ │ │ │ ├── article.less │ │ │ │ │ ├── bottom-nav.less │ │ │ │ │ ├── footer.less │ │ │ │ │ ├── header.less │ │ │ │ │ ├── mobile-head-nav.less │ │ │ │ │ ├── relative-link.less │ │ │ │ │ ├── search-box.less │ │ │ │ │ ├── sidebar-tree.less │ │ │ │ │ ├── sidebar.less │ │ │ │ │ └── sub-nav.less │ │ │ ├── components │ │ │ │ ├── Article.vue │ │ │ │ ├── BackToTop.vue │ │ │ │ ├── BottomNav.vue │ │ │ │ ├── Footer.vue │ │ │ │ ├── GlobalMenu.vue │ │ │ │ ├── Header.vue │ │ │ │ ├── MobileHeadNav.vue │ │ │ │ ├── RelativeLink.vue │ │ │ │ ├── Sidebar.vue │ │ │ │ ├── SidebarTree.vue │ │ │ │ ├── SubNav.vue │ │ │ │ ├── WebSimulator.vue │ │ │ │ └── search │ │ │ │ │ ├── SearchBox.vue │ │ │ │ │ └── SearchSug.vue │ │ │ ├── global-components │ │ │ │ ├── CodeTab.vue │ │ │ │ ├── CodeTabContent.vue │ │ │ │ ├── CodeTabIcon.vue │ │ │ │ ├── OpenIde.vue │ │ │ │ └── QRCode.vue │ │ │ ├── layouts │ │ │ │ ├── 404.vue │ │ │ │ └── Layout.vue │ │ │ └── utils │ │ │ │ ├── api.js │ │ │ │ ├── get-device.js │ │ │ │ ├── get-init-data.js │ │ │ │ ├── link-loader.js │ │ │ │ ├── report.js │ │ │ │ └── request.js │ │ └── utils │ │ │ ├── constant.js │ │ │ ├── init-url.js │ │ │ ├── link-filter.js │ │ │ ├── nav-loader.js │ │ │ └── tools.js │ ├── data │ │ ├── concept.md │ │ ├── concept_conversion.md │ │ ├── concept_retain.md │ │ ├── concept_source.md │ │ ├── concept_survey.md │ │ ├── concept_useanalysis.md │ │ ├── concept_useranalysis.md │ │ ├── custom.md │ │ ├── host_scene.md │ │ ├── performance-point.md │ │ ├── scene.md │ │ ├── target_active.md │ │ ├── target_data.md │ │ ├── target_habit.md │ │ ├── target_page.md │ │ ├── target_retain.md │ │ ├── target_user.md │ │ └── visualization.md │ ├── design │ │ ├── component │ │ │ ├── actionsheet.md │ │ │ ├── bottomtab.md │ │ │ ├── button.md │ │ │ ├── dialog.md │ │ │ ├── empty_state.md │ │ │ ├── guide_add.md │ │ │ ├── input.md │ │ │ ├── list.md │ │ │ ├── selection.md │ │ │ ├── showModal.md │ │ │ ├── toast.md │ │ │ ├── topnav.md │ │ │ └── toptab.md │ │ ├── foundation │ │ │ ├── detailPages.md │ │ │ ├── layout.md │ │ │ ├── logo.md │ │ │ ├── pic.md │ │ │ ├── typography.md │ │ │ └── writing.md │ │ ├── overview │ │ │ └── introduction.md │ │ ├── principle │ │ │ ├── easytouse.md │ │ │ ├── hierarchical.md │ │ │ └── innovation.md │ │ ├── resource │ │ │ ├── animationVideo.md │ │ │ ├── checklist.md │ │ │ ├── lottie.md │ │ │ └── uikit.md │ │ ├── story │ │ │ ├── arzoo.md │ │ │ └── light_up.md │ │ └── whitebook │ │ │ ├── how_to_guide_add.md │ │ │ ├── how_to_improve_browsing_experience.md │ │ │ └── how_to_login.md │ ├── develop │ │ ├── api │ │ │ ├── ai │ │ │ │ ├── ai.md │ │ │ │ ├── audio.md │ │ │ │ ├── audit.md │ │ │ │ ├── classify_swan-ai-advancedGeneralIdentify.md │ │ │ │ ├── classify_swan-ai-animalClassify.md │ │ │ │ ├── classify_swan-ai-carClassify.md │ │ │ │ ├── classify_swan-ai-dishClassify.md │ │ │ │ ├── classify_swan-ai-logoClassify.md │ │ │ │ ├── classify_swan-ai-objectDetectIdentify.md │ │ │ │ ├── classify_swan-ai-plantClassify.md │ │ │ │ ├── face_swan-ai-faceDetect.md │ │ │ │ ├── face_swan-ai-faceLivenessSessioncode.md │ │ │ │ ├── face_swan-ai-faceMatch.md │ │ │ │ ├── face_swan-ai-facePersonIdmatch.md │ │ │ │ ├── face_swan-ai-facePersonVerify.md │ │ │ │ ├── face_swan-ai-faceSearch.md │ │ │ │ ├── ocr_swan-ai-ocrBankCard.md │ │ │ │ ├── ocr_swan-ai-ocrDrivingLicense.md │ │ │ │ ├── ocr_swan-ai-ocrIdCard.md │ │ │ │ ├── ocr_swan-ai-ocrVehicleLicense.md │ │ │ │ ├── text_swan-ai-textReview.md │ │ │ │ ├── voice_VoiceRecognizer-cancel.md │ │ │ │ ├── voice_VoiceRecognizer-onError.md │ │ │ │ ├── voice_VoiceRecognizer-onFinish.md │ │ │ │ ├── voice_VoiceRecognizer-onRecognize.md │ │ │ │ ├── voice_VoiceRecognizer-onStart.md │ │ │ │ ├── voice_VoiceRecognizer-start.md │ │ │ │ ├── voice_VoiceRecognizer-stop.md │ │ │ │ ├── voice_swan-VoiceRecognizer.md │ │ │ │ ├── voice_swan-ai-getVoiceRecognizer.md │ │ │ │ └── word.md │ │ │ ├── apilist.md │ │ │ ├── base_app_event │ │ │ │ ├── swan-offAppHide.md │ │ │ │ ├── swan-offAppShow.md │ │ │ │ ├── swan-offError.md │ │ │ │ ├── swan-offPageNotFound.md │ │ │ │ ├── swan-onAppHide.md │ │ │ │ ├── swan-onAppShow.md │ │ │ │ ├── swan-onError.md │ │ │ │ └── swan-onPageNotFound.md │ │ │ ├── canvas_color.md │ │ │ ├── cardticket.md │ │ │ ├── cardticket_new.md │ │ │ ├── device_sys │ │ │ │ ├── hostlist.md │ │ │ │ ├── onmemory.md │ │ │ │ ├── swan-addEventOnCalendar.md │ │ │ │ ├── swan-addPhoneContact.md │ │ │ │ ├── swan-canIUse.md │ │ │ │ ├── swan-deleteEventOnCalendar.md │ │ │ │ ├── swan-getBatteryInfo.md │ │ │ │ ├── swan-getBatteryInfoSync.md │ │ │ │ ├── swan-getClipboardData.md │ │ │ │ ├── swan-getEnvInfoSync.md │ │ │ │ ├── swan-getNetworkType.md │ │ │ │ ├── swan-getScreenBrightness.md │ │ │ │ ├── swan-getSystemInfo.md │ │ │ │ ├── swan-getSystemInfoSync.md │ │ │ │ ├── swan-makePhoneCall.md │ │ │ │ ├── swan-onAccelerometerChange.md │ │ │ │ ├── swan-onCompassChange.md │ │ │ │ ├── swan-onDeviceMotionChange.md │ │ │ │ ├── swan-onNetworkStatusChange.md │ │ │ │ ├── swan-onUserCaptureScreen.md │ │ │ │ ├── swan-scanCode.md │ │ │ │ ├── swan-setClipboardData.md │ │ │ │ ├── swan-setKeepScreenOn.md │ │ │ │ ├── swan-setScreenBrightness.md │ │ │ │ ├── swan-startAccelerometer.md │ │ │ │ ├── swan-startCompass.md │ │ │ │ ├── swan-startDeviceMotionListening.md │ │ │ │ ├── swan-stopAccelerometer.md │ │ │ │ ├── swan-stopCompass.md │ │ │ │ ├── swan-stopDeviceMotionListening.md │ │ │ │ ├── swan-vibrateLong.md │ │ │ │ └── swan-vibrateShort.md │ │ │ ├── errorcode.md │ │ │ ├── file │ │ │ │ ├── FileSystemManager-access.md │ │ │ │ ├── FileSystemManager-accessSync.md │ │ │ │ ├── FileSystemManager-appendFile.md │ │ │ │ ├── FileSystemManager-appendFileSync.md │ │ │ │ ├── FileSystemManager-copyFile.md │ │ │ │ ├── FileSystemManager-copyFileSync.md │ │ │ │ ├── FileSystemManager-getFileInfo.md │ │ │ │ ├── FileSystemManager-getSavedFileList.md │ │ │ │ ├── FileSystemManager-mkdir.md │ │ │ │ ├── FileSystemManager-mkdirSync.md │ │ │ │ ├── FileSystemManager-readFile.md │ │ │ │ ├── FileSystemManager-readFileSync.md │ │ │ │ ├── FileSystemManager-readdir.md │ │ │ │ ├── FileSystemManager-readdirSync.md │ │ │ │ ├── FileSystemManager-removeSavedFile.md │ │ │ │ ├── FileSystemManager-rename.md │ │ │ │ ├── FileSystemManager-renameSync.md │ │ │ │ ├── FileSystemManager-rmdir.md │ │ │ │ ├── FileSystemManager-rmdirSync.md │ │ │ │ ├── FileSystemManager-saveFile.md │ │ │ │ ├── FileSystemManager-saveFileSync.md │ │ │ │ ├── FileSystemManager-stat.md │ │ │ │ ├── FileSystemManager-statSync.md │ │ │ │ ├── FileSystemManager-unlink.md │ │ │ │ ├── FileSystemManager-unlinkSync.md │ │ │ │ ├── FileSystemManager-unzip.md │ │ │ │ ├── FileSystemManager-writeFile.md │ │ │ │ ├── FileSystemManager-writeFileSync.md │ │ │ │ ├── FileSystemManager.md │ │ │ │ ├── open.md │ │ │ │ ├── remove.md │ │ │ │ ├── save_swan-getFileInfo.md │ │ │ │ ├── save_swan-getSavedFileInfo.md │ │ │ │ ├── save_swan-getSavedFileList.md │ │ │ │ ├── save_swan-saveFile.md │ │ │ │ └── swan-getFileSystemManager.md │ │ │ ├── getextconfig │ │ │ │ ├── swan-getExtConfig.md │ │ │ │ └── swan-getExtConfigSync.md │ │ │ ├── location │ │ │ │ ├── MapContext-getCenterLocation.md │ │ │ │ ├── MapContext-getRegion.md │ │ │ │ ├── MapContext-getScale.md │ │ │ │ ├── MapContext-includePoints.md │ │ │ │ ├── MapContext-moveToLocation.md │ │ │ │ ├── MapContext-translateMarker.md │ │ │ │ ├── MapContext.md │ │ │ │ ├── swan-chooseLocation.md │ │ │ │ ├── swan-createMapContext.md │ │ │ │ ├── swan-getLocation.md │ │ │ │ ├── swan-offLocationChange.md │ │ │ │ ├── swan-onLocationChange.md │ │ │ │ ├── swan-openLocation.md │ │ │ │ ├── swan-startLocationUpdate.md │ │ │ │ └── swan-stopLocationUpdate.md │ │ │ ├── media │ │ │ │ ├── animationvideo_AnimationVideo-pause.md │ │ │ │ ├── animationvideo_AnimationVideo-play.md │ │ │ │ ├── animationvideo_AnimationVideo-seek.md │ │ │ │ ├── animationvideo_AnimationVideo.md │ │ │ │ ├── animationvideo_swan-createAnimationVideo.md │ │ │ │ ├── arcameracontext_ARCameraContext-reset.md │ │ │ │ ├── arcameracontext_ARCameraContext-startRecord.md │ │ │ │ ├── arcameracontext_ARCameraContext-stopRecord.md │ │ │ │ ├── arcameracontext_ARCameraContext-takePhoto.md │ │ │ │ ├── arcameracontext_ARCameraContext.md │ │ │ │ ├── arcameracontext_swan-createARCameraContext.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onCanplay.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onEnded.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onError.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onNext.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onPause.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onPlay.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onPrev.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onSeeked.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onSeeking.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onStop.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onTimeUpdate.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-onWaiting.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-pause.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-play.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-seek.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager-stop.md │ │ │ │ ├── backgroundaudiomanager_BackgroundAudioManager.md │ │ │ │ ├── backgroundaudiomanager_swan-getBackgroundAudioManager.md │ │ │ │ ├── cameracontext_CameraContext-startRecord.md │ │ │ │ ├── cameracontext_CameraContext-stopRecord.md │ │ │ │ ├── cameracontext_CameraContext-takePhoto.md │ │ │ │ ├── cameracontext_CameraContext.md │ │ │ │ ├── cameracontext_swan-createCameraContext.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-destroy.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-offCanplay.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-offEnded.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-offError.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-offPause.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-offPlay.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-offSeeked.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-offSeeking.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-offStop.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-offTimeUpdate.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-offWaiting.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-onCanplay.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-onEnded.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-onError.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-onPause.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-onPlay.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-onSeeked.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-onSeeking.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-onStop.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-onTimeUpdate.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-onWaiting.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-pause.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-play.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-seek.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext-stop.md │ │ │ │ ├── createinneraudiocontext_InnerAudioContext.md │ │ │ │ ├── createinneraudiocontext_swan-createInnerAudioContext.md │ │ │ │ ├── createinneraudiocontext_swan-setInnerAudioOption.md │ │ │ │ ├── image_swan-chooseAlbum.md │ │ │ │ ├── image_swan-chooseImage.md │ │ │ │ ├── image_swan-compressImage.md │ │ │ │ ├── image_swan-getImageInfo.md │ │ │ │ ├── image_swan-previewImage.md │ │ │ │ ├── image_swan-saveImageToPhotosAlbum.md │ │ │ │ ├── liveplayercontext_LivePlayerContext-exitFullScreen.md │ │ │ │ ├── liveplayercontext_LivePlayerContext-mute.md │ │ │ │ ├── liveplayercontext_LivePlayerContext-pause.md │ │ │ │ ├── liveplayercontext_LivePlayerContext-play.md │ │ │ │ ├── liveplayercontext_LivePlayerContext-requestFullScreen.md │ │ │ │ ├── liveplayercontext_LivePlayerContext-resume.md │ │ │ │ ├── liveplayercontext_LivePlayerContext-stop.md │ │ │ │ ├── liveplayercontext_LivePlayerContext.md │ │ │ │ ├── liveplayercontext_swan-createLivePlayerContext.md │ │ │ │ ├── menu_info.md │ │ │ │ ├── recorder_RecorderManager-onError.md │ │ │ │ ├── recorder_RecorderManager-onInterruptionBegin.md │ │ │ │ ├── recorder_RecorderManager-onInterruptionEnd.md │ │ │ │ ├── recorder_RecorderManager-onPause.md │ │ │ │ ├── recorder_RecorderManager-onResume.md │ │ │ │ ├── recorder_RecorderManager-onStart.md │ │ │ │ ├── recorder_RecorderManager-onStop.md │ │ │ │ ├── recorder_RecorderManager-pause.md │ │ │ │ ├── recorder_RecorderManager-resume.md │ │ │ │ ├── recorder_RecorderManager-start.md │ │ │ │ ├── recorder_RecorderManager-stop.md │ │ │ │ ├── recorder_RecorderManager.md │ │ │ │ ├── recorder_swan-getAvailableAudioSources.md │ │ │ │ ├── recorder_swan-getRecorderManager.md │ │ │ │ ├── video_swan-chooseVideo.md │ │ │ │ ├── video_swan-saveVideoToPhotosAlbum.md │ │ │ │ ├── videocontext_VideoContext-exitFullScreen.md │ │ │ │ ├── videocontext_VideoContext-hideStatusBar.md │ │ │ │ ├── videocontext_VideoContext-pause.md │ │ │ │ ├── videocontext_VideoContext-play.md │ │ │ │ ├── videocontext_VideoContext-playbackRate.md │ │ │ │ ├── videocontext_VideoContext-requestFullScreen.md │ │ │ │ ├── videocontext_VideoContext-seek.md │ │ │ │ ├── videocontext_VideoContext-sendDanmu.md │ │ │ │ ├── videocontext_VideoContext-showStatusBar.md │ │ │ │ ├── videocontext_VideoContext-stop.md │ │ │ │ ├── videocontext_VideoContext.md │ │ │ │ └── videocontext_swan-createVideoContext.md │ │ │ ├── net │ │ │ │ ├── downloadFile.md │ │ │ │ ├── downloadTask-abort.md │ │ │ │ ├── downloadTask-onProgressUpdate.md │ │ │ │ ├── downloadTask.md │ │ │ │ ├── net_rule.md │ │ │ │ ├── request.md │ │ │ │ ├── requestTask-abort.md │ │ │ │ ├── requestTask.md │ │ │ │ ├── uploadTask-abort.md │ │ │ │ ├── uploadTask-onProgressUpdate.md │ │ │ │ ├── uploadTask.md │ │ │ │ ├── uploadfile.md │ │ │ │ ├── websocket.md │ │ │ │ ├── websocket_SocketTask-close.md │ │ │ │ ├── websocket_SocketTask-onClose.md │ │ │ │ ├── websocket_SocketTask-onError.md │ │ │ │ ├── websocket_SocketTask-onMessage.md │ │ │ │ ├── websocket_SocketTask-onOpen.md │ │ │ │ ├── websocket_SocketTask-send.md │ │ │ │ ├── websocket_SocketTask.md │ │ │ │ ├── websocket_swan-closeSocket.md │ │ │ │ ├── websocket_swan-onSocketClose.md │ │ │ │ ├── websocket_swan-onSocketError.md │ │ │ │ ├── websocket_swan-onSocketMessage.md │ │ │ │ ├── websocket_swan-onSocketOpen.md │ │ │ │ └── websocket_swan-sendSocketMessage.md │ │ │ ├── open │ │ │ │ ├── UpdateManager-applyUpdate.md │ │ │ │ ├── UpdateManager-onCheckForUpdate.md │ │ │ │ ├── UpdateManager-onUpdateFailed.md │ │ │ │ ├── UpdateManager-onUpdateReady.md │ │ │ │ ├── UpdateManager.md │ │ │ │ ├── authorize_list.md │ │ │ │ ├── authorize_set.md │ │ │ │ ├── authorize_swan-authorize.md │ │ │ │ ├── chooseaddress_swan-chooseAddress.md │ │ │ │ ├── community_swan-closeCommunityEditor.md │ │ │ │ ├── community_swan-openCommunityEditor.md │ │ │ │ ├── log.md │ │ │ │ ├── log_Session-Key.md │ │ │ │ ├── log_getunionid.md │ │ │ │ ├── log_swan-checkSession.md │ │ │ │ ├── log_swan-isLoginSync.md │ │ │ │ ├── log_swan-login.md │ │ │ │ ├── log_userdata.md │ │ │ │ ├── payment_swan-requestPolymerPayment.md │ │ │ │ ├── replyeditor_swan-closeReplyEditor.md │ │ │ │ ├── replyeditor_swan-openReplyEditor.md │ │ │ │ ├── setting_swan-getSetting.md │ │ │ │ ├── setting_swan-openSetting.md │ │ │ │ ├── share_onShareAppMessage.md │ │ │ │ ├── share_swan-openShare.md │ │ │ │ ├── share_swan-shareFile.md │ │ │ │ ├── share_web-view.md │ │ │ │ ├── swan-chooseInvoiceTitle.md │ │ │ │ ├── swan-getSystemRiskInfo.md │ │ │ │ ├── swan-getUpdateManager.md │ │ │ │ ├── swan-loadSubPackage.md │ │ │ │ ├── swan-navigateBackSmartProgram.md │ │ │ │ ├── swan-navigateToSmartProgram.md │ │ │ │ ├── swan-reportAnalytics.md │ │ │ │ ├── swan-setDocumentTitle.md │ │ │ │ ├── swan-setEnableDebug.md │ │ │ │ ├── swan-setMetaDescription.md │ │ │ │ ├── swan-setMetaKeywords.md │ │ │ │ ├── swan-setPageInfo.md │ │ │ │ ├── swan-subscribeService.md │ │ │ │ ├── timer_clearInterval.md │ │ │ │ ├── timer_clearTimeout.md │ │ │ │ ├── timer_setInterval.md │ │ │ │ ├── timer_setTimeout.md │ │ │ │ ├── userinfo_signature.md │ │ │ │ ├── userinfo_swan-getSwanId.md │ │ │ │ ├── userinfo_swan-getUserInfo.md │ │ │ │ └── userinfo_swanid.md │ │ │ ├── order.md │ │ │ ├── show │ │ │ │ ├── background_swan-setBackgroundColor.md │ │ │ │ ├── background_swan-setBackgroundTextStyle.md │ │ │ │ ├── canvas.md │ │ │ │ ├── canvas_CanvasContext-addColorStop.md │ │ │ │ ├── canvas_CanvasContext-arc.md │ │ │ │ ├── canvas_CanvasContext-beginPath.md │ │ │ │ ├── canvas_CanvasContext-bezierCurveTo.md │ │ │ │ ├── canvas_CanvasContext-clearRect.md │ │ │ │ ├── canvas_CanvasContext-clip.md │ │ │ │ ├── canvas_CanvasContext-closePath.md │ │ │ │ ├── canvas_CanvasContext-createCircularGradient.md │ │ │ │ ├── canvas_CanvasContext-createLinearGradient.md │ │ │ │ ├── canvas_CanvasContext-draw.md │ │ │ │ ├── canvas_CanvasContext-drawImage.md │ │ │ │ ├── canvas_CanvasContext-fill.md │ │ │ │ ├── canvas_CanvasContext-fillRect.md │ │ │ │ ├── canvas_CanvasContext-fillText.md │ │ │ │ ├── canvas_CanvasContext-font.md │ │ │ │ ├── canvas_CanvasContext-lineTo.md │ │ │ │ ├── canvas_CanvasContext-measureText.md │ │ │ │ ├── canvas_CanvasContext-moveTo.md │ │ │ │ ├── canvas_CanvasContext-quadraticCurveTo.md │ │ │ │ ├── canvas_CanvasContext-rect.md │ │ │ │ ├── canvas_CanvasContext-restore.md │ │ │ │ ├── canvas_CanvasContext-rotate.md │ │ │ │ ├── canvas_CanvasContext-save.md │ │ │ │ ├── canvas_CanvasContext-scale.md │ │ │ │ ├── canvas_CanvasContext-setFillStyle.md │ │ │ │ ├── canvas_CanvasContext-setFontSize.md │ │ │ │ ├── canvas_CanvasContext-setGlobalAlpha.md │ │ │ │ ├── canvas_CanvasContext-setLineCap.md │ │ │ │ ├── canvas_CanvasContext-setLineDash.md │ │ │ │ ├── canvas_CanvasContext-setLineDashOffset.md │ │ │ │ ├── canvas_CanvasContext-setLineJoin.md │ │ │ │ ├── canvas_CanvasContext-setLineWidth.md │ │ │ │ ├── canvas_CanvasContext-setMiterLimit.md │ │ │ │ ├── canvas_CanvasContext-setShadow.md │ │ │ │ ├── canvas_CanvasContext-setStrokeStyle.md │ │ │ │ ├── canvas_CanvasContext-setTextAlign.md │ │ │ │ ├── canvas_CanvasContext-setTextBaseline.md │ │ │ │ ├── canvas_CanvasContext-setTransform.md │ │ │ │ ├── canvas_CanvasContext-stroke.md │ │ │ │ ├── canvas_CanvasContext-strokeRect.md │ │ │ │ ├── canvas_CanvasContext-strokeText.md │ │ │ │ ├── canvas_CanvasContext-transform.md │ │ │ │ ├── canvas_CanvasContext-translate.md │ │ │ │ ├── canvas_CanvasContext.md │ │ │ │ ├── canvas_CanvasGradient-addColorStop.md │ │ │ │ ├── canvas_CanvasGradient.md │ │ │ │ ├── canvas_swan-canvasGetImageData.md │ │ │ │ ├── canvas_swan-canvasPutImageData.md │ │ │ │ ├── canvas_swan-canvasToTempFilePath.md │ │ │ │ ├── canvas_swan-createCanvasContext.md │ │ │ │ ├── createanimation_Animation-matrix.md │ │ │ │ ├── createanimation_Animation-matrix3d.md │ │ │ │ ├── createanimation_Animation-rotate.md │ │ │ │ ├── createanimation_Animation-rotate3d.md │ │ │ │ ├── createanimation_Animation-rotateX.md │ │ │ │ ├── createanimation_Animation-rotateY.md │ │ │ │ ├── createanimation_Animation-rotateZ.md │ │ │ │ ├── createanimation_Animation-scale.md │ │ │ │ ├── createanimation_Animation-scale3d.md │ │ │ │ ├── createanimation_Animation-scaleX.md │ │ │ │ ├── createanimation_Animation-scaleY.md │ │ │ │ ├── createanimation_Animation-scaleZ.md │ │ │ │ ├── createanimation_Animation-skew.md │ │ │ │ ├── createanimation_Animation-skewX.md │ │ │ │ ├── createanimation_Animation-skewY.md │ │ │ │ ├── createanimation_Animation-translate.md │ │ │ │ ├── createanimation_Animation-translate3d.md │ │ │ │ ├── createanimation_Animation-translateX.md │ │ │ │ ├── createanimation_Animation-translateY.md │ │ │ │ ├── createanimation_Animation-translateZ.md │ │ │ │ ├── createanimation_Animation.md │ │ │ │ ├── createanimation_Animationn-scaleZ.md │ │ │ │ ├── createanimation_swan-createAnimation.md │ │ │ │ ├── custom_component.md │ │ │ │ ├── menu_info.md │ │ │ │ ├── nacomponent.md │ │ │ │ ├── navigationbar_swan-hideNavigationBarLoading.md │ │ │ │ ├── navigationbar_swan-setNavigationBarColor.md │ │ │ │ ├── navigationbar_swan-setNavigationBarTitle.md │ │ │ │ ├── navigationbar_swan-showNavigationBarLoading.md │ │ │ │ ├── pagescrollto_swan-pageScrollTo.md │ │ │ │ ├── pull_onPullDownRefresh.md │ │ │ │ ├── pull_swan-startPullDownRefresh.md │ │ │ │ ├── pull_swan-stopPullDownRefresh.md │ │ │ │ ├── query_IntersectionObserver-disconnect.md │ │ │ │ ├── query_IntersectionObserver-observe.md │ │ │ │ ├── query_IntersectionObserver-relativeTo.md │ │ │ │ ├── query_IntersectionObserver-relativeToViewport.md │ │ │ │ ├── query_IntersectionObserver.md │ │ │ │ ├── query_NodesRef-boundingClientRect.md │ │ │ │ ├── query_NodesRef-fields.md │ │ │ │ ├── query_NodesRef-scrollOffset.md │ │ │ │ ├── query_NodesRef.md │ │ │ │ ├── query_SelectorQuery-exec.md │ │ │ │ ├── query_SelectorQuery-in.md │ │ │ │ ├── query_SelectorQuery-select.md │ │ │ │ ├── query_SelectorQuery-selectAll.md │ │ │ │ ├── query_SelectorQuery-selectViewport.md │ │ │ │ ├── query_SelectorQuery.md │ │ │ │ ├── query_swan-createIntersectionObserver.md │ │ │ │ ├── query_swan-createSelectorQuery.md │ │ │ │ ├── tab_swan-navigateBack.md │ │ │ │ ├── tab_swan-navigateTo.md │ │ │ │ ├── tab_swan-reLaunch.md │ │ │ │ ├── tab_swan-redirectTo.md │ │ │ │ ├── tab_swan-switchTab.md │ │ │ │ ├── tabbar_swan-hideTabBar.md │ │ │ │ ├── tabbar_swan-hideTabBarRedDot.md │ │ │ │ ├── tabbar_swan-removeTabBarBadge.md │ │ │ │ ├── tabbar_swan-setTabBarBadge.md │ │ │ │ ├── tabbar_swan-setTabBarItem.md │ │ │ │ ├── tabbar_swan-setTabBarStyle.md │ │ │ │ ├── tabbar_swan-showTabBar.md │ │ │ │ ├── tabbar_swan-showTabBarRedDot.md │ │ │ │ ├── toast_swan-hideLoading.md │ │ │ │ ├── toast_swan-hideToast.md │ │ │ │ ├── toast_swan-showActionSheet.md │ │ │ │ ├── toast_swan-showLoading.md │ │ │ │ ├── toast_swan-showModal.md │ │ │ │ └── toast_swan-showToast.md │ │ │ ├── storage │ │ │ │ ├── remove_swan-clearStorage.md │ │ │ │ ├── remove_swan-clearStorageSync.md │ │ │ │ ├── remove_swan-removeStorage.md │ │ │ │ ├── remove_swan-removeStorageSync.md │ │ │ │ ├── save_process.md │ │ │ │ ├── save_swan-getStorage.md │ │ │ │ ├── save_swan-getStorageInfo.md │ │ │ │ ├── save_swan-getStorageInfoSync.md │ │ │ │ ├── save_swan-getStorageSync.md │ │ │ │ ├── save_swan-setStorage.md │ │ │ │ └── save_swan-setStorageSync.md │ │ │ └── url_query │ │ │ │ ├── onURLQueryChange.md │ │ │ │ ├── swan-getURLQuery.md │ │ │ │ └── swan-setURLQuery.md │ │ ├── appendix │ │ │ ├── apifaq.md │ │ │ ├── canvas_color.md │ │ │ ├── confaq.md │ │ │ ├── error.md │ │ │ ├── framworkfaq.md │ │ │ ├── frequently.md │ │ │ ├── toolfaq.md │ │ │ └── webfaq.md │ │ ├── cloud │ │ │ ├── cloud_database │ │ │ │ ├── collection.md │ │ │ │ ├── collection_add.md │ │ │ │ ├── collection_count.md │ │ │ │ ├── collection_doc.md │ │ │ │ ├── collection_field.md │ │ │ │ ├── collection_get.md │ │ │ │ ├── collection_limit.md │ │ │ │ ├── collection_orderBy.md │ │ │ │ ├── collection_skip.md │ │ │ │ ├── collection_where.md │ │ │ │ ├── command.md │ │ │ │ ├── command_and.md │ │ │ │ ├── command_eq.md │ │ │ │ ├── command_gt.md │ │ │ │ ├── command_gte.md │ │ │ │ ├── command_in.md │ │ │ │ ├── command_inc.md │ │ │ │ ├── command_lt.md │ │ │ │ ├── command_lte.md │ │ │ │ ├── command_mul.md │ │ │ │ ├── command_neq.md │ │ │ │ ├── command_nin.md │ │ │ │ ├── command_or.md │ │ │ │ ├── command_pop.md │ │ │ │ ├── command_push.md │ │ │ │ ├── command_remove.md │ │ │ │ ├── command_set.md │ │ │ │ ├── command_shift.md │ │ │ │ ├── command_unshift.md │ │ │ │ ├── database.md │ │ │ │ ├── doc.md │ │ │ │ ├── doc_get.md │ │ │ │ ├── doc_set.md │ │ │ │ └── doc_update.md │ │ │ ├── cloud_deleteFile.md │ │ │ ├── cloud_downloadFile.md │ │ │ ├── cloud_essentials.md │ │ │ ├── cloud_essentials_function.md │ │ │ ├── cloud_essentials_storage.md │ │ │ ├── cloud_essentials_user.md │ │ │ ├── cloud_functions.md │ │ │ ├── cloud_info.md │ │ │ ├── cloud_init.md │ │ │ ├── cloud_start.md │ │ │ ├── cloud_uploadFile.md │ │ │ ├── console.md │ │ │ ├── console_data.md │ │ │ ├── console_function.md │ │ │ ├── console_storage.md │ │ │ ├── guide │ │ │ │ ├── editor.md │ │ │ │ ├── guide.md │ │ │ │ ├── guide_databasefaq.md │ │ │ │ ├── guide_dev.md │ │ │ │ ├── guide_function.md │ │ │ │ └── guide_user.md │ │ │ └── server_sdk │ │ │ │ ├── cloud-callFunction.md │ │ │ │ ├── collection.md │ │ │ │ ├── database.md │ │ │ │ ├── document.md │ │ │ │ ├── getSwanContext.md │ │ │ │ ├── init.md │ │ │ │ └── storage.md │ │ ├── component │ │ │ ├── ad.md │ │ │ ├── animation-video.md │ │ │ ├── animation-view-Lottie.md │ │ │ ├── base_animation-view-Lottie.md │ │ │ ├── base_icon.md │ │ │ ├── base_progress.md │ │ │ ├── base_rich-text.md │ │ │ ├── base_text.md │ │ │ ├── canvas.md │ │ │ ├── component.md │ │ │ ├── formlist_button.md │ │ │ ├── formlist_checkbox-group.md │ │ │ ├── formlist_checkbox.md │ │ │ ├── formlist_form.md │ │ │ ├── formlist_input.md │ │ │ ├── formlist_label.md │ │ │ ├── formlist_picker-view-column.md │ │ │ ├── formlist_picker-view.md │ │ │ ├── formlist_picker.md │ │ │ ├── formlist_radio-group.md │ │ │ ├── formlist_radio.md │ │ │ ├── formlist_slider.md │ │ │ ├── formlist_switch.md │ │ │ ├── formlist_textarea.md │ │ │ ├── map.md │ │ │ ├── media_ar-camera.md │ │ │ ├── media_audio.md │ │ │ ├── media_camera.md │ │ │ ├── media_image.md │ │ │ ├── media_live-player.md │ │ │ ├── media_video.md │ │ │ ├── native.md │ │ │ ├── nav.md │ │ │ ├── open.md │ │ │ ├── open_web-view.md │ │ │ ├── tab-item.md │ │ │ ├── tabs.md │ │ │ ├── view_cover-image.md │ │ │ ├── view_cover-view.md │ │ │ ├── view_movable-area.md │ │ │ ├── view_movable-view.md │ │ │ ├── view_scroll-view.md │ │ │ ├── view_swiper-item.md │ │ │ ├── view_swiper.md │ │ │ └── view_view.md │ │ ├── devtools │ │ │ ├── audits.md │ │ │ ├── audits_score.md │ │ │ ├── auto │ │ │ │ ├── automator │ │ │ │ │ ├── connect.md │ │ │ │ │ └── launch.md │ │ │ │ ├── demo.md │ │ │ │ ├── element │ │ │ │ │ ├── $$.md │ │ │ │ │ ├── $.md │ │ │ │ │ ├── attribute.md │ │ │ │ │ ├── innerHTML.md │ │ │ │ │ ├── offset.md │ │ │ │ │ ├── outerHTML.md │ │ │ │ │ ├── outerSwan.md │ │ │ │ │ ├── size.md │ │ │ │ │ ├── style.md │ │ │ │ │ ├── swan.md │ │ │ │ │ ├── tagName.md │ │ │ │ │ ├── tap.md │ │ │ │ │ ├── text.md │ │ │ │ │ └── value.md │ │ │ │ ├── page │ │ │ │ │ ├── $$.md │ │ │ │ │ ├── $.md │ │ │ │ │ ├── data.md │ │ │ │ │ ├── path.md │ │ │ │ │ ├── query.md │ │ │ │ │ ├── size.md │ │ │ │ │ └── waitFor.md │ │ │ │ ├── quick-start.md │ │ │ │ ├── remote.md │ │ │ │ └── smartprogram │ │ │ │ │ ├── callSwanMethod.md │ │ │ │ │ ├── close.md │ │ │ │ │ ├── currentPage.md │ │ │ │ │ ├── disconnect.md │ │ │ │ │ ├── login.md │ │ │ │ │ ├── navigateBack.md │ │ │ │ │ ├── navigateTo.md │ │ │ │ │ ├── pageStack.md │ │ │ │ │ ├── reLaunch.md │ │ │ │ │ ├── redirectTo.md │ │ │ │ │ ├── remote.md │ │ │ │ │ ├── switchTab.md │ │ │ │ │ └── systemInfo.md │ │ │ ├── cloudtext.md │ │ │ ├── code.md │ │ │ ├── commandtool.md │ │ │ ├── complation.md │ │ │ ├── components_panel.md │ │ │ ├── diff.md │ │ │ ├── editor_debug.md │ │ │ ├── editor_file.md │ │ │ ├── editor_git.md │ │ │ ├── editor_rpx.md │ │ │ ├── editor_set.md │ │ │ ├── history.md │ │ │ ├── page_debug.md │ │ │ ├── page_editor.md │ │ │ ├── page_menu.md │ │ │ ├── page_monitor.md │ │ │ ├── page_start.md │ │ │ ├── page_tool.md │ │ │ ├── pre_testtool.md │ │ │ ├── question.md │ │ │ ├── remotedebugging.md │ │ │ ├── remoterelease.md │ │ │ ├── set_edit.md │ │ │ ├── set_outlook.md │ │ │ ├── set_proxy.md │ │ │ ├── set_shortcutkey.md │ │ │ ├── smartappdebug_function_change.md │ │ │ ├── smartappdebug_function_compilation.md │ │ │ ├── smartappdebug_function_monitor.md │ │ │ ├── smartappdebug_function_pre.md │ │ │ ├── smartappdebug_pre.md │ │ │ ├── smartappdebug_tool_App-data-panel.md │ │ │ ├── smartappdebug_tool_Console-panel.md │ │ │ ├── smartappdebug_tool_Network-panel.md │ │ │ ├── smartappdebug_tool_Security-panel.md │ │ │ ├── smartappdebug_tool_Sensors-panel.md │ │ │ ├── smartappdebug_tool_Sources-panel.md │ │ │ ├── smartappdebug_tool_Storage-panel.md │ │ │ ├── smartappdebug_tool_Swan-audits.md │ │ │ ├── smartappdebug_tool_Swan-panel.md │ │ │ ├── source-manager.md │ │ │ ├── uplog_compile.md │ │ │ ├── uplog_tool_beta.md │ │ │ ├── uplog_tool_normal.md │ │ │ └── uplog_tool_rc.md │ │ ├── extended │ │ │ ├── component-content │ │ │ │ ├── commentpublish.md │ │ │ │ ├── concern.md │ │ │ │ ├── follow.md │ │ │ │ └── like.md │ │ │ ├── component │ │ │ │ ├── comment-publish.md │ │ │ │ └── publish.md │ │ │ ├── extendedlist.md │ │ │ ├── lib │ │ │ │ ├── bdparse.md │ │ │ │ ├── smt-md5.md │ │ │ │ ├── smt-mobx.md │ │ │ │ ├── smt-observer.md │ │ │ │ ├── smt-promisify.md │ │ │ │ └── smt-swanx.md │ │ │ ├── template │ │ │ │ ├── content-detail.md │ │ │ │ ├── smt-detail-pages.md │ │ │ │ ├── smt-feed-page.md │ │ │ │ └── smt-status-page.md │ │ │ └── ui_component │ │ │ │ ├── info.md │ │ │ │ ├── smt-feed-item.md │ │ │ │ ├── smt-feed.md │ │ │ │ ├── smt-icon.md │ │ │ │ ├── smt-navigation.md │ │ │ │ ├── smt-page-status.md │ │ │ │ ├── smt-refresh.md │ │ │ │ └── smt-spin.md │ │ ├── extension │ │ │ └── template │ │ │ │ └── content-detail.md │ │ ├── framework │ │ │ ├── app_service.md │ │ │ ├── app_service_aop.md │ │ │ ├── app_service_aopapp-after.md │ │ │ ├── app_service_aoppage-after.md │ │ │ ├── app_service_aopswan-after.md │ │ │ ├── app_service_page.md │ │ │ ├── app_service_page_setData.md │ │ │ ├── app_service_pagecomponent.md │ │ │ ├── app_service_pagedata.md │ │ │ ├── app_service_pagefunction.md │ │ │ ├── app_service_pagelife.md │ │ │ ├── app_service_register.md │ │ │ ├── app_service_registergetapp.md │ │ │ ├── app_service_route.md │ │ │ ├── app_service_routefile.md │ │ │ ├── app_service_routegetCurrentPages.md │ │ │ ├── app_service_routemodule.md │ │ │ ├── app_service_routestyle.md │ │ │ ├── custom-component.md │ │ │ ├── custom-component_behaviors.md │ │ │ ├── custom-component_comp.md │ │ │ ├── custom-component_cont.md │ │ │ ├── custom-component_extend.md │ │ │ ├── custom-component_generic.md │ │ │ ├── custom-component_lifetimes.md │ │ │ ├── custom-component_observers.md │ │ │ ├── custom-component_temp.md │ │ │ ├── custom-component_trdparty.md │ │ │ ├── dynamiclib_topone.md │ │ │ ├── dynamiclib_use.md │ │ │ ├── echarts.md │ │ │ ├── modelviewer.md │ │ │ ├── operating-environment.md │ │ │ ├── operating-mechanism.md │ │ │ ├── panoviewer.md │ │ │ ├── process_life.md │ │ │ ├── sitemap.md │ │ │ ├── sjs_annotation.md │ │ │ ├── sjs_basic_library.md │ │ │ ├── sjs_datatype.md │ │ │ ├── sjs_esnext.md │ │ │ ├── sjs_operator.md │ │ │ ├── sjs_start.md │ │ │ ├── sjs_statement.md │ │ │ ├── sjs_variable.md │ │ │ ├── spintileviewer.md │ │ │ ├── view_css.md │ │ │ ├── view_data.md │ │ │ ├── view_filter.md │ │ │ ├── view_for.md │ │ │ ├── view_if.md │ │ │ ├── view_incident.md │ │ │ ├── view_quote.md │ │ │ ├── view_template.md │ │ │ └── vrvideo.md │ │ ├── fuctionlist │ │ │ └── list.md │ │ ├── function │ │ │ ├── error_code.md │ │ │ ├── file_system.md │ │ │ ├── file_system_local.md │ │ │ ├── file_system_package.md │ │ │ ├── invoke_process.md │ │ │ ├── keygen_v2.md │ │ │ ├── navigation.md │ │ │ ├── opensmartprogram.md │ │ │ ├── ordercenter.md │ │ │ ├── parameter.md │ │ │ ├── payfaq.md │ │ │ ├── proposal.md │ │ │ ├── sign_v2.md │ │ │ ├── tune_up.md │ │ │ ├── tune_up_applyorderrefund.md │ │ │ ├── tune_up_capitaBill.md │ │ │ ├── tune_up_drawback.md │ │ │ ├── tune_up_examine.md │ │ │ ├── tune_up_notice.md │ │ │ ├── tune_up_orderBill.md │ │ │ ├── tune_up_queryorderdetail.md │ │ │ ├── tune_up_rest.md │ │ │ └── webintroduction.md │ │ ├── performance │ │ │ ├── http.md │ │ │ ├── performance-analysis-tool.md │ │ │ ├── performance-tips.md │ │ │ ├── subpackages.md │ │ │ └── whitescreen.md │ │ ├── serverapi │ │ │ ├── addTemplate.md │ │ │ ├── appendix.md │ │ │ ├── contact_api.md │ │ │ ├── contact_api_background.md │ │ │ ├── contact_api_page.md │ │ │ ├── contact_api_send.md │ │ │ ├── deleteTemplate.md │ │ │ ├── deleteresource.md │ │ │ ├── deletesitemap.md │ │ │ ├── faq.md │ │ │ ├── get.md │ │ │ ├── getTemplateLibraryById.md │ │ │ ├── getTemplateLibraryList.md │ │ │ ├── getTemplateList.md │ │ │ ├── getunlimited.md │ │ │ ├── open_feed.md │ │ │ ├── open_infomation.md │ │ │ ├── open_risk_power.md │ │ │ ├── open_risk_power_detectrisk.md │ │ │ ├── power_exp.md │ │ │ ├── sendTemplateMessage.md │ │ │ ├── sendintroduction.md │ │ │ ├── serverapilist.md │ │ │ ├── submitresource.md │ │ │ ├── submitsitemap.md │ │ │ ├── type.md │ │ │ └── useintroduction.md │ │ ├── simple │ │ │ ├── h5.md │ │ │ └── process.md │ │ ├── swan │ │ │ ├── client-lib.md │ │ │ ├── compatibility.md │ │ │ ├── compatibility_api.md │ │ │ ├── compatibility_caniuse.md │ │ │ ├── compatibility_compare.md │ │ │ ├── compatibility_diff.md │ │ │ ├── compatibility_version.md │ │ │ ├── swanchangelog.md │ │ │ └── version.md │ │ └── tutorial │ │ │ ├── demo.md │ │ │ ├── dev.md │ │ │ ├── devcss.md │ │ │ ├── devjs.md │ │ │ ├── devjson.md │ │ │ ├── frameworkdevelop.md │ │ │ ├── function.md │ │ │ ├── function_api.md │ │ │ ├── function_component.md │ │ │ ├── function_page.md │ │ │ ├── install.md │ │ │ ├── move.md │ │ │ ├── process.md │ │ │ ├── processjs.md │ │ │ ├── publish.md │ │ │ ├── startdevelop.md │ │ │ └── testapp.md │ ├── introduction │ │ ├── OpenCard.md │ │ ├── accessfeed.md │ │ ├── accessfeed_examine.md │ │ ├── accessfeed_monitor.md │ │ ├── accessfeed_publish.md │ │ ├── accessfeed_push.md │ │ ├── accessfeed_suggest.md │ │ ├── adopen.md │ │ ├── adopen_feedback.md │ │ ├── auditing_faq.md │ │ ├── auditing_road.md │ │ ├── auditing_tieba.md │ │ ├── auditinginfo_examine.md │ │ ├── auditinginfo_settled.md │ │ ├── auditinginfo_vertical.md │ │ ├── authenticity.md │ │ ├── authenticity_verification.md │ │ ├── baijiahao.md │ │ ├── baijiahao_audit.md │ │ ├── baijiahao_submit.md │ │ ├── baijiahaoexample.md │ │ ├── baijiahaointroduction.md │ │ ├── base.md │ │ ├── category.md │ │ ├── contact.md │ │ ├── contact_standard.md │ │ ├── content_course.md │ │ ├── content_inro.md │ │ ├── design 6.textClipping │ │ ├── enter_application.md │ │ ├── examine_faq.md │ │ ├── feed.md │ │ ├── getphonenumber.md │ │ ├── intro.md │ │ ├── mount.md │ │ ├── online.md │ │ ├── pay.md │ │ ├── productlaboratory.md │ │ ├── productlaboratory_ad.md │ │ ├── productlaboratory_faq.md │ │ ├── productlaboratory_search.md │ │ ├── publish.md │ │ ├── rank.md │ │ ├── rank_api.md │ │ ├── rank_data.md │ │ ├── rank_delete.md │ │ ├── rank_faq.md │ │ ├── rank_h5.md │ │ ├── rank_pageinfo.md │ │ ├── rank_road.md │ │ ├── rank_robots.md │ │ ├── rank_setimage.md │ │ ├── rank_single.md │ │ ├── rank_sitemap.md │ │ ├── rank_synchronism.md │ │ ├── rank_url.md │ │ ├── register_addbodyinfo.md │ │ ├── register_choosebodystyle.md │ │ ├── register_consummate.md │ │ ├── register_prepare.md │ │ ├── return.md │ │ ├── scancode.md │ │ ├── tieba.md │ │ ├── tool.md │ │ ├── type_send.md │ │ ├── type_thridtool.md │ │ ├── type_tool.md │ │ └── whitebook2.md │ ├── operations │ │ ├── behaviour_norms.md │ │ ├── catagory.md │ │ ├── game.md │ │ ├── service.md │ │ ├── specification.md │ │ ├── thirdparty_ad.md │ │ ├── thirdparty_agreement.md │ │ ├── thirdparty_law.md │ │ ├── thirdparty_low.md │ │ └── whitebook.md │ └── third │ │ ├── api.md │ │ ├── apppage.md │ │ ├── brandword.md │ │ ├── coupon.md │ │ ├── create.md │ │ ├── customer.md │ │ ├── customerability.md │ │ ├── datastatistics.md │ │ ├── deciphering.md │ │ ├── develop.md │ │ ├── domain.md │ │ ├── info.md │ │ ├── log.md │ │ ├── login.md │ │ ├── module.md │ │ ├── pathandkeyword.md │ │ ├── paymentservice.md │ │ ├── pro.md │ │ ├── publication.md │ │ ├── register.md │ │ ├── sitemap.md │ │ └── upload.md └── nav │ └── nav.yml ├── report.20200228.014848.18420.0.001.json └── source └── img └── tp ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png ├── card1.png └── card2.png /.github/workflows/nodejs.yml: -------------------------------------------------------------------------------- 1 | name: Node CI 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | strategy: 11 | matrix: 12 | node-version: [10.x] 13 | 14 | steps: 15 | - uses: actions/checkout@v1 16 | - name: Use Node.js ${{ matrix.node-version }} 17 | uses: actions/setup-node@v1 18 | with: 19 | node-version: ${{ matrix.node-version }} 20 | - name: npm install, build, and test 21 | run: | 22 | npm i 23 | npm run build --max-old-space-size=100000000 24 | env: 25 | CI: true 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | Thumbs.db 3 | db.json 4 | *.log 5 | .idea 6 | node_modules/ 7 | public/ 8 | .deploy*/ 9 | output 10 | package-lock.json 11 | .npmrc 12 | .vscode 13 | .project 14 | miniapp_docs_* 15 | source/sitemap.txt 16 | fis-conf.js 17 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | 2 | # hexo g 3 | cd output 4 | mkdir docs 5 | mv miniappdocs/* docs 6 | mv docs miniappdocs 7 | cd .. 8 | fis3 release 9 | # rm -rf ./output 10 | echo "deploy done!" 11 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/plugins/code-pre-wapper.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @file code代码重新包装 3 | * @author wulinfei 4 | */ 5 | 6 | const extensionLanguageMap = { 7 | swan: 'markup', 8 | md: 'markdown', 9 | ts: 'typescript', 10 | py: 'python', 11 | sh: 'bash', 12 | yml: 'yaml' 13 | }; 14 | 15 | const getLangExtension = exlang => { 16 | const lowerlang = exlang.toLowerCase(); 17 | return extensionLanguageMap[lowerlang] || lowerlang; 18 | }; 19 | 20 | module.exports = md => { 21 | const fence = md.renderer.rules.fence; 22 | md.renderer.rules.fence = (...args) => { 23 | const [tokens, idx] = args; 24 | const token = tokens[idx]; 25 | const rawlang = token.info.trim(); 26 | token.info = getLangExtension(rawlang); 27 | const tabName = rawlang.toUpperCase() || 'TEXT'; 28 | const rawCode = fence(...args); 29 | return `` 30 | + `${rawCode}`; 31 | }; 32 | }; 33 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/plugins/router.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @file 路由映射,将产出生成为index.html的形式,对齐hexo 3 | * @author wulinfei 4 | */ 5 | 6 | const path = require('path'); 7 | const globby = require('globby'); 8 | 9 | const sourceDir = path.join(__dirname, '../../'); 10 | 11 | const routers = globby.sync(['**/*.md', '!README.md'], {cwd: sourceDir}); 12 | 13 | const routersMap = routers.map(item => { 14 | const router = `/${item.substring(0, item.length - 3)}/`; 15 | return { 16 | path: router, 17 | filePath: path.resolve(__dirname, `../../${item}`) 18 | }; 19 | }); 20 | 21 | // routersMap.push({path: '/index/', filePath: path.resolve(__dirname, '../../README.md')}); 22 | // routersMap.push({path: '/', filePath: path.resolve(__dirname, '../../README.md')}); 23 | 24 | module.exports = { 25 | additionalPages: routersMap 26 | }; 27 | 28 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/arrow-relative.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/arrow-relative.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/arrow.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/back-to-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/back-to-top.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/copy-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/copy-active.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/copy.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/edit-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/edit-active.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/edit.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/feedback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/feedback.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/head-menu-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/head-menu-mobile.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/logo-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/logo-mobile.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/logo.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/logo_docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/logo_docs.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/mobile-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/mobile-close.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/mobile-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/mobile-select.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/next.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/prev.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/qrcode-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/qrcode-logo.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/search-icon-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/search-icon-mobile.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/search-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/search-icon.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/status.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/title-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/title-bg.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/tool-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/tool-hover.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/tool.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/images/webview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/.vuepress/theme/assets/images/webview.png -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/less/common/color.less: -------------------------------------------------------------------------------- 1 | 2 | /* 全局颜色 */ 3 | // @href-color: #3388FF; 4 | @href-color: #4B78B2; 5 | @href-active-color: #3388FF; 6 | @relative-color: #4B78B2; 7 | @elite-color: #fa8429; 8 | @tip-error: #F7534F; 9 | @tip-info: #04AA61; 10 | 11 | /* 背景颜色 */ 12 | @bg-white: #fff; 13 | @bg-white1: #F7F8F9; 14 | @bg-white2: #f0f0f0; 15 | @bg-white3: #f2f2f2; 16 | @bg-white4: #F2F3F4; 17 | @bg-blue: #38f; 18 | @bg-gray1: #F2F3F5; 19 | @bg-gray2: #e6e6e6; 20 | @bg-gray3: #EBEDEF; 21 | @bg-gray4: #F5F5F5; 22 | @bg-gray5: #eee; 23 | @bg-black1: #000; 24 | 25 | /* 字体颜色 */ 26 | @font-default: #000; 27 | @font-black1: #333; 28 | @font-black2: #666; 29 | @font-black3: #ccc; 30 | @font-black4: #999; 31 | @font-black5: #4F4F4F; 32 | @font-white1: #fff; 33 | @font-blue1: #3388FF; 34 | 35 | /* 边框颜色 */ 36 | @border-gray1: #e6e6e6; 37 | @border-gray2: #F0F1F2; 38 | @border-gray3: #F2F3F5; 39 | @border-black1: #000; 40 | @border-black2: #ccc; 41 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/less/common/params.less: -------------------------------------------------------------------------------- 1 | // PC端最大宽度 2 | @pc-max-width: 1980px; 3 | 4 | // PC最小宽度/移动端最大宽度 5 | @mobile-max-width: 1080px; 6 | 7 | // before 8 | // @font-body: "PingFang SC", "Microsoft YaHei", STHeiti, SimHei, "Helvetica Neue", Arial, Verdana; 9 | // @font-code: Menlo, Monaco, Consolas, monospace; 10 | 11 | @font-body: Helvetica Neue, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Helvetiva, Arial, sans-serif; 12 | @font-code: Menlo, Monaco, Consolas, monospace; 13 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/less/common/qr-code.less: -------------------------------------------------------------------------------- 1 | @import './color.less'; 2 | @import './params.less'; 3 | 4 | .qr-code { 5 | margin: 10px 0; 6 | &-image { 7 | width: 140px; 8 | height: 160px; 9 | background-color: @bg-white1; 10 | padding-top: 10px; 11 | border-radius: 8px; 12 | &-content { 13 | margin: 0 auto; 14 | width: 120px; 15 | position: relative; 16 | img { 17 | border: none; 18 | position: absolute; 19 | width: 40px; 20 | height: 40px; 21 | margin: 0; 22 | padding: 0; 23 | top: 50%; 24 | left: 50%; 25 | margin-top: -20px; 26 | margin-left: -20px; 27 | } 28 | } 29 | &-text { 30 | text-align: center; 31 | color: @font-black2; 32 | } 33 | } 34 | 35 | &-text { 36 | line-height: 24px; 37 | margin-bottom: 20px; 38 | 39 | &-botton { 40 | color: @href-color; 41 | cursor: pointer; 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/less/components/footer.less: -------------------------------------------------------------------------------- 1 | @import '../common/color.less'; 2 | 3 | .footer { 4 | margin-bottom: 24px; 5 | display: flex; 6 | justify-content: center; 7 | &-license { 8 | color: @font-black2; 9 | font-size: 14px; 10 | line-height: 24px; 11 | a { 12 | color: @font-black2; 13 | } 14 | a:hover { 15 | color: @href-color; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/less/components/mobile-head-nav.less: -------------------------------------------------------------------------------- 1 | @import '../common/color.less'; 2 | 3 | .mobile-header-nav { 4 | position: fixed; 5 | top: 60px; 6 | width: 100%; 7 | z-index: 1000; 8 | height: 100vh; 9 | background-color: @bg-white; 10 | ul { 11 | width: 100%; 12 | li { 13 | width: 100%; 14 | line-height: 60px; 15 | :hover { 16 | background-color: @border-gray3; 17 | } 18 | a { 19 | width: 100%; 20 | display: flex; 21 | justify-content: center; 22 | color: @font-black5; 23 | } 24 | } 25 | } 26 | 27 | &-item-active { 28 | background-color: @border-gray3; 29 | } 30 | } -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/assets/less/components/sidebar.less: -------------------------------------------------------------------------------- 1 | @import '../common/color.less'; 2 | @import '../common/params.less'; 3 | 4 | .m-doc-sidebar { 5 | background-color: @bg-white1; 6 | box-sizing: border-box; 7 | height: 100vh; 8 | overflow-y: auto; 9 | top: 0; 10 | left: 0; 11 | z-index: -1; 12 | min-height: calc(100vh - 60px); 13 | padding-bottom: 100px; 14 | box-sizing: border-box; 15 | font-size: 14px; 16 | } 17 | 18 | .page-container-sidebar { 19 | width: 280px; 20 | &-fixed { 21 | position: fixed; 22 | top: 0; 23 | } 24 | &-top { 25 | min-height: calc(100vh - 60px); 26 | top: 60px; 27 | } 28 | 29 | } 30 | 31 | @media screen and (max-width: @mobile-max-width) { 32 | .page-container-sidebar { 33 | position: fixed; 34 | z-index: 1000; 35 | } 36 | } -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/components/BottomNav.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/components/Footer.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/components/MobileHeadNav.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 20 | 21 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/components/SubNav.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/layouts/404.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/utils/api.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @file api.js 3 | * @description 请求接口集合 4 | */ 5 | 6 | export const Url = { 7 | searchSugUrl: '/forum/api/search_category', 8 | searchReportUrl: '/forum/api/statistics_wordstatisticsadd', 9 | searchRelativeUrl: '/forum/api/search_docrelation', 10 | relativeReportUrl: '/forum/api/statistics_urlstatisticsadd' 11 | }; 12 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/utils/get-device.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @file 判断设备环境 3 | * @author wulinfei 4 | */ 5 | 6 | export const isPc = () => { 7 | const reg = /Android|webOS|iPhone|SymbianOS|Windows Phone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i; 8 | return !(reg.test(navigator.userAgent)); 9 | }; 10 | 11 | export const isIOS = () => { 12 | const reg = /webOS|iPhone|iPad|iPod/i; 13 | return reg.test(navigator.userAgent); 14 | }; 15 | 16 | export const isBox = () => { 17 | return / baiduboxapp\//i.test(navigator.userAgent); 18 | }; 19 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/utils/link-loader.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @file 处理链接 3 | * @author wulinfei 4 | */ 5 | 6 | 7 | // 获取导航链接,如果导航不存在link,则找其子项第一项的链接 8 | export const findLink = item => { 9 | if (item.link) { 10 | return item.link; 11 | } 12 | const sidebar = item.sidebar; 13 | if (sidebar && sidebar[0].link) { 14 | return sidebar[0].link; 15 | } 16 | return findLink(sidebar[0]); 17 | }; 18 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/utils/report.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @file 打点上报Server 3 | * @author wulinfei 4 | */ 5 | 6 | import {get} from './request'; 7 | import {Url} from './api'; 8 | 9 | /** 10 | * 搜索打点上报 11 | * @param {Object} params 打点的参数 12 | * @param {string} params.word 搜索词 13 | * @param {string} params.source 搜索来源 14 | * @param {string} params.module 搜索类型 index: 主搜索 category: sug 搜索 15 | * @param {string} params.countType 事件类型 query: 展示 click: 点击 16 | * @return {Promise} 打点请求 17 | */ 18 | 19 | export const searchReport = params => { 20 | params.source = params.source || 'docs'; 21 | return get(Url.searchReportUrl, params).catch(() => {}); 22 | }; 23 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/theme/utils/request.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @file request.js 3 | * @description 请求函数 4 | */ 5 | 6 | import axios from 'axios'; 7 | import Qs from 'qs'; 8 | 9 | export const get = (url, params) => { 10 | return axios.get(url + '?' + Qs.stringify(params, {arrayFormat: 'indices'})) 11 | .then(res => res.data); 12 | }; 13 | -------------------------------------------------------------------------------- /program-docs/docs/.vuepress/utils/init-url.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @file 替换废弃的url,不经过编译,不能使用ES6 3 | * @author wulinfei 4 | */ 5 | 6 | !(function (url) { 7 | // 放置被删除的页面映射 8 | var urlMap = { 9 | // 例 '/docs/design/principle/':'/docs/design/overview/introduction/' 10 | }; 11 | if (!window._swanIde) { 12 | urlMap[url] && location.replace(urlMap[url]); 13 | !url.match('\/$') && !url.match('\.html$') && location.replace(url + '/'); 14 | } 15 | })(location.pathname); -------------------------------------------------------------------------------- /program-docs/docs/data/concept.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 常规分析 3 | header: data 4 | nav: book 5 | sidebar: concept 6 | --- 7 | 8 | 智能小程序数据分析功能为开发者提供了用户分析、使用分析、来源分析、留存分析、转化分析等模块分析功能,帮助开发者了解小程序整体运营状况,分析小程序的用户来源、用户构成、用户增长趋势、用户留存与转化、用户小程序使用行为习惯等一些列问题,已实现数据驱动商业运营与产品迭代的目标。 9 | 10 | ![图片](../../img/data/concept12.png) 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /program-docs/docs/data/concept_conversion.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 转化分析 3 | header: data 4 | nav: book 5 | sidebar: concept_conversion 6 | --- 7 | 8 | 9 | 分析过程中的转化与流失情况。当前主要包括漏斗分析:漏斗分析,是指将多个事件串联起来,对每个步骤中用户转化与流失进行的分析。为了让最终的转化能实现最大化,就需要去监控漏斗每个关键步骤的用户流量,分析步骤之间的流转关系,提升每个步骤的转化率。这就是漏斗分析的意义与价值。 10 | 11 | ![图片](../../img/data/concept13.png) -------------------------------------------------------------------------------- /program-docs/docs/data/concept_retain.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 留存分析 3 | header: data 4 | nav: book 5 | sidebar: concept_retain 6 | --- 7 | 8 | 9 | 用户留存报告用以分析目标用户再次启动小程序的情况,是体现小程序用户粘性的核心指标。在选择了考察的新用户(或活跃用户)时段后,可以在留存表中查看目标用户的“按日”、“按周”和“按月”的留存用户数或留存率。 10 | ![图片](../../img/data/concept05.png) -------------------------------------------------------------------------------- /program-docs/docs/data/concept_source.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 来源分析 3 | header: data 4 | nav: book 5 | sidebar: concept_source 6 | --- 7 | 8 | 展示进入到小程序的不同来源数据情况,来源的启动用户数体现该来源规模,新用户数、人均启动次数、时长和跳出率则体现该来源的质量。 9 | ![图片](../../img/data/concept04.png) -------------------------------------------------------------------------------- /program-docs/docs/data/concept_survey.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 应用概况 3 | header: data 4 | nav: book 5 | sidebar: concept_survey 6 | --- 7 | 8 | 应用概况是产品健康仪表盘,通过集中展现当前应用的核心数据指标(如:新用户数、启动用户数等)及主要报表的近7日趋势变化缩略图,帮助您快速了解应用的当前数据表现。 9 | ![图片](../../img/data/concept01.png) -------------------------------------------------------------------------------- /program-docs/docs/data/concept_useanalysis.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 使用分析 3 | header: data 4 | nav: book 5 | sidebar: concept_useanalysis 6 | --- 7 | 8 | ![图片](../../img/data/concept03.png) 9 | 10 | **页面分析**:展示各个页面的访次、停留时间、退出率等指标,体现页面受欢迎的程度。 11 | **使用习惯**:从访问深度、使用频率、使用时长、使用间隔四个维度系统刻画用户使用习惯特征,熟悉并把握用户的产品使用习惯特征,对于有针对性的进行产品优化及运营策略制定具有重要意义。 12 | **事件分析**:事件在小程序的统计分析中至关重要,用户在小程序内所有交互行为的分析均需要依赖对于事件的埋点与监控。目前支持通过事件API接口上报事件,即您需要在该报告“新增事件”后,将对应事件ID等信息通过事件API接口上报,而后才能看到事件的数据结果。在事件配置过程中,您可以给每个事件添加至多6个参数,用于进行事件更多维度的下钻分析,详情参见自定义事件分析。 13 | -------------------------------------------------------------------------------- /program-docs/docs/data/concept_useranalysis.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 用户分析 3 | header: data 4 | nav: book 5 | sidebar: concept_useranalysis 6 | --- 7 | 8 | ![图片](../../img/data/concept02.png) 9 | 10 | **用户趋势**:用于分析产品的新用户增量、新老构成比例等指标随时间的变化趋势,特别是结合自身业务重点分析趋势高、低点出现的合理性。 11 | **活跃用户**:从活跃用户数、活跃度、流失用户等维度分析您用户的产品使用粘性。 12 | **用户画像**:使用您应用的全部用户进行挖掘分析,得到用户在百度全域数据下的用户属性分布结果。 13 | **地域分布**:展示使用您的应用的用户在国家、省份、城市维度的分布详情。进行地域分布分析对于进行针对性的地域运营方案具有重要价值。 14 | **终端分析**:终端作为用户运行应用的载体,背后蕴藏着丰富的用户信息。分析用户品牌分布、设备型号分布、联网方式构成等,对于运营、产品和研发工作都十分必要。 -------------------------------------------------------------------------------- /program-docs/docs/data/target_active.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 活跃类指标 3 | header: data 4 | nav: book 5 | sidebar: target_active 6 | --- 7 | 8 | 9 | |指标名称|详情| 10 | |--|--| 11 | |日活跃用户数| 当日启动过小程序的用户数(多次启动不重复计)。| 12 | |周活跃用户数| 最近 7 天(含查询当日)启动过小程序的用户数(多次启动不重复计)。| 13 | |月活跃用户数| 最近 30 天(含查询当日)启动过小程序的用户数(多次启动不重复计)。| 14 | |日活/周活 |日启动用户数/周启动用户数,反映当日用户活跃与近 7 日的比较水平。| 15 | |日活/月活| 日启动用户数/月启动用户数,反映当日用户活跃与近 30 日的比较水平。| 16 | |流失用户| 最近 60 天(含查询当日)没有启动过小程序的用户数(已去重)。| 17 | |流失率 |流失用户/累计启动用户| 18 | -------------------------------------------------------------------------------- /program-docs/docs/data/target_data.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 数据分析维度 3 | header: data 4 | nav: book 5 | sidebar: target_data 6 | --- 7 | 8 | 9 | |维度|内容| 10 | |--|--| 11 | |终端系统平台|安卓、苹果、其它| 12 | |系统版本|iOS 及 Android 逐个子版本| 13 | |设备品牌|如苹果、三星、华为、小米等| 14 | |设备型号|如 iPhone8、小米 5、华为荣耀等| 15 | |联网方式|如 wifi、3g/4g、2g 等| 16 | |分辨率|如 640*960 等| 17 | |运营商|中国移动、联通等| 18 | |百度APP的版本号| 10.7 等| 19 | |页面|每一条页面路径,即为一个页面。| 20 | -------------------------------------------------------------------------------- /program-docs/docs/data/target_habit.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 使用习惯类指标 3 | header: data 4 | nav: book 5 | sidebar: target_habit 6 | --- 7 | 8 | 9 | 10 | |指标名称|详情| 11 | |--|--| 12 | | 访问深度分布| 访问深度指一次启动过程的去重访问页面数;分布指不同访问深度的启动次数分布。| 13 | |使用时长分布| 不同访问时长的启动次数分布| 14 | | 使用频率分布| 启动频率指用户的日启动次数,如用户在 1 月 1 日启动了 2 次;在 1 月 2 日启动了 4 次,则该用户在日启动次数 2 次和 4 次两个分布上均会被计入 1 次。| 15 | | 使用间隔分布| 启动间隔指用户最近一次启动距离上一次启动的时长;分布指不同启动间隔的启动用户数分布,其中新用户仅有 1 次启动,启动间隔为“首次启动”;用户最近一次启动与上一次启动在同一天的间隔为“当日”。| 16 | -------------------------------------------------------------------------------- /program-docs/docs/data/target_page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 页面类指标 3 | header: data 4 | nav: book 5 | sidebar: target_page 6 | --- 7 | 8 | |指标名称|详情| 9 | |--|--| 10 | | 访问次数| 页面被访问的次数,多次跳转重复访问也会被计入。| 11 | | 访问用户数| 访问该页面的用户数(同一用户多次访问同一页面不重复计)。| 12 | | 次均停留时长| 平均每一次访问页面的时间,等于页面访问总时长/页面访问总次数。| 13 | | 入口页次数| 该页面作为启动小程序时第一个访问的页面的启动次数。| 14 | | 退出页次数| 该页面作为关闭小程序时最后一个访问的页面的启动次数。| 15 | | 退出率| 该页面作为关闭小程序时最后一个访问页面的启动次数占该页面访问总次数的比例。| 16 | | 访问次数占比| 当前页面访问次数占全部页面访问次数的比例。| 17 | | 停留时长占比| 用户访问当前页面的停留时长的总和占用户在全部页面的停留时长总和的比例。| 18 | -------------------------------------------------------------------------------- /program-docs/docs/data/target_retain.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 留存类指标 3 | header: data 4 | nav: book 5 | sidebar: target_retain 6 | --- 7 | 8 | |指标名称|详情| 9 | |--|--| 10 | |留存用户数| 某日(周、月)新用户(或启动用户)在目标时间段再次启动小程序的用户数。| 11 | |留存率| 包括:日留存率、周留存率、月留存率。某日(周、月)新用户(或启动用户)在目标时间段再次启动小程序的用户数占原新用户数(或启动用户数)的比例。| 12 | -------------------------------------------------------------------------------- /program-docs/docs/data/target_user.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 用户类指标 3 | header: data 4 | nav: book 5 | sidebar: target_user 6 | --- 7 | 8 | 9 | |指标名称|详情| 10 | |--|--| 11 | | 新用户数| 90 天内首次启动小程序的用户数。| 12 | |新用户占比 |某时间段内新用户数占启动用户总数的比例。| 13 | | 新用户分布| 某维度的新用户数占全维度的新用户总数的比例。| 14 | | 启动用户数| 启动过小程序的用户数(多次启动不重复计)。| 15 | | 启动用户分布| 某维度的启动用户数占全维度的启动用户总数的比例。| 16 | | 启动次数| 启动小程序的总次数。“一次启动”是指用户打开小程序到主动退出(或超时退出)为止。| 17 | | 启动次数分布| 某维度的启动次数占全维度的启动总次数的比例。| 18 | | 次均使用时长| 平均每一次启动小程序的时间,等于总时长/总启动次数。| 19 | | 人均使用时长| 平均每个用户使用应用程序的时间,等于总时长/总启动用户数。| 20 | | 老用户数| 当日启动用户中,以前也启动过小程序的用户。| 21 | |老用户占比 |当日老用户占总的启动用户的比例。| 22 | |人均启动 次数| 每个用户启动小程序的平均次数。| -------------------------------------------------------------------------------- /program-docs/docs/design/component/input.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 输入组件 3 | header: design 4 | nav: component 5 | sidebar: input 6 | --- 7 | ## 输入表单 8 | 输入表单由一系列文本输入框组成,支持上下垂直滚动,用户输入并确认后,表单提交输入结果。 9 |
10 |
11 | 12 |
13 |
14 | 15 | 16 | ## 文本输入框 17 | 针对常用的输入场景,智能小程序提供常用文本输入框: 18 | - 单行输入框,开发文档说明详见input; 19 | - 多行输入框,开发文档说明详见textarea。 20 |
21 |
22 | 23 |
24 |
25 | 26 | ## 键盘 27 | 请为不同的文本输入框,调用适合的键盘类型: 28 |
29 |
30 | 31 |
32 |
-------------------------------------------------------------------------------- /program-docs/docs/design/component/list.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 列表 3 | header: design 4 | nav: foundation 5 | sidebar: list 6 | --- 7 | 8 | 列表是由多个等宽列表项组成的、按一定规律的连续条目排列,支持上下垂直滚动。 9 | 列表条目整体响应点击操作;右侧带选择控件的列表,控件区点击优先响应相应功能。 10 | 11 |
12 |
13 | 14 |
15 |
16 | 17 | > 你可直接使用智能小程序相关体验资产。([下载设计资源](https://smartprogram.baidu.com/docs/design/resource/uikit/) | [查看开发文档](https://smartprogram.baidu.com/docs/develop/extended/template/smt-feed-page/)) -------------------------------------------------------------------------------- /program-docs/docs/design/foundation/pic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 图片图标 3 | header: design 4 | nav: foundation 5 | sidebar: pic 6 | --- 7 | 8 | ## 图片 9 | 图片比文字更吸引用户,能丰富页面内容。 10 | 11 | 开发文档说明详见 image 。 12 | 13 | 请使用清晰的图片,像素低的图片会降低页面的整体质感。 14 |
15 | 16 |
17 | 18 | ## 图标 19 | 图标能辅助信息的表达,开发文档说明详见 icon 。 20 | 21 | 使用图标风格应简洁、辨识性强,建议按场景绘制或内容分类入口。 22 | 23 | ### 智能小程序常用图标库 24 | 1. 彩色图标,多应用于页面中的重点内容分类入口(金刚位); 25 | 2. 单色图标,多应用于框架或基础页面的功能。 26 | 27 |
28 |
29 | 30 | > 你可直接使用智能小程序相关体验资产。([视觉资源下载](../../resource/uikit/) | [查看开发文档](https://smartprogram.baidu.com/docs/develop/extended/ui_component/smt-icon/)) -------------------------------------------------------------------------------- /program-docs/docs/design/resource/lottie.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lottie 动画 3 | header: design 4 | nav: foundation 5 | sidebar: lottie 6 | --- 7 | 8 | 为了更好地实现流畅的动画效果,智能小程序支持Lottie导出的json文件以及位图。 9 | 10 | 开发文档说明详见 animation-view-lottie 。 11 | 12 | 1. Lottie使用入门,详见 [官方介绍](https://airbnb.design/lottie/) ; 13 | 2. 设计师精彩示例及动效文件,详见 [设计社区](https://www.lottiefiles.com/) 。 14 | 15 | 示例: 16 | 19 |

温馨提示:如果你的浏览器无法正常播放,请尝试Chrome浏览器。

-------------------------------------------------------------------------------- /program-docs/docs/design/resource/uikit.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 视觉资源下载 3 | header: design 4 | nav: resource 5 | sidebar: uikit 6 | --- 7 | 8 | 9 | 10 | 为方便小程序开发团队的视觉设计师进行小程序设计,小程序团队提供常用的视觉设计组件资源。 11 | 12 |
13 | 14 |

智能小程序 Sketch 组件库

15 |
16 | 17 |

智能小程序 Photoshop 组件库

18 |
19 |
20 | 21 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/ai/ai.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 接入说明 3 | header: develop 4 | nav: api 5 | sidebar: ai 6 | --- 7 | 8 | > **AI 接口目前只针对百度 APP 开放使用。** 9 | 10 | 在使用 AI 接口前,请使用有管理员权限的帐号,进行如下操作: 11 | 12 | 13 | 1. 进入智能小程序平台,进入小程序首页,在左导航栏单击“百度AI能力”。 14 | 2. 在“AI能力”页面,单击“编辑接口”。 15 | ![图片](../../../../img/api/ai/ai01.png) 16 | 3. 勾选您需要使用的接口,单击提交。 17 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/ai2020.png) 18 | 19 | 20 | ## 错误码 21 | 22 | 23 | 24 | ### Android 25 | 26 | |错误码|说明| 27 | |:--|:--| 28 | |201|解析失败,请检查调起协议是否合法| 29 | |202|解析失败,请检查参数是否正确| 30 | |1001|执行失败| 31 | 32 | ### iOS 33 | 34 | |错误码|说明| 35 | |:--|:--| 36 | |202|解析失败,请检查参数是否正确 | 37 | |1001|请求失败| 38 | 39 | ## Bug&Tip 40 | 41 | * 目前AI能力只能在百度宿主中使用,且暂时无法用caniuse来判断可用性,建议开发者使用getSystemInfoSync获取宿主名称作为临时方案来判断,在每个AI示例中包含了这种判断方式。长期来讲,所有宿主都会支持AI能力,也应该用caniuse判断,以上为临时折中方案。 -------------------------------------------------------------------------------- /program-docs/docs/develop/api/device_sys/hostlist.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 宿主平台枚举值列表 3 | header: develop 4 | nav: api 5 | sidebar: hostlist 6 | --- 7 | 8 | |宿主平台|枚举值| 9 | |---|---| 10 | |小红书|xhsdiscover| 11 | |百度网盘|bdnetdisk| 12 | |百度地图|bdmap| 13 | |全民小视频|bdminivideo| 14 | |百度APP|baiduboxapp| 15 | |好看视频|baiduhaokan| 16 | |百度极速版|bdlite| 17 | |WiFi万能钥匙极速版|wifikey| 18 | |贴吧|tieba| 19 | |Freeme OS|droi| 20 | |爱奇艺|iqiyi| 21 | |车载智能小程序|iovauto| 22 | |WiFi万能钥匙|wifikeycore| 23 | |宝宝巴士|babybus| 24 | |看多多|baiduboxmission| 25 | |百度知道|zhidao| 26 | |三星手机|samsungmscc| 27 | |分玩|gamenow| 28 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-access.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.access 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-access 6 | --- 7 | 8 | **解释**:判断文件/目录是否存在。 9 | 10 | **方法参数**:Object object 11 | 12 | **`object`参数说明**: 13 | 14 | |参数名 |类型|必填|默认值|说明| 15 | |:----|:----|:----|:----|:----| 16 | |path|String|是|-|文件/目录路径| 17 | |success|Function|否|-|接口调用成功的回调函数| 18 | |fail|Function|否|-|接口调用失败的回调函数| 19 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 20 | 21 | ### 代码示例 22 | 23 | * 在 js 文件中 24 | 25 | ```js 26 | Page({ 27 | onLoad() { 28 | const fs = swan.getFileSystemManager(); 29 | this.fs = fs; 30 | }, 31 | access() { 32 | this.fs.access({ 33 | path: `${swan.env.USER_DATA_PATH}/demo.txt`, 34 | success: res => { 35 | console.log('access success', res); 36 | }, 37 | fail: err => { 38 | console.log('access fail', err) 39 | } 40 | }); 41 | } 42 | }); 43 | ``` 44 | 45 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-accessSync.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.accessSync 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-accessSync 6 | --- 7 | 8 | 9 | 10 | **解释**:判断文件/目录是否存在的同步接口。 11 | 12 | **方法参数**:String path 13 | 14 | **`path`参数说明**:文件/目录路径。 15 | 16 | 若接口调用失败,会抛出一个标准的`Error`对象 17 | 18 | ### 代码示例 19 | 20 | * 在 js 文件中 21 | 22 | ```js 23 | Page({ 24 | onLoad() { 25 | const fs = swan.getFileSystemManager(); 26 | this.fs = fs; 27 | }, 28 | accessSync() { 29 | try { 30 | let result = this.fs.accessSync( 31 | `${swan.env.USER_DATA_PATH}/demo.txt` 32 | ); 33 | console.log('accessSync success', result); 34 | } 35 | catch (err) { 36 | console.log('accessSync fail', err); 37 | } 38 | } 39 | }); 40 | ``` 41 | 42 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-copyFile.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.copyFile 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-copyFile 6 | --- 7 | 8 | 9 | 10 | **解释**:用于实现文件拷贝。 11 | 12 | **方法参数**:Object object 13 | 14 | **`object`参数说明**: 15 | 16 | |参数名 |类型|必填|默认值|说明| 17 | |:----|:----|:----|:----|:----| 18 | |srcPath|String|是|-|要被拷贝的源文件名称| 19 | |destPath|String|是|-|拷贝操作的目标文件名| 20 | |success|Function|否|-|接口调用成功的回调函数| 21 | |fail|Function|否|-|接口调用失败的回调函数| 22 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 23 | 24 | ### 代码示例 25 | 26 | * 在 js 文件中 27 | 28 | ```js 29 | Page({ 30 | onLoad() { 31 | const fs = swan.getFileSystemManager(); 32 | this.fs = fs; 33 | }, 34 | copyFile() { 35 | this.fs.copyFile({ 36 | srcPath: `${swan.env.USER_DATA_PATH}/demo.txt`, 37 | destPath: `${swan.env.USER_DATA_PATH}/destPath.txt`, 38 | success: res => { 39 | console.log('copyFile success', res); 40 | }, 41 | fail: err => { 42 | console.log('copyFile fail', err) 43 | } 44 | }); 45 | } 46 | }); 47 | ``` 48 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-copyFileSync.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.copyFileSync 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-copyFileSync 6 | --- 7 | 8 | 9 | **解释**:用于实现文件拷贝的同步接口。 10 | 11 | **方法参数**:String srcPath, String destPath 12 | 13 | **`srcPath`参数说明**:文件/目录路径。 14 | 15 | **`destPath`参数说明**:拷贝操作的目标文件名。 16 | 17 | 若接口调用失败,会抛出一个标准的`Error`对象 18 | 19 | ### 代码示例 20 | 21 | * 在 js 文件中 22 | 23 | ```js 24 | Page({ 25 | onLoad() { 26 | const fs = swan.getFileSystemManager(); 27 | this.fs = fs; 28 | }, 29 | copyFileSync() { 30 | try { 31 | let result = this.fs.copyFileSync( 32 | `${swan.env.USER_DATA_PATH}/demo.txt`, 33 | `${swan.env.USER_DATA_PATH}/copyFileSync.txt` 34 | ); 35 | console.log('copyFileSync success', result); 36 | } 37 | catch (err) { 38 | console.log('copyFileSync fail', err); 39 | } 40 | } 41 | }); 42 | ``` 43 | 44 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-getFileInfo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.getFileInfo 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-getFileInfo 6 | --- 7 | 8 | 9 | 10 | **解释**:获取本地临时文件的相关信息, 并在 success 回调函数中返回该文件大小。 11 | 12 | **方法参数**:Object object 13 | 14 | **`object`参数说明**: 15 | 16 | |参数名 |类型|必填|默认值|说明| 17 | |:----|:----|:----|:----|:----| 18 | |filePath|String|是|-|读取的文件路径| 19 | |success|Function|否|-|接口调用成功的回调函数| 20 | |fail|Function|否|-|接口调用失败的回调函数| 21 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 22 | 23 | **success 返回参数说明**: 24 | 25 | |参数|类型|说明| 26 | |---- | ---- | ---- | 27 | |size|Number|文件大小,以字节为单位| 28 | 29 | ### 代码示例 30 | 31 | * 在 js 文件中 32 | 33 | ```js 34 | Page({ 35 | onLoad() { 36 | const fs = swan.getFileSystemManager(); 37 | this.fs = fs; 38 | }, 39 | getFileInfo() { 40 | this.fs.getFileInfo({ 41 | filePath: `${swan.env.USER_DATA_PATH}/demo.txt`, 42 | success: res => { 43 | console.log('getFileInfo success', res); 44 | }, 45 | fail: err => { 46 | console.log('getFileInfo fail', err) 47 | } 48 | }); 49 | } 50 | }); 51 | ``` 52 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-getSavedFileList.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.getSavedFileList 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-getSavedFileList 6 | --- 7 | 8 | 9 | 10 | **解释**:获取该小程序下已保存的本地用户文件列表。 11 | 12 | **方法参数**:Object object 13 | 14 | **`object`参数说明**: 15 | 16 | |参数名 |类型|必填|默认值|说明| 17 | |:----|:----|:----|:----|:----| 18 | |success|Function|否|-|接口调用成功的回调函数| 19 | |fail|Function|否|-|接口调用失败的回调函数| 20 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 21 | 22 | **success 返回参数说明**: 23 | 24 | |参数|类型|说明| 25 | |:----|:----|:----| 26 | |fileList|Array|文件数组| 27 | 28 | ### 代码示例 29 | 30 | * 在 js 文件中 31 | 32 | ```js 33 | Page({ 34 | onLoad() { 35 | const fs = swan.getFileSystemManager(); 36 | this.fs = fs; 37 | }, 38 | getSavedFileList() { 39 | this.fs.getSavedFileList({ 40 | success: res => { 41 | console.log('getSavedFileList success', res); 42 | }, 43 | fail: err => { 44 | console.log('getSavedFileList fail', err) 45 | } 46 | }); 47 | } 48 | }); 49 | ``` 50 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-mkdir.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.mkdir 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-mkdir 6 | --- 7 | 8 | 9 | 10 | **解释**:创建目录。 11 | 12 | **方法参数**:Object object 13 | 14 | **`object`参数说明**: 15 | 16 | |参数名 |类型|必填|默认值|说明| 17 | |:----|:----|:----|:----|:----| 18 | |dirPath|String|是|-|创建的目录路径| 19 | |recursive|Boolean|否|false|是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。| 20 | |success|Function|否|-|接口调用成功的回调函数| 21 | |fail|Function|否|-|接口调用失败的回调函数| 22 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 23 | 24 | ### 代码示例 25 | 26 | * 在 js 文件中 27 | 28 | ```js 29 | Page({ 30 | onLoad() { 31 | const fs = swan.getFileSystemManager(); 32 | this.fs = fs; 33 | }, 34 | mkdir() { 35 | this.fs.mkdir({ 36 | dirPath: `${swan.env.USER_DATA_PATH}/mkdir`, 37 | success: res => { 38 | console.log('mkdir success', res); 39 | }, 40 | fail: err => { 41 | console.log('mkdir fail', err) 42 | } 43 | }); 44 | } 45 | }); 46 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-mkdirSync.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.mkdirSync 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-mkdirSync 6 | --- 7 | 8 | 9 | 10 | **解释**:创建目录的同步接口。 11 | 12 | **方法参数**:String dirPath, Boolean recursive 13 | 14 | **`dirPath`参数说明**:创建的目录路径。 15 | 16 | **`recursive`参数说明**:是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。。 17 | 18 | 若接口调用失败,会抛出一个标准的`Error`对象 19 | 20 | ### 代码示例 21 | 22 | * 在 js 文件中 23 | 24 | ```js 25 | Page({ 26 | onLoad() { 27 | const fs = swan.getFileSystemManager(); 28 | this.fs = fs; 29 | }, 30 | mkdirSync() { 31 | try { 32 | let result = this.fs.mkdirSync( 33 | `${swan.env.USER_DATA_PATH}/mkdirSyc` 34 | ); 35 | console.log('mkdirSync success', result); 36 | } 37 | catch (err) { 38 | console.log('mkdirSync fail', err); 39 | } 40 | } 41 | }); 42 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-readdir.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.readdir 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-readdir 6 | --- 7 | 8 | 9 | **解释**:读取本地指定路径下的目录内文件列表。 10 | 11 | **方法参数**:Object object 12 | 13 | **`object`参数说明**: 14 | 15 | |参数名 |类型|必填|默认值|说明| 16 | |:----|:----|:----|:----|:----| 17 | |dirPath|String|是|-|想要读取的文件所在的目录| 18 | |success|Function|否|-|接口调用成功的回调函数| 19 | |fail|Function|否|-|接口调用失败的回调函数| 20 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 21 | 22 | **success 返回参数说明**: 23 | 24 | |参数|类型|说明| 25 | |:----|:----|:----| 26 | |files|Array|指定目录下的文件列表| 27 | |files[].fileItem|String|文件列表里的文件项,存储着路径| 28 | 29 | ### 代码示例 30 | 31 | * 在 js 文件中 32 | 33 | ```js 34 | Page({ 35 | onLoad() { 36 | const fs = swan.getFileSystemManager(); 37 | this.fs = fs; 38 | }, 39 | readdir() { 40 | this.fs.readdir({ 41 | dirPath: `${swan.env.USER_DATA_PATH}/readdir`, 42 | success: res => { 43 | console.log('readdir success', res); 44 | }, 45 | fail: err => { 46 | console.log('readdir fail', err) 47 | } 48 | }); 49 | } 50 | }); 51 | ``` 52 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-readdirSync.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.readdirSync 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-readdirSync 6 | --- 7 | 8 | 9 | **解释**:读取本地指定路径下的目录内文件列表的同步接口。 10 | 11 | **方法参数**:String dirPath 12 | 13 | **`dirPath`参数说明**:想要读取的文件所在的目录。 14 | 15 | **同步返回参数说明**: 16 | 17 | |参数 |类型|说明| 18 | |:----|:----|:----| 19 | |files|Array|指定目录下的文件列表| 20 | |files[].fileItem|String|文件列表里的文件项,存储着路径| 21 | 22 | 若接口调用失败,会抛出一个标准的`Error`对象 23 | 24 | ### 代码示例 25 | 26 | * 在 js 文件中 27 | 28 | ```js 29 | Page({ 30 | onLoad() { 31 | const fs = swan.getFileSystemManager(); 32 | this.fs = fs; 33 | }, 34 | readdirSync() { 35 | try { 36 | let result = this.fs.readdirSync( 37 | `${swan.env.USER_DATA_PATH}/readdirSyc'` 38 | ); 39 | console.log('readdirSync success', result); 40 | } 41 | catch (err) { 42 | console.log('readdirSync fail', err); 43 | } 44 | } 45 | }); 46 | ``` 47 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-removeSavedFile.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.removeSavedFile 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-removeSavedFile 6 | --- 7 | 8 | 9 | 10 | **解释**:删除该小程序下已保存的本地用户文件。 11 | 12 | **方法参数**:Object object 13 | 14 | **`object`参数说明**: 15 | 16 | |参数名 |类型|必填|默认值|说明| 17 | |:----|:----|:----|:----|:----| 18 | |filePath|String|是|-|需要删除的文件路径| 19 | |success|Function|否|-|接口调用成功的回调函数| 20 | |fail|Function|否|-|接口调用失败的回调函数| 21 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 22 | 23 | ### 代码示例 24 | 25 | * 在 js 文件中 26 | 27 | ```js 28 | Page({ 29 | onLoad() { 30 | const fs = swan.getFileSystemManager(); 31 | this.fs = fs; 32 | }, 33 | removeSavedFile() { 34 | this.fs.removeSavedFile({ 35 | filePath: `${swan.env.USER_DATA_PATH}/demo.txt`, 36 | encoding: 'utf8', 37 | success: res => { 38 | console.log('removeSavedFile success', res); 39 | }, 40 | fail: err => { 41 | console.log('removeSavedFile fail', err) 42 | } 43 | }); 44 | } 45 | }); 46 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-rename.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.rename 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-rename 6 | --- 7 | 8 | 9 | 10 | **解释**:重命名文件,可以把文件从 oldPath 移动到 newPath。 11 | 12 | **方法参数**:Object object 13 | 14 | **`object`参数说明**: 15 | 16 | |参数名 |类型|必填|默认值|说明| 17 | |:----|:----|:----|:----|:----| 18 | |oldPath|String|是|-|源文件/源目录路径| 19 | |newPath|String|是|-|目标路径| 20 | |success|Function|否|-|接口调用成功的回调函数| 21 | |fail|Function|否|-|接口调用失败的回调函数| 22 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 23 | 24 | ### 代码示例 25 | 26 | * 在 js 文件中 27 | 28 | ```js 29 | Page({ 30 | onLoad() { 31 | const fs = swan.getFileSystemManager(); 32 | this.fs = fs; 33 | }, 34 | rename() { 35 | this.fs.rename({ 36 | oldPath: `${swan.env.USER_DATA_PATH}/demo.txt`, 37 | newPath: `${swan.env.USER_DATA_PATH}/rename/demo.txt`, 38 | encoding: 'utf8', 39 | success: res => { 40 | console.log('rename success', res); 41 | }, 42 | fail: err => { 43 | console.log('rename fail', err) 44 | } 45 | }); 46 | } 47 | }); 48 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-renameSync.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.renameSync 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-renameSync 6 | --- 7 | 8 | 9 | **解释**:重命名文件的同步接口,可以把文件从 oldPath 移动到 newPath。 10 | 11 | **方法参数**:String oldPath, String newPath 12 | 13 | **`oldPath`参数说明**:源文件/源目录路径。 14 | **`newPath`参数说明**:目标路径。 15 | 16 | 若接口调用失败,会抛出一个标准的`Error`对象 17 | 18 | ### 代码示例 19 | 20 | * 在 js 文件中 21 | 22 | ```js 23 | Page({ 24 | onLoad() { 25 | const fs = swan.getFileSystemManager(); 26 | this.fs = fs; 27 | }, 28 | renameSync() { 29 | try { 30 | let result = this.fs.renameSync( 31 | `${swan.env.USER_DATA_PATH}/demo.txt`, 32 | `${swan.env.USER_DATA_PATH}/renameSync/demo.txt` 33 | ); 34 | console.log('renameSync success', result); 35 | } 36 | catch (err) { 37 | console.log('renameSync fail', err); 38 | } 39 | } 40 | }); 41 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-rmdir.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.rmdir 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-rmdir 6 | --- 7 | 8 | 9 | 10 | **解释**:删除目录。 11 | 12 | **方法参数**:Object object 13 | 14 | **`object`参数说明**: 15 | 16 | |参数名 |类型|必填|默认值|说明| 17 | |:----|:----|:----|:----|:----| 18 | |dirPath|String|是|-|要删除的目录路径| 19 | |recursive|Boolean|否|false|是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。| 20 | |success|Function|否|-|接口调用成功的回调函数| 21 | |fail|Function|否|-|接口调用失败的回调函数| 22 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 23 | 24 | ### 代码示例 25 | 26 | * 在 js 文件中 27 | 28 | ```js 29 | Page({ 30 | onLoad() { 31 | const fs = swan.getFileSystemManager(); 32 | this.fs = fs; 33 | }, 34 | rmdir() { 35 | this.fs.rmdir({ 36 | dirPath: `${swan.env.USER_DATA_PATH}/rmdir`, 37 | success: res => { 38 | console.log('rmdir success', res); 39 | }, 40 | fail: err => { 41 | console.log('rmdir fail', err) 42 | } 43 | }); 44 | } 45 | }); 46 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-rmdirSync.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.rmdirSync 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-rmdirSync 6 | --- 7 | 8 | 9 | **解释**:删除目录的同步接口。 10 | 11 | **方法参数**:String dirPath, Boolean recursive 12 | 13 | **`dirPath`参数说明**:要删除的目录路径。 14 | 15 | **`recursive`参数说明**:是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。 16 | 17 | 若接口调用失败,会抛出一个标准的`Error`对象 18 | 19 | ### 代码示例 20 | 21 | * 在 js 文件中 22 | 23 | ```js 24 | Page({ 25 | onLoad() { 26 | const fs = swan.getFileSystemManager(); 27 | this.fs = fs; 28 | }, 29 | rmdirSync() { 30 | try { 31 | let result = this.fs.rmdirSync( 32 | `${swan.env.USER_DATA_PATH}/rmdirSync` 33 | ); 34 | console.log('rmdirSync success', result); 35 | } 36 | catch (err) { 37 | console.log('rmdirSync fail', err); 38 | } 39 | } 40 | }); 41 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-saveFileSync.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.saveFileSync 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-saveFileSync 6 | --- 7 | 8 | 9 | **解释**:保存临时文件到本地的同步接口。此接口会移动临时文件,因此调用成功后, tempFilePath 将不可用。 10 | 11 | **方法参数**:String tempFilePath, String filePath 12 | 13 | **`tempFilePath`参数说明**:临时存储文件路径。 14 | **`filePath`参数说明**:要存储的文件路径。 15 | 16 | **同步返回参数说明**: 17 | 18 | |参数|类型|说明| 19 | |:----|:----|:----| 20 | |savedFilePath|String|存储后的文件路径| 21 | 22 | 若接口调用失败,会抛出一个标准的`Error`对象 23 | 24 | ### 代码示例 25 | 26 | * 在 js 文件中 27 | 28 | ```js 29 | Page({ 30 | onLoad() { 31 | const fs = swan.getFileSystemManager(); 32 | this.fs = fs; 33 | }, 34 | saveFileSync() { 35 | try { 36 | let result = this.fs.saveFileSync( 37 | '/usr/temp.txt', // 仅为示例,实际上请传真实临时路径地址,如 swan.downloadFile 的 tempFilePath 返回参数 38 | `${swan.env.USER_DATA_PATH}/` 39 | ); 40 | console.log('saveFileSync success', result); 41 | } 42 | catch (err) { 43 | console.log('saveFileSync fail', err); 44 | } 45 | } 46 | }); 47 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-unlink.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.unlink 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-unlink 6 | --- 7 | 8 | 9 | 10 | **解释**:删除文件。 11 | 12 | **方法参数**:Object object 13 | 14 | **`object`参数说明**: 15 | 16 | |参数名 |类型|必填|默认值|说明| 17 | |:----|:----|:----|:----|:----| 18 | |filePath|String|是|-|要删除的文件路径| 19 | |success|Function|否|-|接口调用成功的回调函数| 20 | |fail|Function|否|-|接口调用失败的回调函数| 21 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 22 | 23 | ### 代码示例 24 | 25 | * 在 js 文件中 26 | 27 | ```js 28 | Page({ 29 | onLoad() { 30 | const fs = swan.getFileSystemManager(); 31 | this.fs = fs; 32 | }, 33 | unlink() { 34 | this.fs.unlink({ 35 | filePath: `${swan.env.USER_DATA_PATH}/demo.txt`, 36 | success: res => { 37 | console.log('unlink success', res); 38 | }, 39 | fail: err => { 40 | console.log('unlink fail', err) 41 | } 42 | }); 43 | } 44 | }); 45 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-unlinkSync.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.unlinkSync 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-unlinkSync 6 | --- 7 | 8 | 9 | **解释**:删除文件的同步接口。 10 | 11 | **方法参数**:String filePath 12 | 13 | **`filePath`参数说明**:要删除的文件路径。 14 | 15 | 若接口调用失败,会抛出一个标准的`Error`对象 16 | 17 | ### 代码示例 18 | 19 | * 在 js 文件中 20 | 21 | ```js 22 | Page({ 23 | onLoad() { 24 | const fs = swan.getFileSystemManager(); 25 | this.fs = fs; 26 | }, 27 | unlinkSync() { 28 | try { 29 | let result = this.fs.unlinkSync( 30 | `${swan.env.USER_DATA_PATH}/demo.txt` 31 | ); 32 | console.log('unlinkSync success', result); 33 | } 34 | catch (err) { 35 | console.log('unlinkSync fail', err); 36 | } 37 | } 38 | }); 39 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/FileSystemManager-unzip.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FileSystemManager.unzip 3 | header: develop 4 | nav: api 5 | sidebar: FileSystemManager-unzip 6 | --- 7 | 8 | 9 | 10 | **解释**:解压文件。 11 | 12 | **方法参数**:Object object 13 | 14 | **`object`参数说明**: 15 | 16 | |参数名 |类型|必填|默认值|说明| 17 | |:----|:----|:----|:----|:----| 18 | |zipFilePath|String|是|-|源文件路径,必须是 zip 压缩文件| 19 | |targetPath|String|是|-|解压目标路径,目标目录必须位于用户目录下| 20 | |success|Function|否|-|接口调用成功的回调函数| 21 | |fail|Function|否|-|接口调用失败的回调函数| 22 | |complete|Function|否|-|接口调用结束的回调函数(调用成功、失败都会执行)| 23 | 24 | ### 代码示例 25 | 26 | * 在 js 文件中 27 | 28 | ```js 29 | Page({ 30 | onLoad() { 31 | const fs = swan.getFileSystemManager(); 32 | this.fs = fs; 33 | }, 34 | unzip() { 35 | this.fs.unzip({ 36 | zipFilePath: `${swan.env.USER_DATA_PATH}/demo/a.zip`, 37 | targetPath: `${swan.env.USER_DATA_PATH}/demo/b`, 38 | success: res => { 39 | console.log('unzip success', res); 40 | }, 41 | fail: err => { 42 | console.log('unzip fail', err) 43 | } 44 | }); 45 | } 46 | }); 47 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/api/file/swan-getFileSystemManager.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: swan.getFileSystemManager 3 | header: develop 4 | nav: api 5 | sidebar: swan-getFileSystemManager 6 | --- 7 | 8 | > 基础库 3.130.1 开始支持,若访问小程序源代码中的资源,开发者工具暂时只支持媒体文件(音频,视频,图片等),若访问小程序源代码中的文件夹,开发者工具不支持空文件夹,低版本需做[兼容处理](https://smartprogram.baidu.com/docs/develop/swan/compatibility/)。 9 | 10 | 11 | 12 | **解释**:获取全局唯一的文件管理器对象。 13 | 14 | **方法参数**:无 15 | 16 | **返回值**:fileSystemManager 17 | 18 | 若接口调用失败,会抛出一个标准的`Error`对象 19 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/location/swan-offLocationChange.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: swan.offLocationChange 3 | header: develop 4 | nav: api 5 | sidebar: swan-offLocationChange 6 | --- 7 | 8 | > 基础库 3.150.1 版本开始支持。 9 | 10 | **解释**:取消监听实时地理位置变化事件 11 | 12 | ## 方法参数 13 | 14 | Function callback 15 | 16 | ### `callback`参数说明 17 | 18 | 实时地理位置变化事件的回调函数 19 | 20 | ## 示例 21 | 22 | 23 | ### 代码示例 24 | 25 | * 在 js 文件中 26 | 27 | ```js 28 | Page({ 29 | onLocationChange() { 30 | const noop = res => { 31 | console.log('location change', res); 32 | }; 33 | swan.onLocationChange(noop); 34 | swan.offLocationChange(noop); 35 | } 36 | }) 37 | ``` 38 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/location/swan-startLocationUpdate.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: swan.startLocationUpdate 3 | header: develop 4 | nav: api 5 | sidebar: swan-startLocationUpdate 6 | --- 7 | 8 | > 基础库 3.150.1 版本开始支持。 9 | 10 | **解释**:开启小程序进入前台时接收位置消息 11 | 12 | ## 方法参数 13 | 14 | Object object 15 | 16 | ### `object` 参数说明 17 | 18 | |属性名 |类型 |必填 |默认值 |说明 | 19 | |---- |----- |----- |----- |---- | 20 | |success |Function |否 | |接口调用成功的回调函数 | 21 | |fail |Function |否 | |接口调用失败的回调函数 | 22 | |complete |Function |否 | |接口调用结束时的回调函数(调用成功、调用失败都会执行)| 23 | ## 示例 24 | ### 代码示例 25 | * 在 js 文件中 26 | 27 | ```js 28 | Page({ 29 | startLocationUpdate() { 30 | swan.startLocationUpdate({ 31 | success: res => console.log('开启小程序接收位置消息成功'), 32 | fail: err => console.error('开启小程序接收位置消息失败:', err), 33 | complete: msg => console.log('调用开启小程序接收位置消息API完成') 34 | }); 35 | } 36 | }) 37 | ``` 38 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/location/swan-stopLocationUpdate.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: swan.stopLocationUpdate 3 | header: develop 4 | nav: api 5 | sidebar: swan-stopLocationUpdate 6 | --- 7 | 8 | > 基础库 3.150.1 版本开始支持。 9 | 10 | **解释**:关闭监听实时位置变化 11 | 12 | ## 方法参数 13 | 14 | Object object 15 | 16 | ### `object`参数说明 17 | 18 | |属性名 |类型 |必填 |默认值 |说明 | 19 | |---- |----- |----- |----- |---- | 20 | |success |Function |否| |接口调用成功的回调函数 | 21 | |fail |Function |否 | |接口调用失败的回调函数 | 22 | |complete |Function |否 | |接口调用结束的回调函数(调用成功、调用失败都会执行)| 23 | 24 | ## 示例 25 | ### 代码示例 26 | 27 | * 在 js 文件中 28 | 29 | ```js 30 | Page({ 31 | startLocationUpdate() { 32 | swan.stopLocationUpdate({ 33 | success: res => console.log('关闭小程序接收位置消息成功'), 34 | fail: err => console.error('关闭小程序接收位置消息失败:', err), 35 | complete: msg => console.log('调用关闭小程序接收位置消息API完成') 36 | }); 37 | } 38 | }) 39 | ``` 40 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/media/arcameracontext_ARCameraContext-reset.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ARCameraContext.reset 3 | header: develop 4 | nav: api 5 | sidebar: arcameracontext_ARCameraContext-reset 6 | --- 7 | 8 | 9 | 10 | 11 | **解释**:重置相机 12 | 13 | 14 | ## 方法参数 15 | 16 | Object object 17 | 18 | ### `object`参数说明 19 | 20 | |参数 |类型 | 默认值 |必填|说明| 21 | |---- | ---- | ---- |---- |--| 22 | |success| Function | | 否 |接口调用成功的回调函数| 23 | |fail | Function | | 否 |接口调用失败的回调函数| 24 | |complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行)| 25 | 26 | ## 示例 27 | 28 | ### 扫码体验 29 | 30 |
31 | 32 | 请使用百度APP扫码 33 |
34 | 35 | ### 图片示例 36 | 37 | 38 | 参见[ARCameraContext.startRecord](https://smartprogram.baidu.com/docs/develop/api/media/arcameracontext_ARCameraContext-startRecord/)示例内容。 39 | 40 | ### 代码示例 41 | 42 | 参见[ARCameraContext.startRecord](https://smartprogram.baidu.com/docs/develop/api/media/arcameracontext_ARCameraContext-startRecord/)示例内容。 -------------------------------------------------------------------------------- /program-docs/docs/develop/api/open/authorize_set.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 获取用户授权设置 3 | header: develop 4 | nav: api 5 | sidebar: authorize_set 6 | --- 7 | 8 | 9 | 10 | 11 | > 在真正需要使用授权接口时,才向用户发起授权申请,并需要在授权申请中说明清楚要使用该功能的理由。 12 | 13 | 1. 开发者可以使用 [swan.getSetting](https://smartprogram.baidu.com/docs/develop/api/open/setting_swan-openSetting/) 获取用户的当前设置。 14 | 15 | 2. 打开设置界面 16 | 17 | * **用户打开设置界面方法**: 18 | 可以在小程序设置界面(“右上角 -> 关于 -> 右上角 -> 权限管理”)中控制对该小程序的授权状态。 19 | 20 | * **开发者打开设置界面方法**: 21 | 可以调用 [swan.openSetting](https://smartprogram.baidu.com/docs/develop/api/open/setting_swan-openSetting/) 调起客户端智能小程序设置界面,返回用户设置的操作结果。 22 | 23 | 3. 开发者可以使用 [swan.authorize](https://smartprogram.baidu.com/docs/develop/api/open/authorize_swan-authorize/) 提前向用户发起授权请求。 24 | 25 | **授权有效期** 26 | 一旦用户明确同意或拒绝过授权,其授权关系会记录在后台,直到用户主动删除小程序。 27 | 28 | 29 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/open/userinfo_signature.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: signature 计算方法 3 | header: develop 4 | nav: api 5 | sidebar: userinfo_signature 6 | --- 7 | 8 | 9 | 10 | ```js 11 | // 生成签名 12 | // appkey 小程序标识 13 | // secret_key 小程序私钥 14 | // swanid 用户swanid 15 | func generageSignature(appKey, secrectKey, swanID string) string { 16 | plainText := fmt.Sprintf("appkey=%ssecret_key=%sswanid=%s", appKey, secrectKey, swanID) 17 | md5Sum := md5.Sum([]byte(plainText)) 18 | return hex.EncodeToString(md5Sum[:]) 19 | } 20 | ``` 21 | 22 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/open/userinfo_swanid.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: swanid机制说明 3 | header: develop 4 | nav: api 5 | sidebar: userinfo_swanid 6 | --- 7 | 8 | 9 | 10 | 11 | 由于宿主应用并不一定强制用户登录,因此用户也有可能处于未登录状态。此时开发者可能不希望通过调用`swan.login()`强制用户登录,而是希望直接使用用户的设备标识来关联用户,存储一些非敏感的数据。因此智能小程序还提供一个 SwanID 的标识,可视作用户的设备标识。 12 | * 用户在同一台设备上使用同一个开发者所开发的不同智能小程序,得到的是相同的 SwanID 。 13 | * 用户在同一台设备上使用不同开发者所开发的不同智能小程序,得到的 SwanID 是不同的。 14 | 开发者通过对比接口中返回的`swanid_signature`和采用signature 计算方法 的计算值是否一致来判断 swanid 是否有效。 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-closePath.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.closePath 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-closePath 6 | --- 7 | 8 | 9 | 10 | **解释**:关闭一个路径。 11 | 12 | 13 | ## 方法参数 14 | 15 | 无 16 | ## 示例 17 | 18 | 在开发者工具中预览效果 19 | 20 | ### 扫码体验 21 | 22 |
23 | 24 | 请使用百度APP扫码 25 |
26 | 27 | ### 图片示例 28 | ![图片](../../../../img/api/canvas/closePath.png) 29 | 30 | ### 代码示例 31 | 32 | 33 | :::codeTab 34 | ```js 35 | const canvasContext = swan.createCanvasContext('myCanvas'); 36 | canvasContext.moveTo(100, 100); 37 | canvasContext.lineTo(10, 100); 38 | canvasContext.lineTo(10, 10); 39 | canvasContext.closePath(); 40 | canvasContext.stroke(); 41 | canvasContext.draw(); 42 | ``` 43 | ::: 44 | 45 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-fill.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.fill 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-fill 6 | --- 7 | 8 | 9 | 10 | **解释**:对当前路径中的内容进行填充。默认的填充色为黑色。 11 | 12 | 13 | ## 方法参数 14 | 15 | 无 16 | ## 示例 17 | 18 | 19 | ### 扫码体验 20 | 21 |
22 | 23 | 请使用百度APP扫码 24 |
25 | 26 | ### 图片示例 27 | ![图片](../../../../img/api/canvas/fill.png) 28 | 29 | ### 代码示例 30 | 31 | 在开发者工具中预览效果 32 | :::codeTab 33 | ```js 34 | const canvasContext = swan.createCanvasContext('myCanvas'); 35 | canvasContext.moveTo(100, 100); 36 | canvasContext.lineTo(10, 100); 37 | canvasContext.lineTo(10, 10); 38 | canvasContext.fill(); 39 | canvasContext.draw(); 40 | ``` 41 | ::: 42 | 43 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-fillRect.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.fillRect 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-fillRect 6 | --- 7 | 8 | 9 | **解释**:填充一个矩形。 10 | 11 | 12 | 13 | |参数名|属性|必填|默认值|说明| 14 | |----|----|----|---|---| 15 | |`x`|Number|是||矩形路径左上角的 x 坐标。| 16 | | `y`|Number|是||矩形路径左上角的 y 坐标。| 17 | |`width`|Number|是||矩形路径的宽度。| 18 | | `height`|Number|是||矩形路径的高度。| 19 | ## 示例 20 | 21 | 在开发者工具中预览效果 22 | 23 | ### 扫码体验 24 | 25 |
26 | 27 | 请使用百度APP扫码 28 |
29 | 30 | ### 图片示例 31 | ![图片](../../../../img/api/canvas/rect.png) 32 | 33 | ### 代码示例 34 | 35 | 36 | :::codeTab 37 | ```js 38 | const canvasContext = swan.createCanvasContext('myCanvas'); 39 | canvasContext.setFillStyle('blue'); 40 | canvasContext.fillRect(30, 30, 150, 75); 41 | canvasContext.draw(); 42 | ``` 43 | ::: 44 | 45 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-lineTo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.lineTo 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-lineTo 6 | --- 7 | 8 | 9 | 10 | **解释**:lineTo 方法增加一个新点,然后创建一条从上次指定点到目标点的线。 11 | 12 | 13 | ## 方法参数 14 | 15 | |参数名|属性|必填|默认值|说明| 16 | |----|----|----|---|---| 17 | |`x`|Number|是|| 目标位置的 x 坐标| 18 | | `y`|Number|是|| 目标位置的 y 坐标| 19 | ## 示例 20 | 21 | 在开发者工具中预览效果 22 | 23 | ### 扫码体验 24 | 25 |
26 | 27 | 请使用百度APP扫码 28 |
29 | 30 | ### 图片示例 31 | ![图片](../../../../img/api/canvas/lineTo.png) 32 | 33 | ### 代码示例 34 | 35 | 36 | :::codeTab 37 | 38 | ```js 39 | const canvasContext = swan.createCanvasContext('myCanvas'); 40 | canvasContext.moveTo(10, 10); 41 | canvasContext.rect(10, 10, 100, 50); 42 | canvasContext.lineTo(110, 60); 43 | canvasContext.stroke(); 44 | canvasContext.draw(); 45 | ``` 46 | ::: 47 | 48 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-moveTo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.moveTo 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-moveTo 6 | --- 7 | 8 | 9 | 10 | 11 | **解释**:把路径移动到画布中的指定点,不创建线条。 12 | 13 | 14 | ## 方法参数 15 | 16 | |参数名|属性|必填|默认值|说明| 17 | |----|----|----|---|---| 18 | | `x`|Number|是|| 目标位置的 x 坐标| 19 | | `y`|Number|是||目标位置的 y 坐标| 20 | ## 示例 21 | 22 | 在开发者工具中预览效果 23 | 24 | ### 扫码体验 25 | 26 |
27 | 28 | 请使用百度APP扫码 29 |
30 | 31 | ### 图片示例 32 | ![图片](../../../../img/api/canvas/moveTo.png) 33 | 34 | ### 代码示例 35 | 36 | 37 | :::codeTab 38 | ```js 39 | const canvasContext = swan.createCanvasContext('myCanvas'); 40 | canvasContext.moveTo(10, 10); 41 | canvasContext.lineTo(100, 10); 42 | canvasContext.moveTo(10, 100); 43 | canvasContext.lineTo(100, 100); 44 | canvasContext.stroke(); 45 | canvasContext.draw(); 46 | ``` 47 | ::: 48 | 49 | 50 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-rect.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.rect 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-rect 6 | --- 7 | 8 | 9 | 10 | **解释**:创建一个矩形。 11 | 12 | 13 | ## 方法参数 14 | 15 | 16 | |参数名|属性|必填|默认值|说明| 17 | |----|----|----|---|---| 18 | | `x`|Number|是|| 矩形路径左上角的 x 坐标。| 19 | |`y`|Number|是|| 矩形路径左上角的 y 坐标。| 20 | | `width`|Number|是|| 矩形路径的宽度。| 21 | | `height`|Number|是|| 矩形路径的高度。| 22 | ## 示例 23 | 24 | 在开发者工具中预览效果 25 | 26 | ### 扫码体验 27 | 28 |
29 | 30 | 请使用百度APP扫码 31 |
32 | 33 | ### 图片示例 34 | ![图片](../../../../img/api/canvas/rect.png) 35 | 36 | ### 代码示例 37 | 38 | 39 | :::codeTab 40 | ```js 41 | const canvasContext = swan.createCanvasContext('myCanvas'); 42 | canvasContext.rect(30, 30, 150, 75); 43 | canvasContext.setFillStyle('blue'); 44 | canvasContext.fill(); 45 | canvasContext.draw(); 46 | ``` 47 | ::: 48 | 49 | 50 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-save.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.save 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-save 6 | --- 7 | 8 | 9 | 10 | **解释**:保存当前的绘图上下文。 11 | 12 | 13 | 14 | ## 示例 15 | 16 | 在开发者工具中预览效果 17 | 18 | ### 扫码体验 19 | 20 |
21 | 22 | 请使用百度APP扫码 23 |
24 | 25 | ### 图片示例 26 | ![图片](../../../../img/api/canvas/save.png) 27 | 28 | ### 代码示例 29 | 30 | 31 | :::codeTab 32 | ```js 33 | const canvasContext = swan.createCanvasContext('myCanvas'); 34 | // 保存默认填充样式 35 | canvasContext.save(); 36 | canvasContext.setFillStyle('blue'); 37 | canvasContext.fillRect(10, 10, 150, 100); 38 | 39 | // 恢复到以前保存的状态 40 | canvasContext.restore(); 41 | canvasContext.fillRect(50, 50, 150, 100); 42 | 43 | canvasContext.draw(); 44 | ``` 45 | ::: 46 | 47 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-setStrokeStyle.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.setStrokeStyle 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-setStrokeStyle 6 | --- 7 | 8 | 9 | 10 | **解释**:设置边框颜色。 11 | 12 | 13 | ## 方法参数 14 | 15 | [Color](/develop/api/canvas_color/) color 16 | ## 示例 17 | 18 | 在开发者工具中预览效果 19 | 20 | ### 扫码体验 21 | 22 |
23 | 24 | 请使用百度APP扫码 25 |
26 | 27 | ### 图片示例 28 | ![图片](../../../../img/api/canvas/setStrokeStyle.png) 29 | 30 | ### 代码示例 31 | 32 | 33 | :::codeTab 34 | ```js 35 | const canvasContext = this.createCanvasContext('myCanvas'); 36 | canvasContext.setStrokeStyle('blue'); 37 | canvasContext.strokeRect(30, 30, 150, 75); 38 | canvasContext.draw(); 39 | ``` 40 | ::: 41 | 42 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-stroke.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.stroke 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-stroke 6 | --- 7 | 8 | 9 | **解释**:画出当前路径的边框。默认颜色为黑色。 10 | 11 | 12 | ## 方法参数 13 | 14 | 无 15 | ## 示例 16 | 17 | 在开发者工具中预览效果 18 | 19 | ### 扫码体验 20 | 21 |
22 | 23 | 请使用百度APP扫码 24 |
25 | 26 | ### 图片示例 27 | ![图片](../../../../img/api/canvas/stroke.png) 28 | 29 | 30 | ### 代码示例 31 | 32 | 33 | :::codeTab 34 | ```js 35 | const canvasContext = swan.createCanvasContext('myCanvas'); 36 | canvasContext.moveTo(100, 100); 37 | canvasContext.lineTo(10, 100); 38 | canvasContext.lineTo(10, 10); 39 | canvasContext.stroke(); 40 | canvasContext.draw(); 41 | ``` 42 | ::: 43 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-strokeRect.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.strokeRect 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-strokeRect 6 | --- 7 | 8 | 9 | 10 | **解释**:画一个矩形(非填充)。 11 | 12 | 13 | ## 方法参数 14 | 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | | `x`|Number |是||矩形路径左上角的 x 坐标。| 19 | | `y`|Number |是||矩形路径左上角的 y 坐标。| 20 | | `width`|Number |是||矩形路径的宽度。| 21 | | `height`|Number |是||矩形路径的高度。| 22 | ## 示例 23 | 24 | 在开发者工具中预览效果 25 | 26 | ### 扫码体验 27 | 28 |
29 | 30 | 请使用百度APP扫码 31 |
32 | 33 | ### 图片示例 34 | ![图片](../../../../img/api/canvas/setStrokeStyle.png) 35 | 36 | ### 代码示例 37 | 38 | 39 | :::codeTab 40 | ```js 41 | const canvasContext = swan.createCanvasContext('myCanvas'); 42 | canvasContext.setStrokeStyle('blue'); 43 | canvasContext.strokeRect(30, 30, 150, 75); 44 | canvasContext.draw(); 45 | ``` 46 | ::: 47 | 48 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasContext-transform.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasContext.transform 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasContext-transform 6 | --- 7 | 8 | 9 | **解释**:使用矩阵多次叠加当前变换的方法。 10 | 11 | ## 方法参数 12 | 13 | 14 | |属性名 |类型 |必填 | 默认值 |说明| 15 | |:---- |:---- |:---- |:----|:----| 16 | | `scaleX`|Number|是|| 水平缩放 | 17 | | `skewX`|Number|是|| 水平倾斜 | 18 | | `skewY`|Number|是|| 垂直倾斜 | 19 | | `scaleY`|Number|是|| 垂直缩放| 20 | | `translateX`|Number|是|| 水平移动 | 21 | | `translateY`|Number|是|| 垂直移动 | 22 | -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/canvas_CanvasGradient.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CanvasGradient 3 | header: develop 4 | nav: api 5 | sidebar: canvas_CanvasGradient 6 | --- 7 | **解释**:渐变对象,[CanvasContext.createLinearGradient](http://localhost:4000/docs/develop/api/show/canvas_CanvasContext-createLinearGradient/)的返回值。 8 | 9 | ### 方法列表 10 | 11 | |方法 |说明 | 12 | |---- | ---- | 13 | |[addColorStop](/develop/api/show/canvas_CanvasGradient-addColorStop/)|创建一个颜色的渐变点。| -------------------------------------------------------------------------------- /program-docs/docs/develop/api/show/createanimation_Animationn-scaleZ.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Animation.scaleZ 3 | header: develop 4 | nav: api 5 | sidebar: createanimation_Animation-scaleZ 6 | --- 7 | 8 | 9 | 10 | **解释**: 缩放 Z 轴 11 | 12 | ## 方法参数 13 | 14 | Number sz 15 | 16 | ### 参数说明 17 | 18 | 在Z轴缩放sz倍数 19 | 20 | -------------------------------------------------------------------------------- /program-docs/docs/develop/appendix/frequently.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 其它常见问题 3 | header: develop 4 | nav: faq 5 | sidebar: frequently 6 | --- 7 | 8 | #### Q:实现分享功能需要开通什么权限吗? 9 | 10 | A:实现分享功能,不需要开通权限,分享出去的链接在测试环境是不能回流到小程序的,必须是线上的环境才可以。 11 | 12 | #### Q:百度小程序有没有获取代理IP地址的接口? 13 | 14 | A:暂时没有。 15 | 16 | #### Q:小程序审核发布后,多久可以生效? 17 | 18 | A:最长不会超过48小时。 19 | 20 | #### Q:请教下,一个小程序可以绑定两个熊掌ID吗? 21 | 22 | A:不支持,一个小程序只能绑定一个熊掌ID。 23 | 24 | 25 | 26 | #### Q:百度小程序绑定的熊掌 ID 还可以更改吗? 27 | 28 | A:目前是不支持把熊掌ID修改成其他的百家号。 29 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/collection.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: collection 3 | header: develop 4 | nav: cloud 5 | sidebar: collection 6 | --- 7 | 8 | 9 | 10 | **解释**:获取数据库集合的引用。 11 | 12 | **参数说明** 13 | 该方法传入一个`name`参数,参数类型为字符串类型,指定需引用的集合名称。 14 | 15 | 16 | **代码示例** 17 | 18 | ```js 19 | const db = swan.cloud.database(); 20 | const testCollection = db.collection('users'); 21 | ``` 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/collection_doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: collection.doc 3 | header: develop 4 | nav: cloud 5 | sidebar: collection_doc 6 | --- 7 | 8 | 9 | **解释**:获取数据库集合中记录的引用。 10 | 11 | **参数说明** 12 | 该方法传入一个`ID`参数,参数类型为字符串类型,指定需引用的记录`ID`。 13 | 14 | 15 | 16 | **代码示例** 17 | 18 | ```js 19 | const doc = db.collection('users').doc('docId'); 20 | ``` 21 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/collection_field.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: collection.field 3 | header: develop 4 | nav: cloud 5 | sidebar: collection_field 6 | --- 7 | 8 | 9 | 10 | **解释**:指定返回结果中记录需返回的字段。 11 | 12 | **参数说明** 13 | 该方法的传入参数为必填参数,参数类型为对象类型,用来指定需返回的字段。 14 | 15 | 16 | **代码示例** 17 | 18 | ```js 19 | swan.cloud.init({ 20 | env: 'envId' 21 | }); 22 | const db = swan.cloud.database(); 23 | db.collection('users') 24 | .field({ 25 | age: true, 26 | address: true, 27 | tags: true 28 | }) 29 | .get() 30 | .then(res => { 31 | console.log(res); 32 | }) 33 | .catch(err => { 34 | console.warn(err); 35 | }); 36 | 37 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/collection_limit.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: collection.limit 3 | header: develop 4 | nav: cloud 5 | sidebar: collection_limit 6 | --- 7 | 8 | 9 | 10 | 11 | **解释**:指定查询结果集数量上限。 12 | 13 | 14 | **参数说明** 15 | 该方法的传入参数为必填参数,参数类型为数字类型,用来定义最大结果集返回数量,最大为20。 16 | 17 | **代码示例** 18 | 19 | ```js 20 | swan.cloud.init({ 21 | env: 'envId' 22 | }); 23 | const db = swan.cloud.database(); 24 | db.collection('users') 25 | .limit(10) // 获取10条记录 26 | .get() 27 | .then(res => { 28 | console.log(res); 29 | }) 30 | .catch(err => { 31 | console.warn(err); 32 | }); 33 | ``` 34 | 35 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: db.command 3 | header: develop 4 | nav: cloud 5 | siderbar: command 6 | --- 7 | 8 | 9 | 10 | **解释**:数据库相关查询及更新指令。 11 | 12 | **代码示例** 13 | 14 | ```js 15 | const _ = db.command 16 | ``` 17 | 18 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_and.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.and 3 | header: develop 4 | nav: cloud 5 | siderbar: command_and 6 | --- 7 | 8 | 9 | 10 | **解释**:数据库查询指令,用于连接多个筛选条件,各条件之间满足逻辑"与"的关系,该指令可接受数组类型的参数。 11 | 12 | 例如,筛选出数据表中age大于25且小于50的用户 13 | 14 | **代码示例** 15 | 16 | 级联查询写法: 17 | 18 | ```js 19 | swan.cloud.init({ 20 | env: 'envId' 21 | }); 22 | const db = swan.cloud.database(); 23 | db.collection('users') 24 | .where({ 25 | age: _.gt(25).and(_.lt(50)) 26 | }) 27 | ``` 28 | 29 | 前置查询写法: 30 | 31 | ```js 32 | swan.cloud.init({ 33 | env: 'envId' 34 | }); 35 | const db = swan.cloud.database(); 36 | db.collection('users') 37 | .where({ 38 | age: _.and(_.gt(25), _.lt(50)) // and指令同时支持传入数组,_.and([_.gt(25), _.lt(50)]) 39 | }) 40 | ``` 41 | 42 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_eq.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.eq 3 | header: develop 4 | nav: cloud 5 | siderbar: command_eq 6 | --- 7 | 8 | 9 | **解释**:数据库查询指令,用于查询字段等于某个值,该指令接受一个参数,可以是`number`,`string`,`object`,`boolean`,`array`。 10 | 11 | **代码示例** 12 | 13 | 例如,查询一条标题为'smartprogram'的新闻时,可以有以下两种查询方式: 14 | 15 | **传入值的方式** 16 | 17 | ```js 18 | swan.cloud.init({ 19 | env: 'envId' 20 | }); 21 | const db = swan.cloud.database(); 22 | db.collection('news') 23 | .where({ 24 | title: 'smartprogram' 25 | }) 26 | ``` 27 | 28 | **查询指令方式** 29 | 30 | ```js 31 | swan.cloud.init({ 32 | env: 'envId' 33 | }); 34 | const db = swan.cloud.database(); 35 | const _ = db.command; 36 | db.collection('news') 37 | .where({ 38 | title: _.eq('smartprogram') 39 | }) 40 | ``` 41 | 42 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_gt.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.gt 3 | header: develop 4 | nav: cloud 5 | siderbar: command_gt 6 | --- 7 | 8 | 9 | **解释**:数据库查询指令,表示查询的字段大于某个值。 10 | 11 | **代码示例** 12 | 13 | 例如,查询数据表中age大于25的所有用户 14 | 15 | ```js 16 | swan.cloud.init({ 17 | env: 'envId' 18 | }); 19 | const db = swan.cloud.database(); 20 | const _ = db.command; 21 | db.collection('users') 22 | .where({ 23 | age: _.gt(25) 24 | }) 25 | .get({ 26 | success: users => console.log(users); 27 | fail: err => console.warn(err); 28 | }); 29 | ``` 30 | 31 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_gte.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.in 3 | header: develop 4 | nav: cloud 5 | siderbar: command_in 6 | --- 7 | 8 | 9 | 10 | **解释**:数据库查询筛选指令,表示查询字段的值需在指定的数组中,传入的参数必须为Array类型。 11 | 12 | 例如,查询age为25或者26的用户 13 | 14 | **代码示例** 15 | 16 | ```js 17 | swan.cloud.init({ 18 | env: 'envId' 19 | }); 20 | const db = swan.cloud.database(); 21 | const _ = db.command; 22 | db.collection('users') 23 | .where({ 24 | age: _.in([25, 26]) 25 | }) 26 | .get({ 27 | success: users => console.log(users); 28 | fail: err => console.warn(err); 29 | }); 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_in.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.in 3 | header: develop 4 | nav: cloud 5 | siderbar: command_in 6 | --- 7 | 8 | 9 | 10 | **解释**:数据库查询筛选指令,表示查询字段的值需在指定的数组中,传入的参数必须为Array类型。 11 | 12 | 例如,查询age为25或者26的用户 13 | 14 | **代码示例** 15 | 16 | ```js 17 | swan.cloud.init({ 18 | env: 'envId' 19 | }); 20 | const db = swan.cloud.database(); 21 | const _ = db.command; 22 | db.collection('users') 23 | .where({ 24 | age: _.in([25, 26]) 25 | }) 26 | .get({ 27 | success: users => console.log(users); 28 | fail: err => console.warn(err); 29 | }); 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_inc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.inc 3 | header: develop 4 | nav: cloud 5 | siderbar: command_inc 6 | --- 7 | 8 | 9 | 10 | **解释**:数据库更新指令,用于将记录中的某个字段自增加指定的值。 11 | 12 | **代码示例** 13 | 14 | 将age的值自增加1: 15 | 16 | ```js 17 | swan.cloud.init({ 18 | env: 'envId' 19 | }); 20 | const db = swan.cloud.database(); 21 | const _ = db.command; 22 | db.collection('users') 23 | .doc('docId') 24 | .update({ 25 | age: _.inc(1) 26 | }) 27 | ``` 28 | 29 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_lt.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.lt 3 | header: develop 4 | nav: cloud 5 | siderbar: command_lt 6 | --- 7 | 8 | 9 | 10 | 11 | **解释**:数据库查询指令,表示查询的字段小于某个值。 12 | 13 | **代码示例** 14 | 15 | 例如,查询数据表中age小于25的所有用户 16 | 17 | ```js 18 | swan.cloud.init({ 19 | env: 'envId' 20 | }); 21 | const db = swan.cloud.database(); 22 | const _ = db.command; 23 | db.collection('users') 24 | .where({ 25 | age: _.lt(25) 26 | }) 27 | .get({ 28 | success: users => console.log(users); 29 | fail: err => console.warn(err); 30 | }); 31 | ``` 32 | 33 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_lte.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.lte 3 | header: develop 4 | nav: cloud 5 | siderbar: command_lte 6 | --- 7 | 8 | 9 | 10 | **解释**:数据库查询指令,表示查询的字段小于或等于某个值。 11 | 12 | **代码示例** 13 | 14 | 例如,查询数据表中age小于或等于25的所有用户 15 | 16 | ```js 17 | swan.cloud.init({ 18 | env: 'envId' 19 | }); 20 | const db = swan.cloud.database(); 21 | const _ = db.command; 22 | db.collection('users') 23 | .where({ 24 | age: _.lte(25) 25 | }) 26 | .get({ 27 | success: users => console.log(users); 28 | fail: err => console.warn(err); 29 | }); 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_mul.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.mul 3 | header: develop 4 | nav: cloud 5 | siderbar: command_mul 6 | --- 7 | 8 | 9 | **解释**:数据库更新指令,用于将记录中的某个字段自乘指定的值。 10 | 11 | **代码示例** 12 | 13 | 将age的值乘以2: 14 | 15 | ```js 16 | swan.cloud.init({ 17 | env: 'envId' 18 | }); 19 | const db = swan.cloud.database(); 20 | const _ = db.command; 21 | db.collection('users') 22 | .doc('docId') 23 | .update({ 24 | age: _.mul(2) 25 | }) 26 | ``` 27 | 28 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_neq.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.neq 3 | header: develop 4 | nav: cloud 5 | siderbar: command_neq 6 | --- 7 | 8 | 9 | 10 | **解释**:数据库查询指令,与command.eq指令相反,表示查询的字段不等于某个值。 11 | 12 | **代码示例** 13 | 14 | ```js 15 | swan.cloud.init({ 16 | env: 'envId' 17 | }); 18 | const db = swan.cloud.database(); 19 | const _ = db.command; 20 | db.collection('users') 21 | .where({ 22 | address: _.neq('beijing') 23 | }) 24 | ``` 25 | 26 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_nin.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.nin 3 | header: develop 4 | nav: cloud 5 | siderbar: command_nin 6 | --- 7 | 8 | 9 | 10 | **解释**:数据库查询筛选指令,与command.in相反,表示查询字段的值需不在指定的数组中,传入的参数必须为Array类型。 11 | 12 | 例如,查询age不为25或者26的用户 13 | 14 | **代码示例** 15 | 16 | ```js 17 | swan.cloud.init({ 18 | env: 'envId' 19 | }); 20 | const db = swan.cloud.database(); 21 | const _ = db.command; 22 | db.collection('users') 23 | .where({ 24 | age: _.nin([25, 26]) 25 | }) 26 | .get({ 27 | success: users => console.log(users); 28 | fail: err => console.warn(err); 29 | }); 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_pop.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.pop 3 | header: develop 4 | nav: cloud 5 | siderbar: command_pop 6 | --- 7 | 8 | 9 | 10 | **解释**:数据库更新指令,该指令需要操作一个类型为数组的字段,并删除其最后一个元素。 11 | 12 | **代码示例** 13 | 14 | ```js 15 | swan.cloud.init({ 16 | env: 'envId' 17 | }); 18 | const db = swan.cloud.database(); 19 | const _ = db.command; 20 | db.collection('users') 21 | .doc('docId') 22 | .update({ 23 | tags: _.pop() 24 | }) 25 | ``` 26 | 27 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_remove.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.remove 3 | header: develop 4 | nav: cloud 5 | siderbar: command_remove 6 | --- 7 | 8 | 9 | 10 | 11 | **解释**:数据库更新指令,用于删除记录中的某个字段。 12 | 13 | 删除age字段: 14 | 15 | **代码示例** 16 | ```js 17 | swan.cloud.init({ 18 | env: 'envId' 19 | }); 20 | const db = swan.cloud.database(); 21 | const _ = db.command; 22 | db.collection('users') 23 | .doc('docId') 24 | .update({ 25 | age: _.remove() 26 | }) 27 | ``` 28 | 29 | 删除多条记录: 30 | 31 | **代码示例** 32 | 33 | ```js 34 | // 需在 Server 端进行操作(云函数),通过 where 语句选取多条记录执行删除, 35 | // 使用 async await 语法 36 | const cloud = require('swan-server-sdk') 37 | const db = cloud.database() 38 | const _ = db.command 39 | 40 | exports.main = async (event, context) => { 41 | try { 42 | return await db.collection('todos').where({ 43 | done: true 44 | }).remove() 45 | } catch(e) { 46 | console.error(e) 47 | } 48 | } 49 | ``` 50 | 51 | 用户只能操作自己的数据(自己的Todo),不能操作其他人的数据(其他人的待办事项),需要引入权限控制。 52 | 53 | 54 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_shift.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.shift 3 | header: develop 4 | nav: cloud 5 | siderbar: command_shift 6 | --- 7 | 8 | 9 | 10 | 11 | **解释**:数据库更新指令,该指令需要操作一个类型为数组的字段,并删除其第一个元素。 12 | 13 | **代码示例** 14 | 15 | ```js 16 | swan.cloud.init({ 17 | env: 'envId' 18 | }); 19 | const db = swan.cloud.database(); 20 | const _ = db.command; 21 | db.collection('users') 22 | .doc('docId') 23 | .update({ 24 | tags: _.shift() 25 | }) 26 | ``` 27 | 28 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/command_unshift.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: command.unshift 3 | header: develop 4 | nav: cloud 5 | siderbar: command_unshift 6 | --- 7 | 8 | 9 | 10 | **解释**:数据库更新指令,该指令需要操作一个类型为数组的字段,并向其头部插入一个或多个元素。传入参数类型需为数组类型。 11 | 12 | **代码示例** 13 | 14 | ```js 15 | swan.cloud.init({ 16 | env: 'envId' 17 | }); 18 | const db = swan.cloud.database(); 19 | const _ = db.command; 20 | db.collection('users') 21 | .doc('docId') 22 | .update({ 23 | tags: _.unshift(['smartprogram']) 24 | }) 25 | ``` 26 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_database/database.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: database 3 | header: develop 4 | nav: cloud 5 | sidebar: cloud_database_database 6 | --- 7 | 8 | 9 | 10 | **解释**:获取数据库的引用。 11 | 12 | **参数说明** 13 | 该方法传入一个可选参数,参数类型为对象类型,指定引用的数据库的环境ID。如果该方法中未传入指定环境ID,则默认使用`swan.cloud.init`方法中传入的环境ID作为获取数据库引用的环境ID。 14 | 15 | **代码示例** 16 | 17 | 获取默认环境的数据库引用: 18 | 19 | ```js 20 | const db = swan.cloud.database(); 21 | ``` 22 | 23 | 获取指定环境的数据库引用: 24 | 25 | ```js 26 | const db = swan.cloud.database({ 27 | env: 'test-envid' 28 | }); 29 | ``` 30 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_essentials.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 云数据库 3 | header: develop 4 | nav: cloud 5 | sidebar: cloud_essentials 6 | --- 7 | 8 | 9 | 云开发提供了一个 NoSQL 文档数据库,可供开发者存储、查询数据。开发者可以在智能小程序端和云函数端通过 SDK 对数据库进行操作。按照云数据库的 NoSQL 数据模型,一个云数据库可以拥有多个集合(相当于关系型数据库中表的概念),每一个集合都可以包含若干条记录,每一条记录都是一则类似 JSON 格式的文档,包含一系列字段和对应的值。开发者可以通过指定各类检索条件、排序和数量限制来查询云数据库中的记录。 10 | 11 | 下面是一条记录的简单示例。 12 | 13 | **代码示例** 14 | 15 | ```json 16 | { 17 | "_id": "358a732d-bd8d-45a5-bd9c-9874e1a654c4", 18 | "title": "一个标题", 19 | "content": "内容", 20 | "author": "作者用户ID", 21 | "comments": [ 22 | { 23 | "message": "评论内容", 24 | "user": "评论用户ID" 25 | }, 26 | { 27 | "message": "另一个评论内容", 28 | "user": "另一个评论用户ID" 29 | } 30 | ] 31 | } 32 | ``` 33 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_essentials_function.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 云函数 3 | header: develop 4 | nav: cloud 5 | sidebar: cloud_essentials_function 6 | --- 7 | 8 | 9 | 10 | 11 | 借助云开发中提供的云函数能力,开发者可以在托管的环境中运行智能小程序的服务端代码,云函数引擎会根据业务对计算资源的使用规律自动调节其规模,开发者亦无需配置、管理、更新和修补自己的服务器。开发者可以在智能小程序端通过 SDK 触发运行云函数,在服务端执行应用逻辑,并将结果返回给智能小程序端。在云函数内,开发者可以访问云数据库和云存储中的数据,还可以调用其他云函数,以实现更复杂的服务端业务编排。 12 | 13 | 云函数相比于传统的开发者自建服务端有以下优势: 14 | * 集成度高。云函数内建智能小程序服务端SDK,与智能小程序开发无缝整合。 15 | * 运维成本低。开发者仅需关注业务逻辑开发,云函数提供运行环境和底层资源的可用性保障,运维成本大幅下降。 16 | * 响应速度快。借助百度智能云容器技术,提供ms级别的响应能力,用户对资源调度和函数启动过程基本无感知。 17 | * 扩展能力强。根据业务并发量所需快速扩展资源,在高并发下依然能保障服务的可用性。 18 | 19 | 20 | 比如我们如下定义一个云函数,命名为 add ,功能是将传入的两个参数 a 和 b 相加: 21 | 22 | **代码示例** 23 | ``` 24 | const cloud = require('swan-server-sdk'); 25 | exports.main = (event, context) => { 26 | let { a, b} = event 27 | let { OPENID, APPID } = cloud.getSwanContext() 28 | let sum = a + b 29 | 30 | return { 31 | OPENID, 32 | APPID, 33 | sum 34 | } 35 | } 36 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_essentials_storage.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 云存储 3 | header: develop 4 | nav: cloud 5 | sidebar: cloud_essentials_storage 6 | --- 7 | 8 | 9 | 10 | 云开发提供的对象存储能力拥有一块云端存储空间,能够允许开发者在智能小程序中上传和下载文件,例如图片、音频、视频或其他各类内容。同时,在云函数中通过服务端 SDK,也可以管理这些文件。 11 | 12 | 下面是一个简单的示例。 13 | 14 | **代码示例** 15 | ``` 16 | // 用户选择一张图片,上传到云存储空间 17 | swan.chooseImage({ 18 | success: chooseResult => { 19 | swan.cloud.uploadFile({ 20 | // 指定上传到的云路径 21 | cloudPath: 'my-photo.png', 22 | // 指定要上传的文件的小程序临时文件路径 23 | filePath: chooseResult.tempFilePaths[0], 24 | // 成功回调 25 | success: res => { 26 | console.log('上传成功', res) 27 | }, 28 | fail: err => { 29 | console.log('上传失败', err) 30 | } 31 | }) 32 | }, 33 | }) 34 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_essentials_user.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 云开发用户集成介绍 3 | header: develop 4 | nav: cloud 5 | sidebar: cloud_essentials_user 6 | --- 7 | 8 | 9 | 10 | 11 | 云开发整合了智能小程序使用者的用户体系,无论用户是否已经登录宿主应用,都会对应一个唯一ID。开发者可以利用这个用户ID在云函数中扩展自己的用户相关业务逻辑,也可以将它应用在云存储和数据库资源中。通过云开发中托管资源的安全规则,在使用智能小程序端 SDK 访问这些资源时,云开发可以识别用户身份,进而实现访问权限控制。在未来的版本中,开发中还可以自己定义不同资源的访问安全规则,实现更灵活的权限控制。 12 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_info.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 云开发介绍 3 | header: develop 4 | nav: cloud 5 | sidebar: cloud_info 6 | --- 7 | 8 | 9 | 智能小程序云开发可以为开发者提供一种 Serverless 的小程序开发模式,开发者无需服务器的维护经验,既可开发上线一个服务端功能完备的智能小程序。 10 | 11 | 智能小程序云开发服务目前提供了数据存储、云函数、数据库等云端服务能力,开发者基于智能小程序开放的云开发api进行开发,就可获得智能小程序的云开发服务能力,无需关心服务器底层的运维设施,更加聚焦于业务本身的实现,可以实现智能小程序的快速迭代和快速部署。 12 | 13 | **云开发是一种新的小程序开发模式,适用于擅长前端技术栈或者不具备服务器运维部署资源的小程序开发团队。** 14 | 15 | 云开发目前提供的核心能力如下: 16 | 17 | * 云数据库:云开发提供了基于 JSON 数据格式存储的云端数据库,开发者可以在智能小程序前端对云数据库进行增删改查的操作,同时也可以在云函数中对数据库进行操作。 18 | * 云存储:开发者可以在智能小程序前端直接上传/下载文件,无需自建存储。 19 | * 云函数:云函数是指在云端可执行的代码,开发者无需服务器的管理成本,可在开发者工具中对云函数进行开发、部署、同步。 20 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/cloud_init.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: swan.cloud.init 3 | header: develop 4 | nav: cloud 5 | sidebar: cloud_init 6 | --- 7 | 8 | 9 | **解释**:使用智能小程序云开发API之前,必须调用该方法初始化云开发环境,如不进行初始化设置,将无法获取开发者当前的环境配置。 10 | 11 | swan.cloud.init 方法的定义如下: 12 | 13 | **代码示例1** 14 | ```js 15 | function init(options): void 16 | ``` 17 | 18 | 此方法接受一个可选的 options 参数,方法没有返回值。方法只能调用一次,多次调用时只有第一次调用生效。 19 | 20 | **参数说明:** 21 | 该方法的传入参数类型为对象类型,用来定义云开发的默认配置,该配置会作为之后调用其他所有云`API`的默认配置,参数说明如下: 22 | 23 | |字段|类型|必填|默认值|说明| 24 | |---|---|---|---|---| 25 | |env|String/Object|是| |环境配置,传入字符串形式的环境`ID`可以指定所有服务的默认环境,传入对象可以分别指定各个服务的默认环境,见下方详细定义| 26 | 27 | 当`env`传入参数为对象时,可以指定各个服务的默认环境,字段如下: 28 | 29 | |字段|类型|必填|默认值|说明| 30 | |---|---|---|---|---| 31 | |database|String|是| |数据库默认环境配置| 32 | |functions|String|是| |云函数默认环境配置| 33 | |storage|String|是| |云存储默认环境配置| 34 | 35 | **代码示例1** 36 | ```js 37 | swan.cloud.init({ 38 | env: 'test-env' 39 | }) 40 | ``` 41 | 42 | **代码示例2** 43 | ```js 44 | swan.cloud.init({ 45 | env: { 46 | database: 'test-database', 47 | functions: 'test-functions', 48 | storage: 'test-storage' 49 | } 50 | }) 51 | ``` 52 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/console.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 概览 3 | header: develop 4 | nav: cloud 5 | sidebar: console 6 | --- 7 | 8 | 9 | 10 | 概览可查看当前环境的环境名称,环境 id,资源使用量和套餐内容。 11 | 12 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/cloud_console_overview.png) 13 | 14 | ### 创建环境 15 | 16 | 智能小程序云开发提供2个免费的云环境。 17 | 18 | 可通过当前环境列表点击`创建环境`进入创建环境的页面。 19 | 20 | ![图片](../../../img/cloud/cloud_console_create_env.png) 21 | 22 | 在创建环境的页面,填入环境名称和选择环境后,点击确认,即可创建新环境。 23 | 24 | ![图片](../../../img/cloud/cloud_console_create_list.png) 25 | 26 | 环境创建成功后会自动进入概览页面。 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/console_data.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 云数据库 3 | header: develop 4 | nav: cloud 5 | sidebar: console_data 6 | --- 7 | 8 | 9 | 管理数据库集合、记录、索引设置。 10 | 11 | ### 合集 12 | 13 | 合集操作包括创建合集,删除合集。 14 | 15 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/cloud_db_overview.png) 16 | 17 | 右击合集名称可删除合集或拷贝合集名称 18 | 19 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/cloud_db_collection1.png) 20 | 21 | ### 文档 22 | 23 | 通过控制台可进行文档的新建,删除,导入,导出,查询。 24 | 25 | 右击文档名称可以删除或拷贝文档 id 26 | 27 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/cloud_db_document.png) 28 | 29 | 对于单个文档可进行字段的查看,新增,修改和删除。 30 | 31 | 字段编辑可以修改字段的 key, 类型和值。其中类型可选为`string`, `number`, `boolean`, `null`, `array`, `object`, `date`, `geopoint` 32 | 33 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/cloud_db_edit.png) 34 | 35 | ### 索引 36 | 37 | 索引管理可以新建,查询,删除索引。 38 | 39 | 添加索引可选唯一非唯一索引。可以添加多个字段。 40 | 41 | > 注意唯一索引需要保证所有文档中该字段的值都不相等。否则索引会创建失败。 42 | 43 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/cloud_db_index.png) 44 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/console_function.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 云函数 3 | header: develop 4 | nav: cloud 5 | sidebar: console_function 6 | --- 7 | 8 | 9 | 10 | 云函数面板可管理云函数、查看调用日志。 11 | 12 | ### 函数管理 13 | 14 | 可新建函数,查询,测试,配置,删除云函数。 15 | 16 | ![图片](../../../img/cloud/cloud_console_function.png) 17 | 18 | #### 新建云函数 19 | 20 | 点击新建云函数,输入函数名和描述可新建云函数。云函数名支持英文字母大小写、数字、- 和 _,第一个字符只能以字母开头,最后一个字符不能为连接符或者下划线,名称长度 1-40。云函数描述不能超过 85 个字符。 21 | 22 | 创建云函数后,默认生成一个空白函数,空白函数的返回值为输入参数。可在开发者工具编辑器中修改、部署云函数。 23 | 24 | 云函数将从index.js中的main方法执行,请确保文件中含有同名函数main 25 | 26 | ![图片](../../../img/cloud/cloud_console_function_new.png) 27 | 28 | #### 配置云函数 29 | 30 | 配置云函数时可配置环境变量。云函数运行时会注入到`process.env` 31 | 32 | 33 | ![图片](../../../img/cloud/cloud_console_function_config.png) 34 | 35 | #### 云函数测试 36 | 37 | 点击云函数测试可测试云函数。测试云函数的参数为 json 格式。编辑好参数点击运行测试即可看到测试结果。 38 | 39 | 40 | ![图片](../../../img/cloud/cloud_console_function_test_result.png) 41 | 42 | 43 | ### 日志 44 | 45 | 日志可按函数名筛选和按request ID 搜索。 46 | 47 | ![图片](../../../img/cloud/cloud_console_function_log.png) 48 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/console_storage.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 云存储 3 | header: develop 4 | nav: cloud 5 | sidebar: console_storage 6 | --- 7 | 8 | 9 | 云存储控制面板可查看管理文件。包括上传文件,新建文件夹,删除文件。 10 | 11 | 点击文件夹可进入文件夹。 12 | 13 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/cloud-develop-bos-folder.png) 14 | 15 | 点击文件会显示文件信息。 16 | 17 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/cloud-develop-bos-file.png) 18 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/guide/editor.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 编辑器中的云函数操作 3 | header: develop 4 | nav: cloud 5 | sidebar: cloud_function_guide_editor 6 | --- 7 | 8 | 9 | 10 | ## 配置云函数本地目录 11 | 在project.config.json文件中设置cloudfunctionRoot字段,即可指定云函数的本地目录,当通过创建云函数项目打开工程时,该字段自动生成。 12 | 13 | ## 云函数操作 14 | 在编辑器中可通过在云函数目录上点击鼠标右键来完成相应操作,目前包括以下功能: 15 | 16 | - 查看当前环境 17 | - 切换环境 18 | - 新建 Node.js 云函数 19 | - 下载线上环境的云函数列表并在本地生成空文件夹 20 | - 下载线上环境的云函数代码并覆盖本地 21 | - 上传并部署云函数到线上环境 22 | 23 | ## 查看和切换环境 24 | 在编辑器云函数根目录上右键,可查看当前的云环境,同时可在二级菜单切换环境,切换环境后会自动同步当前云环境列表(不会自动下载代码)。 25 | 26 | ## 新建 Node.js 云函数 27 | 在云函数根目录上点击右键,可以创建一个新的 Node.js 云函数,开发者工具在本地创建出以下目录和文件: 28 | 29 | - 云函数目录:以云函数名字命名的目录,包含云函数的所有代码 30 | - index.js:云函数入口文件,云函数被调用时会执行的入口文件中导出的 main 方法 31 | - package.json:npm 包定义文件,默认定义了最新 swan-server-sdk 依赖 32 | 33 | **注意:** 新建的云函数在右键上传前需要在本地用命令行 npm install 来安装依赖包 34 | 35 | ## 下载云函数列表 36 | 右键点击同步云函数列表,可以将当前云环境包含的所有云函数同步到本地,并以云函数名称新建相应的目录(如果该目录不存在)。 37 | **注意:** 新建的目录中不包含任何文件,如果需要查看云函数的代码需要右键下载云函数 38 | 39 | ## 下载云函数 40 | 右键点击下载云函数,可以将线上云函数下载到本地硬盘目录中。 41 | 42 | ## 上传并部署 43 | 右键点击上传并部署,可以将选中的云函数目录上传并部署到线上环境中。 44 | 45 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/guide/guide.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 环境 3 | header: develop 4 | nav: guide 5 | sidebar: guide 6 | --- 7 | 8 | 9 | 10 | 环境是云开发各类资源的承载集合。环境与环境之间是完全隔离的,也就是说,不同环境下,所有云上托管资源(数据库、存储、函数等)均不互通。使用云开发服务必须至少创建一个环境,每个环境均有一个唯一的环境 ID,可以在云开发控制台的概览页面找到。 11 | 12 | 一个智能小程序最多可以创建 2 个环境,建议的实践为创建一个开发测试环境和一个线上生产环境。利用环境间数据隔离的特性,在日常开发时使用开发测试环境,正式发布的版本使用线上生产环境,这样可以在开发调试智能小程序的同时保证生产环境数据的稳定性。 13 | 14 | 初始化云开发 SDK 时,可以指定使用哪个环境,参见 [swan.cloud.init](https://smartprogram.baidu.com/docs/develop/cloud/cloud_init/)。在云函数中初始化 SDK 时,如果没有指定环境 ID,则会默认使用该函数当前所处的环境。 15 | 16 | 17 | 18 | 19 | ## 云存储开发常见问题 20 | 21 | #### 文件名有什么限制? 22 | 23 | * 不能为空; 24 | * 不能以 `/` 开头和结尾; 25 | * 不能出现连续的 `/`; 26 | * 文件完整路径不能超过 1000 个字符。 27 | 28 | 29 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/guide/guide_databasefaq.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 数据库开发常见问题 3 | header: develop 4 | nav: guide 5 | sidebar: guide_databasefaq 6 | --- 7 | 8 | 9 | 10 | #### 如果设置记录的唯一ID? 11 | 12 | 在同一个集合中,创建的文档均有一个唯一 ID,存储在 `_id` 字段中。默认情况下,这个字段是一个 UUID,你也可以手动指定,保证唯一即可。 13 | 14 | #### `_cbd_author_id` 字段代表什么含义? 15 | 16 | 当使用智能小程序端 SDK 创建记录(文档)时,云开发会将当前用户的 ID 存储在此字段中,表明该条记录的作者。参考用户集成相关问题。 17 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/guide/guide_dev.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 云开发配额 3 | header: develop 4 | nav: guide 5 | sidebar: guide_dev 6 | --- 7 | 8 | 9 | 10 | 云开发采用套餐制计费,每一档套餐都规定了使用各种云上资源的限制。当前仅有基础版套餐供选择。 11 | 12 | ### 云数据库 13 | 14 | |限额项目|基础版| 15 | |---|---| 16 | |总存储空间|2GB| 17 | |读操作次数|30000次/天| 18 | |写操作次数|30000次/天| 19 | |集合总个数|100| 20 | |单集合索引个数|10| 21 | |同时连接数限制|30| 22 | 23 | ### 云存储 24 | 25 | |限额项目|基础版| 26 | |---|---| 27 | |总存储空间|5GB| 28 | |下载操作次数|50000次/天| 29 | |上传操作次数|50000次/天| 30 | 31 | ### 云函数 32 | 33 | |限额项目|基础版| 34 | |---|---| 35 | |函数总个数|20| 36 | |调用次数|200000次/天| 37 | |资源使用量|40000GB*s/月| 38 | |外网下行流量|1GB/月| 39 | |总并发数限制|100| 40 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/guide/guide_user.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 用户集成相关问题 3 | header: develop 4 | nav: guide 5 | sidebar: guide_user 6 | --- 7 | 8 | 9 | ### 云开发的用户是什么概念? 10 | 在启用云开发的智能小程序中,每一个智能小程序的用户都会对应到云开发当前环境中的一个用户,无论该用户是否登录了宿主应用。在智能小程序端新增数据库记录或者上传文件时,都会将操作者在云开发环境中的用户 ID 记录到相应的资源上,以表示该数据的创建者。当在智能小程序端修改这些数据时,云开发会检查相应的权限,允许或者拒绝修改操作。通过这种方式,可以直接在智能小程序端操作云端数据,而无需在云函数(服务端)进行用户身份的识别和访问权限的控制。 11 | 12 | ### 如何获取用户的 openid 或 swanid 信息? 13 | 在云函数中,可以从函数的 `context` 参数中获取到。已登录的用户可以得到 openid,未登录的用户可以得到 swanid。注意:如果是从云函数中调用另一个云函数,将不会包含用户信息。 14 | 15 | **代码示例** 16 | ``` 17 | exports.main = (event, context) => { 18 | let { OPENID, APPID } = cloud.getSwanContext() // 这里获取到的 openId 和 appId 是可信的 19 | } 20 | ``` 21 | 22 | ### 如果用户在使用智能小程序时,先未登录,后来登录,对应到云开发中是几个用户 ID? 23 | 两个。今后会提供用户合并的功能。 24 | 25 | ### 在什么情况下会进行访问权限控制? 26 | 当使用智能小程序端 SDK 对云数据库和云存储进行操作的时候,会进行该项检查。在云开发控制台和云函数内的操作,不会进行检查和权限控制,可以任意读写。 27 | 28 | ### 目前的访问权限控制是怎样的? 29 | 已登录用户可写、可修改作者为自己的数据,未登录用户可写、不可修改,所有用户可读。 30 | -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/server_sdk/getSwanContext.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: cloud.getSwanContext 3 | header: develop 4 | nav: cloud 5 | sidebar: cloud_server_sdk_getSwanContext 6 | --- 7 | 8 | **解释** 9 | cloud.getSwanContext 获取云函数调用上下文 10 | 11 | **返回值** 12 | 13 | SwanContext: 14 | 15 | |名称|类型|说明| 16 | |---|---|---| 17 | |USERID|String|智能小程序用户ID| 18 | |APPID|String|智能小程序APPID| 19 | |ENV|String|云开发环境| 20 | |SOURCE|String|调用来源| 21 | 22 | **代码示例** 23 | 24 | ``` js 25 | exports.main = (event, context) => { 26 | cloud.init(context) 27 | 28 | const ctx = cloud.getSwanContext() 29 | 30 | return ctx.APPID 31 | } 32 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/cloud/server_sdk/init.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: cloud.init 3 | header: develop 4 | nav: cloud 5 | sidebar: cloud_server_sdk_init 6 | --- 7 | 8 | **解释**:初始化云开发SDK 9 | 10 | **参数说明** 11 | 12 | |名称|类型|必须|说明| 13 | |---|---|---|---| 14 | |context|FunctionContext|是|函数执行上下文| 15 | |option|Object|否|初始化参数| 16 | |option.env|String/Object|否|云开发环境| 17 | 18 | 当`env`传入参数为对象时,可以指定各个服务的默认环境,字段如下: 19 | 20 | |字段|类型|必填|默认值|说明| 21 | |---|---|---|---|---| 22 | |database|String|是|当前所在环境|数据库默认环境配置| 23 | |functions|String|是|当前所在环境|云函数默认环境配置| 24 | |storage|String|是|当前所在环境|云存储默认环境配置| 25 | 26 | 27 | **代码示例** 28 | 29 | ``` js 30 | const cloud = require("swan-server-sdk") 31 | exports.main = (event, context) => { 32 | cloud.init(context) 33 | 34 | // ... 35 | } 36 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/component/formlist_picker-view-column.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: picker-view-column 滚动选择器子项 3 | header: develop 4 | nav: component 5 | sidebar: formlist_picker-view-column 6 | # webUrl: https://qft12m.smartapps.cn/component/picker-view/picker-view 7 | --- 8 | 9 | 10 | **解释**:可嵌页面的滚动选择器子项。仅可放置于``中,其孩子节点的高度会自动设置成与 picker-view 的选中框的高度一致。 11 | 12 | 13 | ## 示例 14 | 15 | 在开发者工具中预览效果 16 | 17 | ### 扫码体验 18 | 19 |
20 | 21 | 请使用百度APP扫码 22 |
23 | 24 | 25 | ### 代码示例 26 | 参见[picker-view](https://smartprogram.baidu.com/docs/develop/component/formlist_picker-view/)示例内容。 -------------------------------------------------------------------------------- /program-docs/docs/develop/component/view_movable-area.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: movable-area 可移动视图区域 3 | header: develop 4 | nav: component 5 | sidebar: view_movable-area 6 | # webUrl: https://qft12m.smartapps.cn/component/movable-view/movable-view 7 | --- 8 | 9 | 10 | 11 | 12 | 13 | **解释**:`movable-view` 的可移动区域。`movable-area` 必须设置width和height属性,不设置默认为10px。 14 | 15 | ## 属性说明 16 | 17 | |属性名 |类型 |默认值| 必填 | 说明| 18 | |:---|:---|:---|:---|:---| 19 | |scale-area |Boolean| false| 否 | 当里面的movable-view设置为支持双指缩放时,设置此值可将缩放手势生效区域修改为整个movable-area 。| 20 | 21 | ## 示例 22 | 23 | 在开发者工具中预览效果 24 | 25 | ### 扫码体验 26 | 27 |
28 | 29 | 请使用百度APP扫码 30 |
31 | 32 | ### 图片示例 33 | 参见[movable-view](https://smartprogram.baidu.com/docs/develop/component/view_movable-view/)示例内容。 34 | 35 | ### 代码示例 36 | 37 | 参见[movable-view](https://smartprogram.baidu.com/docs/develop/component/view_movable-view/)示例内容。 38 | 39 | -------------------------------------------------------------------------------- /program-docs/docs/develop/component/view_swiper-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: swiper-item 滑块视图容器子项 3 | header: develop 4 | nav: component 5 | sidebar: view_swiper-item 6 | # webUrl: https://qft12m.smartapps.cn/component/swiper/swiper 7 | --- 8 | 9 | 10 | **解释**:滑块视图容器子项,仅可放置在``组件中,宽高自动设置为100%。 11 | 12 | ## 属性说明 13 | 14 | |属性名 |类型 |默认值 | 必填 |说明|最低版本| 15 | |:---- |: ---- |: ---- |:---- |:---- |:---- | 16 | |item-id|String| | 否 |该swiper-item的标识符|1.11 低版本请做兼容性处理| 17 | 18 | ## 示例 19 | 20 | 在开发者工具中预览效果 21 | 22 | ### 扫码体验 23 | 24 |
25 | 26 | 请使用百度APP扫码 27 |
28 | 29 | ### 图片示例 30 | 参见[swiper](https://smartprogram.baidu.com/docs/develop/component/view_swiper/)示例内容。 31 | 32 | ### 代码示例 33 | 34 | 参见[swiper](https://smartprogram.baidu.com/docs/develop/component/view_swiper/)示例内容。 35 | 36 | 37 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/automator/connect.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: automator.connect 3 | header: develop 4 | nav: devtools 5 | sidebar: connect 6 | --- 7 | 8 | **解释**:连接开发者工具。 9 | 10 | ```ts 11 | automator.connect(options: Object): Promise 12 | ``` 13 | 14 | **`options`参数说明:** 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | |wsEndpoint| String|是|- |开发者工具 WebSocket 地址| 19 | 20 | 有两种方式可以启动开发者工具并开启自动化功能。 21 | 22 | > 1、通过命令行工具并指定自动化参数的方式 23 | 24 | 命令行工具所在位置: 25 | macOS: `<安装路径>/Contents/MacOS/cli` 26 | Windows: `<安装路径>/cli.bat` 27 | 28 | 需要指定的参数如下: 29 | `--auto `:打开指定项目并开启自动化功能。 30 | `--auto-port `:指定自动化监听端口。 31 | 32 | ```shell 33 | # cliPath 需要替换成命令行工具的完整路径 34 | cliPath --auto /Users/username/demo --auto-port 9420 35 | ``` 36 | 37 | > 2、通过 [automator.launch](./launch/) API。 38 | 39 | **示例代码:** 40 | 41 | ```ts 42 | const automator = require('swan-automator'); 43 | automator.connect({ 44 | wsEndpoint: 'ws://localhost:9420' 45 | }).then(smartProgram => { 46 | // do sth 47 | }); 48 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/$$.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.$$ 3 | header: develop 4 | nav: devtools 5 | sidebar: $$ 6 | --- 7 | 8 | **解释**:在元素范围内获取元素数组。 9 | 10 | ```ts 11 | element.$$(selector: string): Promise 12 | ``` 13 | 14 | **参数说明:** 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | |selector| String|是|- |选择器| 19 | 20 | **示例代码:** 21 | 22 | ```js 23 | automator.launch().then(async smartProgram => { 24 | const page = await smartProgram.reLaunch('/pages/api/api'); 25 | const element = await page.$('.group'); 26 | const res = await element.$$('.group-bd'); 27 | console.log(res.length); 28 | }); 29 | ``` 30 | 31 | 32 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/$.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.$ 3 | header: develop 4 | nav: devtools 5 | sidebar: $ 6 | --- 7 | 8 | **解释**:在元素范围内获取元素。 9 | 10 | ```ts 11 | element.$(selector: string): Promise 12 | ``` 13 | 14 | **参数说明:** 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | |selector| String|是|- |选择器| 19 | 20 | **示例代码:** 21 | 22 | ```js 23 | automator.launch().then(async smartProgram => { 24 | const page = await smartProgram.reLaunch('/pages/api/api'); 25 | const element = await page.$('.group-bd'); 26 | const logo = await element.$('.item-logo'); 27 | }); 28 | ``` 29 | 30 | 31 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/attribute.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.attribute 3 | header: develop 4 | nav: devtools 5 | sidebar: attribute 6 | --- 7 | **解释**:获取元素属性。 8 | 9 | ```ts 10 | element.attribute(name: string): Promise 11 | ``` 12 | 13 | **参数说明:** 14 | 15 | |属性名 |类型 |必填 | 默认值 |说明| 16 | |:---- |:---- |:---- |:----|:----| 17 | |name| String|是|- |属性名| 18 | 19 | **示例代码:** 20 | 21 | ```js 22 | automator.launch().then(async smartProgram => { 23 | const page = await smartProgram.reLaunch('/pages/api/api'); 24 | const element = await page.$('.group-logo'); 25 | const res = await element.attribute('id'); // id 26 | }); 27 | ``` 28 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/innerHTML.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.innerHTML 3 | header: develop 4 | nav: devtools 5 | sidebar: innerHTML 6 | --- 7 | 8 | 9 | **解释**:获取元素 HTML。 10 | 11 | ```ts 12 | element.innerHTML(): Promise 13 | ``` 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | const page = await smartProgram.reLaunch('/pages/api/api'); 19 | const element = await page.$('.group-logo'); 20 | const res = await element.innerHTML(); 21 | }); 22 | ``` 23 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/offset.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.offset 3 | header: develop 4 | nav: devtools 5 | sidebar: offset 6 | --- 7 | 8 | 9 | **解释**:获取元素绝对位置。 10 | 11 | ```ts 12 | element.offset(): Promise 13 | ``` 14 | 15 | **Object 返回参数说明:** 16 | 17 | |参数 |类型 |说明| 18 | |---- | ---- |----| 19 | |left| Number |左上角 x 坐标,单位:px| 20 | |top| Number |左上角 y 坐标,单位:px| 21 | 22 | 坐标信息以页面左上角为原点。 23 | 24 | **示例代码:** 25 | 26 | ```js 27 | automator.launch().then(async smartProgram => { 28 | const page = await smartProgram.reLaunch('/pages/api/api'); 29 | const element = await page.$('.group-bd'); 30 | const res = await element.offset(); 31 | console.log(res.left, res.top); 32 | }); 33 | ``` 34 | 35 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/outerHTML.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.outerHTML 3 | header: develop 4 | nav: devtools 5 | sidebar: outerHTML 6 | --- 7 | 8 | **解释**:同 innerHTML,只是会获取到元素本身。 9 | 10 | ```ts 11 | element.outerHTML(): Promise 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | const page = await smartProgram.reLaunch('/pages/api/api'); 19 | const element = await page.$('.group-logo'); 20 | console.log(await element.outerHTML()); 21 | }); 22 | ``` 23 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/outerSwan.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.outerSwan 3 | header: develop 4 | nav: devtools 5 | sidebar: outerSwan 6 | --- 7 | 8 | **解释**:同 element.swan,只是会获取到元素本身。 9 | 10 | ```ts 11 | element.outerSwan(): Promise 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | const page = await smartProgram.reLaunch('/pages/api/api'); 19 | const element = await page.$('.group-logo'); 20 | console.log(await element.outerSwan()); 21 | }); 22 | ``` 23 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/size.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.size 3 | header: develop 4 | nav: devtools 5 | sidebar: size 6 | --- 7 | 8 | **解释**:获取元素大小。 9 | 10 | ```ts 11 | element.size(): Promise 12 | ``` 13 | 14 | **Object 返回参数说明:** 15 | 16 | |参数 |类型 |说明| 17 | |---- | ---- |----| 18 | |width| Number |元素宽度| 19 | |height| Number |元素高度| 20 | 21 | **示例代码:** 22 | 23 | ```js 24 | automator.launch().then(async smartProgram => { 25 | const page = await smartProgram.reLaunch('/pages/api/api'); 26 | const element = await page.$('.group-bd'); 27 | const res = await element.size(); 28 | console.log(res.width, res.height); 29 | }); 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/style.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.style 3 | header: develop 4 | nav: devtools 5 | sidebar: style 6 | --- 7 | 8 | **解释**:获取元素样式值。 9 | 10 | ```ts 11 | element.style(name: string): Promise 12 | ``` 13 | 14 | **参数说明** 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | |name| String|是|- |属性名| 19 | 20 | **示例代码:** 21 | 22 | ```js 23 | automator.launch().then(async smartProgram => { 24 | const page = await smartProgram.reLaunch('/pages/api/api'); 25 | const element = await page.$('.group-desc'); 26 | const res = await element.style('color'); // rgb(153, 153, 153) 27 | ``` 28 | 29 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/swan.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.swan 3 | header: develop 4 | nav: devtools 5 | sidebar: swan 6 | --- 7 | 8 | **解释**:获取元素 swan 内容。 9 | 10 | ```ts 11 | element.swan(): Promise 12 | ``` 13 | **示例代码:** 14 | 15 | ```js 16 | automator.launch().then(async smartProgram => { 17 | const page = await smartProgram.reLaunch('/pages/api/api'); 18 | const element = await page.$('.group-logo'); 19 | const res = await element.swan(); 20 | }); 21 | ``` 22 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/tagName.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.tagName 3 | header: develop 4 | nav: devtools 5 | sidebar: tagName 6 | --- 7 | 8 | **解释**:标签名,小写。 9 | 10 | ```ts 11 | element.tagName: string 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | const page = await smartProgram.reLaunch('/pages/api/api'); 19 | const element = await page.$('.group-bd'); 20 | console.log(element.tagName); // view 21 | }); 22 | ``` 23 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/tap.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.tap 3 | header: develop 4 | nav: devtools 5 | sidebar: tap 6 | --- 7 | 8 | **解释**:点击元素。 9 | 10 | ```ts 11 | element.tap(): Promise 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | const const page = await smartProgram.currentPage() 19 | const element = await page.$('.click-here'); 20 | await element.tap(); 21 | }) 22 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/text.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.text 3 | header: develop 4 | nav: devtools 5 | sidebar: text 6 | --- 7 | 8 | **解释**:获取元素文本。 9 | 10 | ```ts 11 | element.text(): Promise 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | const page = await smartProgram.reLaunch('/pages/api/api'); 19 | const element = await page.$('.group-desc'); 20 | const res = await element.text(); // 以下将演示小程序接口能力,具体属性参数详见小程序开发文档。 21 | }); 22 | ``` 23 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/element/value.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element.value 3 | header: develop 4 | nav: devtools 5 | sidebar: value 6 | --- 7 | 8 | **解释**:获取元素值。 9 | 10 | ```ts 11 | element.value(): Promise 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | const page = await smartProgram.reLaunch('/pages/input/input'); 19 | const element = await page.$('.small-ipt'); 20 | const res = await element.value(); // 此处为输入内容 21 | }); 22 | ``` 23 | 24 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/page/$$.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page.$$ 3 | header: develop 4 | nav: devtools 5 | sidebar: $$ 6 | --- 7 | 8 | **解释**:获取页面元素数组。 9 | 10 | ```ts 11 | page.$$(selector: string): Promise 12 | ``` 13 | 14 | **参数说明:** 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | |selector| String|是|- |选择器| 19 | 20 | 21 | **示例代码:** 22 | 23 | ```js 24 | automator.launch().then(async smartProgram => { 25 | const page = await smartProgram.reLaunch('/pages/api/api'); 26 | const elements = await page.$$('.item-desc'); 27 | console.log(elements.length); 28 | }) 29 | ``` 30 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/page/$.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page.$ 3 | header: develop 4 | nav: devtools 5 | sidebar: $ 6 | --- 7 | 8 | **解释**:获取页面元素。 9 | 10 | ```ts 11 | page.$(selector: string): Promise 12 | ``` 13 | 14 | **参数说明:** 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | |selector| String|是|- |选择器| 19 | 20 | **示例代码:** 21 | 22 | ```js 23 | automator.launch().then(async smartProgram => { 24 | const page = await smartProgram.reLaunch('/pages/api/api'); 25 | const element = await page.$('.group-bd'); 26 | console.log(element.tagName) // -> 'view' 27 | }); 28 | ``` 29 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/page/data.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page.data 3 | header: develop 4 | nav: devtools 5 | sidebar: data 6 | --- 7 | 8 | **解释**:获取页面渲染数据。 9 | 10 | ```ts 11 | page.data(path?: string): Promise 12 | ``` 13 | 14 | **参数说明:** 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | |path| String|否|- |数据路径| 19 | 20 | **示例代码:** 21 | 22 | ```js 23 | automator.launch().then(async smartProgram => { 24 | const page = await smartProgram.currentPage(); 25 | const data = await page.data('items'); 26 | }); 27 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/page/path.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page.path 3 | header: develop 4 | nav: devtools 5 | sidebar: path 6 | --- 7 | 8 | **解释**:页面路径。 9 | 10 | ```ts 11 | page.path: string 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | await smartProgram.reLaunch('/pages/api/api'); 19 | const page = await smartProgram.currentPage(); 20 | console.log(page.path) // pages/api/api 21 | }); 22 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/page/query.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page.query 3 | header: develop 4 | nav: devtools 5 | sidebar: query 6 | --- 7 | 8 | **解释**:页面参数。 9 | 10 | ```ts 11 | page.query: Object 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | const page = await smartProgram.navigateTo('/pages/icon/icon?foo=bar'); 19 | console.log(page.query); // {foo: 'bar'} 20 | }); 21 | ``` 22 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/page/size.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page.size 3 | header: develop 4 | nav: devtools 5 | sidebar: size 6 | --- 7 | 8 | **解释**:获取页面大小。 9 | 10 | ```ts 11 | page.size(): Promise 12 | ``` 13 | 14 | **Object 返回参数说明:** 15 | 16 | |参数 |类型 |说明| 17 | |---- | ---- |----| 18 | |width| Number |页面可滚动宽度| 19 | |height| Number |页面可滚动高度| 20 | 21 | 22 | **示例代码:** 23 | 24 | ```js 25 | automator.launch().then(async smartProgram => { 26 | const page = await smartProgram.currentPage(); 27 | const res = await page.size(); 28 | console.log(res.width); 29 | console.log(res.height); 30 | }) 31 | ``` 32 | 33 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/page/waitFor.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page.waitFor 3 | header: develop 4 | nav: devtools 5 | sidebar: waitFor 6 | --- 7 | 8 | 9 | **解释**:等待直到指定条件成立。 10 | 11 | ```ts 12 | page.waitFor(condition: string | number | Function): Promise 13 | ``` 14 | 15 | **参数说明:** 16 | 17 | |属性名 |类型 |必填 | 默认值 |说明| 18 | |:---- |:---- |:---- |:----|:----| 19 | |condition| String/Number/Function|是|- |等待条件| 20 | 21 | - 如果条件是 string 类型,那么该参数会被当成选择器,当该选择器选中元素个数不为零时,结束等待。 22 | - 如果条件是 number 类型,那么该参数会被当成超时时长,当经过指定时间后,结束等待。 23 | - 如果条件是 Function 类型,那么该参数会被当成断言函数,当该函数返回真值时,结束等待。 24 | 25 | **示例代码:** 26 | 27 | ```js 28 | automator.launch().then(async smartProgram => { 29 | const page = await smartProgram.reLaunch('/pages/api/api'); 30 | await page.waitFor(2e3); // 等待 2 秒 31 | await page.waitFor('view'); // 等待页面中出现 view 元素 32 | await page.waitFor(async () => { 33 | return (await page.$$('view')).length > 5; 34 | }); // 等待页面中 view 元素数量大于 5 35 | }); 36 | ``` 37 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/callSwanMethod.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.callSwanMethod 3 | header: develop 4 | nav: devtools 5 | sidebar: callSwanMethod 6 | --- 7 | 8 | 9 | **解释**:调用 swan 对象上的指定方法。 10 | 11 | ```ts 12 | smartProgram.callSwanMethod(method: string, ...args: any[]): Promise 13 | ``` 14 | **参数说明:** 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | |method| String|是|- |需要调用的方法名| 19 | |...args| Array|否|- |方法参数| 20 | 21 | **示例代码:** 22 | 23 | ```js 24 | automator.launch().then(async smartProgram => { 25 | await smartProgram.callSwanMethod('setStorage', { 26 | key: 'foo', 27 | data: 'bat' 28 | }); 29 | const data = await smartProgram.callSwanMethod('getStorageSync', 'foo'); 30 | console.log(data); // bar 31 | }) 32 | ``` 33 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/close.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.close 3 | header: develop 4 | nav: devtools 5 | sidebar: close 6 | --- 7 | 8 | **解释**:断开与小程序运行时的连接并关闭项目窗口。 9 | 10 | ``` ts 11 | smartProgram.close(): Promise 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ``` js 17 | automator.launch().then(async smartProgram => { 18 | await smartProgram.close(); 19 | }); 20 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/currentPage.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.currentPage 3 | header: develop 4 | nav: devtools 5 | sidebar: currentPage 6 | --- 7 | 8 | **解释**:获取当前页面。 9 | 10 | ```js 11 | smartProgram.currentPage(): Promise 12 | ``` 13 | **示例代码:** 14 | 15 | ```js 16 | automator.launch().then(async smartProgram => { 17 | await smartProgram.currentPage(); 18 | }); 19 | ``` 20 | 21 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/disconnect.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.disconnect 3 | header: develop 4 | nav: devtools 5 | sidebar: disconnect 6 | --- 7 | 8 | **解释**:断开与小程序运行时的连接。 9 | 10 | ``` js 11 | smartProgram.disconnect(): void 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ``` js 17 | automator.launch().then(async smartProgram => { 18 | smartProgram.disconnect(); 19 | }); 20 | ``` 21 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/login.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.login 3 | header: develop 4 | nav: devtools 5 | sidebar: login 6 | --- 7 | 8 | **解释**:未登录情况下调起开发者工具的登录,如果已登录则跳过。 9 | 10 | ``` ts 11 | smartProgram.login(): Promise 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ``` js 17 | automator.launch().then(async smartProgram => { 18 | await smartProgram.login(); 19 | // 扫面开发者工具上的登录二维码后继续执行 20 | }); 21 | ``` 22 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/navigateBack.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.navigateBack 3 | header: develop 4 | nav: devtools 5 | sidebar: navigateBack 6 | --- 7 | 8 | **解释**:关闭当前页面,返回上一页面,同 swan.navigateBack 9 | 10 | ```ts 11 | smartProgram.navigateBack(): Promise 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | await smartProgram.navigateBack(); 19 | }); 20 | ``` 21 | 22 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/navigateTo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.navigateTo 3 | header: develop 4 | nav: devtools 5 | sidebar: navigateTo 6 | --- 7 | 8 | **解释**:保留当前页面,跳转到应用内的某个页面,同 swan.navigateTo。 9 | 10 | ```ts 11 | smartProgram.navigateTo(url: string): Promise 12 | ``` 13 | 14 | **参数说明:** 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | |url| String|否|- |需要跳转的应用内非 tabBar 的页面的路径| 19 | 20 | **示例代码:** 21 | 22 | ```js 23 | automator.launch().then(async smartProgram => { 24 | const page = await smartProgram.navigateTo('/pages/icon/icon'); 25 | console.log(page.path); // pages/icon/icon 26 | }); 27 | ``` 28 | 29 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/pageStack.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.pageStack 3 | header: develop 4 | nav: devtools 5 | sidebar: pageStack 6 | --- 7 | 8 | **解释**:获取小程序页面堆栈。 9 | 10 | ```ts 11 | smartProgram.pageStack(): Promise 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | const pageStack = await smartProgram.pageStack(); 19 | console.log(pageStack.length); // 当前页面栈数量 20 | }); 21 | ``` 22 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/reLaunch.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.reLaunch 3 | header: develop 4 | nav: devtools 5 | sidebar: reLaunch 6 | --- 7 | 8 | **解释**:关闭所有页面,打开到应用内的某个页面,同 swan.reLaunch。 9 | 10 | ```ts 11 | smartProgram.reLaunch(url: string): Promise 12 | ``` 13 | **参数说明:** 14 | 15 | |属性名 |类型 |必填 | 默认值 |说明| 16 | |:---- |:---- |:---- |:----|:----| 17 | |url| String|否|- |需要跳转的应用内页面路径| 18 | 19 | **示例代码:** 20 | 21 | ```js 22 | automator.launch().then(async smartProgram => { 23 | await smartProgram.reLaunch('/pages/api/api'); 24 | }); 25 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/redirectTo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.redirectTo 3 | header: develop 4 | nav: devtools 5 | sidebar: redirectTo 6 | --- 7 | 8 | **解释**:关闭当前页面,跳转到应用内的某个页面,同 swan.redirectTo 9 | 10 | ```ts 11 | smartProgram.redirectTo(url: string): Promise 12 | ``` 13 | 14 | **参数说明:** 15 | 16 | |属性名 |类型 |必填 | 默认值 |说明| 17 | |:---- |:---- |:---- |:----|:----| 18 | |url| String|否|- |需要跳转的应用内非 tabBar 的页面的路径| 19 | 20 | **示例代码:** 21 | 22 | ```js 23 | automator.launch().then(async smartProgram => { 24 | await smartProgram.redirectTo('/pages/icon/icon'); 25 | }); 26 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/remote.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.remote 3 | header: develop 4 | nav: devtools 5 | sidebar: remote 6 | --- 7 | 8 | **解释**:开启工具真机调试功能,这里需要提前对真机环境进行配置,详情可参考 [真机自动化](../../remote) 9 | 10 | ``` ts 11 | smartProgram.remote(): Promise 12 | ``` 13 | 14 | 调用后脚本会启动工具预览功能,并且在控制台上打印预览二维码,然后你需要使用真机扫码连接使自动化脚本继续跑下去。 15 | 16 | **示例代码:** 17 | 18 | ``` js 19 | automator.launch().then(async smartProgram => { 20 | await smartProgram.remote(); 21 | // 扫码连接成功后在真机上执行自动化脚本 22 | }); 23 | ``` 24 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/switchTab.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.switchTab 3 | header: develop 4 | nav: devtools 5 | sidebar: switchTab 6 | --- 7 | 8 | **解释**:跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面,同 swan.switchTab。 9 | 10 | ```js 11 | smartProgram.switchTab(url: string): Promise 12 | ``` 13 | **参数说明:** 14 | 15 | |属性名 |类型 |必填 | 默认值 |说明| 16 | |:---- |:---- |:---- |:----|:----| 17 | |url| String|否|- |需要跳转的 tabBar 页面的路径| 18 | 19 | **示例代码:** 20 | 21 | ```js 22 | automator.launch().then(async smartProgram => { 23 | await smartProgram.switchTab('/pages/component/component'); 24 | }); 25 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/auto/smartprogram/systemInfo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smartProgram.systemInfo 3 | header: develop 4 | nav: devtools 5 | sidebar: systemInfo 6 | --- 7 | 8 | **解释**:获取系统信息,同 swan.getSystemInfo。 9 | 10 | ```ts 11 | smartProgram.systemInfo(): Promise 12 | ``` 13 | 14 | **示例代码:** 15 | 16 | ```js 17 | automator.launch().then(async smartProgram => { 18 | const systemInfo = await smartProgram.systemInfo(); 19 | console.log(systemInfo.platform); 20 | }); 21 | ``` 22 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/editor_debug.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 代码调试 3 | header: develop 4 | nav: devtools 5 | sidebar: editor_debug 6 | --- 7 | 8 | >此功能在`2.16.0-rc`之后版本可用。 9 | 10 | 目前在开发者工具中进行智能小程序断点调试时,须在调试器source面板中找到资源文件后加上断点,在实际使用时因资源文件层级较深,断点操作较为繁琐。 11 | 为提高开发者效率,编辑器提供了在代码编辑区域直接设置断点的方式,且断点状态与调试器保持同步。 12 | 13 | ### 设置断点 14 | 15 | 如图所示,在js文件行号左侧为断点设置区,点击可设置或取消断点,shift + 点击断点可将断点设置为不可用状态。 16 | ![](../../../img/tool/editor_debug1.png) 17 | 18 | 断点图标状态的含义如下: 19 | 20 | |图标 | 含义 | 21 | |---|---| 22 | |小红点|此行已设置断点| 23 | |小灰点|此行断点为不可用状态| 24 | |小浅红点|此行可设置断点| 25 | 26 | ### 执行断点调试 27 | 28 | 设置断点后执行刷新操作![](../../../img/tool/editor_debug2.png),将自动执行断点调试 。 29 | 30 | 如图所示,编辑器中断点状态与调试器保持同步,开发者可进一步在调试器中查看智能小程序此时的运行状态。 31 | 32 | ![](../../../img/tool/editor_debug3.png) 33 | 34 | **注:当代码运行到断点的时候,整个小程序都停止了,所以模拟器会出现白屏或者无法操作的情况** 35 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/editor_file.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 文件 3 | header: develop 4 | nav: devtools 5 | sidebar: editor_file 6 | --- 7 | 8 | ### 文件支持 9 | 工具目前提供了 4 种文件的编辑:swan、css、js、json 以及图片文件的预览。 10 | 11 | ### 文件操作 12 | 13 | 新建页面的方式:在目录树上右键,选择新建 Page,输入名称后将自动生成页面所需要的 swan、css、js、json。 14 | 15 | 16 | ### 自动保存 17 | 18 | 1、如果设置中开启了 “修改文件时自动保存”(设置-编辑设置-修改文件自动保存),工具在修改文件时会自动保存到硬盘中,无需手动保存的效果。 19 | 2、设置中开启 “编译时自动保存所有文件”(设置-编译设置-编译时自动保存所有文件),在点击编译时自动保存所有文件的效果。 20 | 21 | 22 | ### 自动补全 23 | 24 | 同大部分编辑器一样,工具提供了较为完善的自动补全: 25 | 26 | 1、js 文件编辑会帮助开发补全所有的 API 及相关的注释解释,并提供代码模板支持。 27 | 2、swan 文件编辑会帮助开发者直接写出相关的标签和标签中的属性。 28 | 3、json 文件编辑会帮助开发者补全相关的配置,并给出实时的提示。 29 | 30 | js 补全 31 | ![](../../../img/tool/js补全.gif) 32 | 33 | 代码模板支持 34 | ![](../../../img/tool/代码模板支持.gif) 35 | 36 | json 补全 37 | ![](../../../img/tool/json补全.gif) 38 | 39 | swan 补全 40 | ![](../../../img/tool/swan补全.gif) -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/editor_rpx.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 转换px为rpx 3 | header: develop 4 | nav: devtools 5 | sidebar: editor_rpx 6 | --- 7 | 8 | 9 | 10 | rpx作为小程序常用页面自适应解决方案,在智能小程序中同样支持。 11 | 12 | **rpx(responsive pixel):** 可以根据屏幕宽度进行自适应,规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。 13 | 14 | **px到rpx的转换公式:** `rpx = px * 750 / 设计稿宽度;` 15 | 16 | 在实际使用时,px与rpx之间的转换相当繁琐,为提高开发者效率,css 文件编辑会帮助开发者将px转换为rpx,并给出实时的提示。 17 | 18 | 开发者可在设置-编辑设置-设计稿宽度中设置rpx转换基准宽度,默认为1242px。 19 | 20 | ![](../../../img/tool/editor-setting.png) 21 | 22 | ![](../../../img/tool/px2rpx转换.gif) -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/editor_set.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 项目配置文件 3 | header: develop 4 | nav: devtools 5 | sidebar: editor_set 6 | --- 7 | 8 | 9 | 可以在项目根目录使用`project.swan.json`文件对项目进行配置。 10 | 11 | |字段名 | 类型 |说明| 12 | |---|---|---| 13 | |smartProgramRoot|String|智能小程序源码的目录(需为相对路径)| 14 | |appid|String| 项目的 AppID,如有变更,请在项目信息中修改 | 15 | |compilation-args|Object|条件参数,目前包含自定义编译条件参数和项目设置编译参数| 16 | |compileType|String|编译类型| 17 | |setting|Object|项目设置| 18 | |developType|String|开发模式| 19 | |editor|Object|编辑器参数| 20 | |host|String|宿主名称| 21 | |preview|Object|web预览信息| 22 | |publish|Object|发布信息| 23 | |swan|Object|宿主信息| 24 | 25 | setting 中可以指定以下设置 26 | 27 | |名称 | 类型 | 说明| 28 | |---|---|---| 29 | |urlCheck|Boolean|是否检查安全域名| 30 | 31 | 32 | compilation-args.common 中可以指定以下设置 33 | 34 | |名称 | 类型 | 说明| 35 | |---|---|---| 36 | |ignoreTransJs|Boolean|ES6 转 ES5| 37 | |ignorePrefixCss|Boolean|上传代码时样式自动补全| 38 | |ignoreUglify|Boolean|上传代码时自动压缩混淆| 39 | |babelSetting|Object|增强编译下Babel的配置项| 40 | 41 | compilation-args.common.babelSetting 中可以指定以下设置 42 | 43 | |名称 | 类型 | 说明| 44 | |---|---|---| 45 | |ignore|Array<String>|配置需要跳过Babel编译(包括代码压缩)处理的文件或目录| 46 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/history.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 工具下载 3 | header: develop 4 | nav: devtools 5 | sidebar: history 6 | --- 7 | 8 | 9 | ### 最新正式版本(2.30.1) 10 | 11 | * 下载链接:[Windows ](https://smartprogram.baidu.com/mappconsole/api/devDownload?system=windows&type=online) /[mac](https://smartprogram.baidu.com/mappconsole/api/devDownload?system=mac&type=online) 12 | 13 | 14 | * [正式版更新日志](https://smartprogram.baidu.com/docs/develop/devtools/uplog_tool_normal/) 15 | 16 | ### 最新 rc 版本(3.1.1-rc) 17 | 18 | > 包含大的新增特性,修复缺陷问题,通过内部测试的稳定版本。电脑本地可以同时安装rc版本和正式版本的工具,两种版本可独立自动更新。 19 | 20 | * 下载链接:[Windows ](https://smartprogram.baidu.com/mappconsole/api/devDownload?system=windows&type=rc) / [mac](https://smartprogram.baidu.com/mappconsole/api/devDownload?system=mac&type=rc) 21 | 22 | * [rc 版更新日志](https://smartprogram.baidu.com/docs/develop/devtools/uplog_tool_rc/) 23 | 24 | 25 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/page_debug.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 调试器 3 | header: develop 4 | nav: devtools 5 | sidebar: page_debug 6 | --- 7 | 8 | 9 | 提供查看组件树、console、查看源文件、查看网络请求、查看storage等功能 10 | ![图片](../../../img/tool/debugger.png) -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/page_editor.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 编辑器 3 | header: develop 4 | nav: devtools 5 | sidebar: page_editor 6 | --- 7 | 8 | 9 | 编辑器可以对当前项目进行代码编写和文件的添加、删除以及重命名等基本操作。 10 | ![图片](../../../img/tool/editor.png) 11 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/page_monitor.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 模拟器 3 | header: develop 4 | nav: devtools 5 | sidebar: page_monitor 6 | --- 7 | 8 | 9 | 10 | 11 | 模拟器可以模拟智能小程序在百度 App 的表现。智能小程序的代码通过编译后可以在模拟器上直接运行。 12 | 开发者可以选择不同的设备,也可以添加自定义设备来调试智能小程序在不同尺寸机型上的适配问题。 13 | 模拟器底部的切后台按钮可以模拟移动设备切换窗口的操作。 14 | 15 |
16 |
17 | 18 |
19 |
20 | 21 |
22 |
23 | 24 | 25 | 26 | ### 独立窗口 27 | 因为有不少开发者基于小程序三方框架接入,一般都用自己的编辑器开发,只用开发者工具看效果和调试,所以我们把编辑器和模拟器作为独立窗口弹出。 28 | 点击 模拟器/调试器 右上角的按钮可以使用独立窗口显示 模拟器/调试器。 29 | ![图片](../../../img/tool/window.png) 30 | ![图片](../../../img/tool/window-all.png) -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/page_tool.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 工具栏 3 | header: develop 4 | nav: devtools 5 | sidebar: page_tool 6 | --- 7 | 8 | 9 | 10 | 点击用户头像可以切换账号,点击消息可以查看开发者工具收到的消息。 11 | 12 |
13 |
14 | 15 |
16 |
17 | 18 |
19 |
20 | 21 | 22 | |按钮名称|说明| 23 | |--|--| 24 | |模拟器、编辑器、调试器按钮|控制主界面模块显示/隐藏。至少需要一个模块显示。| 25 | |编译按钮|可以设置智能小程序的进入场景、页面参数、进入的页面路径等调试参数。| 26 | |清缓存按钮|可以便捷的清除工具上的文件缓存、数据缓存、授权缓存和登录状态,方便开发者调试。| 27 | |刷新按钮|点击可以刷新模拟器。| 28 | |预览按钮|本地编译产出上传至服务器后生成小程序以及 web 小程序二维码,使用百度App扫码即可查看。| 29 | |发布按钮|点击发布成功后可以生成体验版以及提交审核,需要登录官网查看。| 30 | |真机调试按钮|启动真机调试。| 31 | |远程调试按钮|启动远程调试。| 32 | |项目信息按钮|可以查看项目的详细信息。| 33 | |工具按钮|可以进行白屏检测操作。| 34 | 35 | 36 | ![图片](../../../img/tool/main.png) 37 | 38 | ### 工具栏管理 39 | 在工具栏上点击鼠标右键,可以打开工具栏管理 40 | ![图片](../../../img/tool/tool-m.png) 41 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 问题反馈 3 | header: develop 4 | nav: devtools 5 | sidebar: question 6 | --- 7 | 8 | 9 | 10 | 为了能快速、准确的帮助开发者解决问题,百度开发者工具提供了问题反馈入口。在主窗口工具栏最右侧点击问题反馈按钮弹出问题反馈录入页面。 11 | 12 | 1、选择反馈类型,可以根据当前自己遇到的具体情况来选择是bug或产品意见。 13 | 2、选择是否上传源代码,源代码仅用于定位问题。 14 | 3、录入问题的详细描述。 15 | 4、可以把遇到的问题截图上传 16 | ![图片](../../../img/tool/question.png) -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/set_edit.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 编辑设置 3 | header: develop 4 | nav: devtools 5 | sidebar: set_edit 6 | --- 7 | 8 | 9 | * 修改文件时自动保存 10 | * 编译时自动保存所有文件 11 | * 自动折行 12 | * 用空格代替 Tab 13 | * 代码缩略图 14 | * 总是在新标签页打开文件 15 | * Tab 大小 16 | ![图片](../../../img/tool/edit-set.png) 17 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/set_outlook.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 外观设置 3 | header: develop 4 | nav: devtools 5 | sidebar: set_outlook 6 | --- 7 | 8 | 9 | 支持配置代码编辑器习惯和风格。 10 | * 字体 11 | * 字号 12 | * 间距 13 | 14 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 |
23 |
-------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/set_proxy.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 代理设置 3 | header: develop 4 | nav: devtools 5 | sidebar: set_proxy 6 | --- 7 | 8 | 9 | 可以配置不使用代理或使用自定义代理。 10 | ![图片](../../../img/tool/proxy-set.png) 11 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_function_change.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 前后台切换 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_function_change 6 | --- 7 | 8 | 9 | 10 | 11 | 工具栏中切后台模拟了智能小程序被切换到后台的情况。 12 | 13 | ![图片](../../../img/tool/background.png) -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_function_compilation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 自定义编译 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_function_compilation 6 | --- 7 | 8 | 9 | 10 | 点击工具栏中的编译按钮或者使用快捷键 Ctrl(⌘) + B,可以编译当前代码,并自动刷新模拟器。 11 | 同时为了帮助开发者调试从不同场景值进入具体的页面,开发者可以添加或选择已有的自定义编译条件进行编译和代码预览(如图)。 12 | 已有的自定义编译条件会记录在`project.swan.json`中,开发者可以将其托管于工具内部处理。 13 | 14 | **注:编译条件跟项目相关,每个项目可以保存自己相关的编译条件** 15 | 16 | ![图片](../../../img/tool/工具27.png) -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_function_pre.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 自定义预处理 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_function_pre 6 | --- 7 | 8 | 9 | 10 | ![图片](../../../img/tool/preprocess.png) 11 | 在项目信息面板中,我们提供了以下几个默认的预处理,可以解决大部分的代码文件预处理的问题 12 | 1. ES6 转 ES5(可以应用于编译、预览、上传),使用 "babel-core": "^6.0.0" 13 | 2. 上传代码时样式自动补全,使用 "postcss": "^7.0.0" 14 | 3. 上传代码时自动压缩,使用 "uglify-js": "^3.4.9" 15 | 16 | 对于高级开发者来说,完全可以自己编写自动化构建脚本对代码文件进行预处理,所以我们提供了 `启用自定义处理命令` 选项,开发者可以指定 `编译前/预览前/上传前` 需要预处理的命令 开发者工具使用 shell 的方式运行指定的命令,并在控制台中输出命令的执行日志 17 | 18 | 如果您使用框架开发小程序,可以参考文档 [框架开发](/develop/tutorial/frameworkdevelop/) 19 | 20 | 预处理命令的默认执行顺序: 21 | 22 | 1. 自定义预处理命令 23 | 2. 默认预处理命令 24 | 3. 编译/预览/上传 25 | 26 | 勾选`异步执行`选项后,编译前预处理命令将与编译流程并行执行,如果编译前预处理命令是`watch`类的命令,需要勾选此选项,以免阻塞编译流程。 27 | 28 | 注: 29 | 1. 编译前预处理命令,需要手动点击 "编译" 按钮,或者使用快捷键编译才能触发。文件修改无法触发该命令。 30 | 2. Mac 版本的开发者工具无法复用 bash 中的 Path 环境变量。可能需要手动设置系统的 Path 环境变量,才能正常执行命令。 31 | 32 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_pre.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 预览发布 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_pre 6 | --- 7 | 8 | 9 | ### 前提条件 10 | * 开发者已登录,且在项目成员中。添加项目成员请见:开发前准备。 11 | * 填写项目信息时的 AppID 正确。 12 | 当登录用户没有开发权限或者AppID不正确时,工具栏预览和发布按钮会被置灰。 13 | 14 | ![图片](../../../img/tool/工具13.png) 15 | 16 | 17 | ## 预览 18 | 19 | 当点击预览按钮时,开发者工具会对当前项目进行编译,然后制作压缩包上传到服务器,并生成小程序和 web 小程序的预览二维码,用百度app扫码后可以看到相应页面。 20 | 21 | ![图片](../../../img/tool/工具14.png) 22 | 23 | ## 发布 24 | 25 | 当点击发布按钮时,开发者工具会对当前项目进行编译,然后制作压缩包上传到服务器,上传成功后,可以在智能小程序官网的开发管理一栏看到提交的相关信息。 26 | 27 | 1、输入当前发布的小程序版本号,默认按照上次发布的版本号递增 28 | 2、选择上线基础库的最低版本 29 | 3、填写描述信息 30 | 31 | ![图片](../../../img/tool/publish.png) 32 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_tool_App-data-panel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: AppData panel 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_tool_App-data-panel 6 | --- 7 | 8 | 9 | 用于显示当前项目运行时智能小程序 AppData 具体数据,实时地反映项目数据情况,可以在此处编辑数据,并及时地反馈到界面上。 10 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_tool_Console-panel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Console panel 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_tool_Console-panel 6 | --- 7 | 8 | 9 | 10 | 开发者可以在此输入和调试代码, 程序中的 console 信息也会在 Console panel 中提示。 11 | 13 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_tool_Network-panel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Network panel 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_tool_Network-panel 6 | --- 7 | 8 | 9 | 10 | Network Panel 中展示了 request 和 socket 的请求情况。 11 | 12 | ![图片](../../../img/tool/network.png) -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_tool_Security-panel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Security panel 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_tool_Security-panel 6 | --- 7 | 8 | 9 | 通过该面板你可以去调试当前网页的安全和认证等问题并确保您已经在你的网站上正确地实现HTTPS。 10 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_tool_Sensors-panel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Sensors panel 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_tool_Sensors-panel 6 | --- 7 | 8 | 9 | 用于设置地理信息、陀螺仪、指南针数据,调用相关 API 时会读取在这里设置好的数据。 10 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_tool_Sources-panel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Sources panel 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_tool_Sources-panel 6 | --- 7 | 8 | 9 | Sources panel 用于显示当前项目的脚本代码文件。 10 | 11 | ![图片](../../../img/tool/sources.png) 12 | 13 | **注:当代码运行到断点的时候,整个小程序都停止了,所以模拟器会出现白屏或者无法操作的情况** 14 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_tool_Storage-panel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Storage panel 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_tool_Storage-panel 6 | --- 7 | 8 | 9 | 10 | Storage panel 用于显示当前项目使用 swan.setStorage 或者 swan.setStorageSync 后的数据存储情况。 11 | 12 | 可以直接在 Storage panel 上对数据进行删除(按 delete 键)、新增、修改。 13 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_tool_Swan-audits.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Swan audits 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_tool_Swan-audits 6 | --- 7 | 8 | 9 | 10 | 11 | 体验评分,是一项给小程序的体验打分的功能,它会在小程序运行过程中实时检查,分析出一些可能影响开发者体验的地方,并且定位问题,及时给出相应的优化建议。 12 | -------------------------------------------------------------------------------- /program-docs/docs/develop/devtools/smartappdebug_tool_Swan-panel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Swan Element panel 3 | header: develop 4 | nav: devtools 5 | sidebar: smartappdebug_tool_Swan-panel 6 | --- 7 | 8 | 9 | 10 | Swan Element panel 用于帮助开发者查看真实的页面结构以及对应的 css 属性,同时可以通过修改对应 css 属性,在模拟器中实时看到修改的情况(仅为实时预览,无法保存到文件)。通过调试模块左上角的选择器,还可以快速定位页面中组件对应的 swan 代码。 11 | 13 | -------------------------------------------------------------------------------- /program-docs/docs/develop/extended/ui_component/info.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: smart-ui介绍 3 | header: develop 4 | nav: extended 5 | sidebar: info 6 | --- 7 | 8 | smart-ui是一套开发、设计风格统一的智能小程序扩展组件库,由百度智能小程序官方设计团队和智能小程序团队为小程序量身设计,以增强开发者开发体验。 9 | 10 | ### smart-ui目前提供的核心能力如下: 11 | 12 | 信息流、信息流子项、刷新、下拉加载、页面状态、icon等基础组件。 13 | 14 | ## smart-ui快速上手: 15 | 16 | * 使用前: 扩展组件库基于智能小程序自定义组件构建,在使用扩展组件库之前,建议先阅读熟悉[智能小程序自定义组件](https://smartprogram.baidu.com/docs/develop/framework/custom-component/)。 17 | 18 | * 引入组件: 可以通过npm方式下载构建,npm包名为@smt-ui/component 19 | 20 | * 如何使用: 21 | 22 | 1. 假设组件的目录为smart-ui-miniprogram,首先要在该项目中npm安装依赖包@smt-ui/component; 23 | 24 | 2. 引入 npm 包中的自定义组件 25 | ``` 26 | { 27 | "usingComponents": { 28 | "smt-icon": "@smt-ui/component/src/icon" 29 | } 30 | } 31 | ``` 32 | 33 | 3. 在对应页面的 swan 中直接使用该组件 34 | ``` 35 | 36 | ``` 37 | 具体使用可[参考组件文档](/develop/extended/ui_component/smt-feed/) 38 | -------------------------------------------------------------------------------- /program-docs/docs/develop/extended/ui_component/smt-navigation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: navigation 自定义导航 3 | header: develop 4 | nav: extended 5 | sidebar: smt-navigation 6 | webUrl: https://qft12m.smartapps.cn/extensions/component/smt-navigation/smt-navigation 7 | --- 8 | 9 | **解释:** 顶部导航bar可以自定义 10 | 11 | ## 属性说明 12 | 13 | |属性名 | 类型 | 必填 | 默认值 |说明 | 14 | |---|---|---|---|---| 15 | |backgroundColor |string |否|#fff|导航背景色| 16 | 17 | ## 示例 18 | 19 | 在开发者工具中预览效果 20 | 21 | ### 扫码体验 22 | 23 | 24 | 25 | 26 | ### 代码示例 27 | 28 | 29 | :::codeTab 30 | ```swan 31 | 32 | 33 | {{title}} 34 | {{subTitle}} 35 | 36 | 37 | ``` 38 | 39 | 40 | 41 | ```js 42 | Page({ 43 | data: { 44 | title: '主标题', 45 | subTitle: '副标题' 46 | } 47 | }); 48 | ``` 49 | ::: 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /program-docs/docs/develop/extension/template/content-detail.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 图文详情页 3 | header: develop 4 | nav: extension 5 | sidebar: template 6 | --- 7 | 8 | **解释**:图文详情页模板。你可以加载含有图片、文本、引用、标题等形式的内容。同时,图文详情页模板内置了回到顶端按钮与关注/取消关注按钮,支持点击作者跳转与图片查看器。图文详情页通常用来展示文章、帖子等内容的详情。 9 | 10 | ## 代码示例 11 | 12 | ### 扫码体验 13 | 14 | 15 | 16 | ### 图片示例 17 | 18 |
19 | 20 | ## Bug & Tip 21 | 22 | * Tip:模板中使用的是测试数据,你需要从接口中获取真实的数据。 23 | * Tip:模板中内置了部分数据记录,你可以定义自己需要记录的数据。 24 | * Tip: 你可以通过 `npm i @smt-ui-template/page-content-detail` 的形式引入此页面模板,但是仍旧需要进行二次开发来补全接口信息及进行个性化定制。 25 | * Tip: 页面模板功能从开发者工具 v2.25.1-rc 版本开始支持 26 | 27 | -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/app_service.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 逻辑层方法说明 3 | header: develop 4 | nav: framework 5 | sidebar: app_service 6 | --- 7 | 8 | - 智能小程序的逻辑层使用 JavaScript 编写; 9 | - 逻辑层将数据进行处理后发送给视图层,同时接受视图层的反馈。 10 | 11 | 在 JavaScript 的基础上,我们提供了一些框架方法,用以辅助开发者更容易的开发小程序。 12 | 13 | **例如以下方法和功能说明:** 14 | 15 | - 提供了 [App](/develop/framework/app_service_register/) 和 [注册页面](/develop/framework/app_service_page/) 方法,分别用于注册小程序应用和每个页面; 16 | - 提供了 [getApp](/develop/framework/app_service_registergetapp/) 和 [getCurrentPages](/develop/framework/app_service_routegetCurrentPages/) 方法,分别用来获取 App 实例和当前页面栈; 17 | - 每个页面有独立的 [文件作用域](/develop/framework/app_service_routefile/) ,并提供 [模块化](/develop/framework/app_service_routemodule/),使得开发者更容易进行代码封装并复用; 18 | - 框架本身并非运行在浏览器中,所以 JavaScript 在 Web 中的一些能力都无法使用,如 document , window 等,这会使得小程序应用更接近原生; 19 | - 开发者所编写的代码,最终会被编译打包成一份 JavaScript 文件,并在智能小程序启动时进行加载并运行,直到智能小程序销毁。 20 | - 请勿在 App、Page 等构造器的参数对象中使用底层已存在的 key,注意,在Page 中不要自定义 getData 方法,会存在冲突。 21 | 22 | 详细内容请参看注册 App注册页面页面路由。 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/app_service_aop.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: AOP说明 3 | header: develop 4 | nav: framework 5 | sidebar: app_service_aop 6 | --- 7 | 8 | 9 | 10 | 小程序的开发者或者服务商会提供一些lib库,用来代理小程序的生命周期或API等,进而想要进行一些通用逻辑的处理(例如: 打点/事件触发/统一登录等等通用逻辑)。 11 | 12 | 通常,小程序开发者们使用这些扩展包时,不得不在各个使用点(生命周期、事件触发等)处显式调用。 13 | 14 | 为解决该类问题,智能小程序在框架层提供切面。让扩展包的开发者可以在小程序运行的生命周期/事件触发/API调用等处,注入通用逻辑。 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/app_service_aopapp-after.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: App.after 3 | header: develop 4 | nav: framework 5 | sidebar: app_service_aopapp-after 6 | --- 7 | 8 | 9 | 10 | **解释:** App.after可以增加APP级的切面,触发的时机是在所拦截的对应生命周期方法执行之后。 11 | 12 | **方法参数**:Object 13 | 14 | **Object 参数说明**: 15 | 16 | |属性名 |类型 | 默认值 |必填 |说明| 17 | |---- | ---- | ---- | ----|----| 18 | |methods | Object | | 否 |所有需要拦截的生命周期方法的集合 | 19 | 20 | ** 可拦截的所有方法 ** 21 | 22 | * onLaunch 23 | 24 | * onShow 25 | 26 | * onHide 27 | 28 | * onError 29 | 30 | * onPageNotFound 31 | 32 | **代码示例** 33 | 34 | ```js 35 | // app.js 36 | App({ 37 | onShow() { 38 | console.log('normal onShow'); 39 | } 40 | }); 41 | 42 | App.after({ 43 | methods: { 44 | onShow() { 45 | console.log('after app onshow'); 46 | } 47 | } 48 | }); 49 | /** 50 | * 打印结果 51 | * normal onShow 52 | * after app onshow 53 | */ 54 | ``` 55 | -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/app_service_pagecomponent.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 组件事件处理函数 3 | header: develop 4 | nav: framework 5 | sidebar: app_service_pagecomponent 6 | --- 7 | 8 | 9 | 10 | **解释:** 11 | 除了初始化数据和生命周期函数,Page 中还可以定义一些特殊的函数:事件处理函数。在渲染层可以在组件中加入事件绑定,当达到触发事件时,就会执行 Page 中定义的事件处理函数。 12 | 13 | **代码示例** 14 | 15 | ```xml 16 | 17 | tap 18 | ``` 19 | 20 | ```js 21 | // page.js 22 | Page({ 23 | onTap() { 24 | console.log('tap'); 25 | } 26 | }); 27 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/app_service_pagedata.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 初始化数据 3 | header: develop 4 | nav: framework 5 | sidebar: app_service_pagedata 6 | --- 7 | 8 | 9 | 10 | **解释:** 初始化数据将作为页面的第一次渲染数据。data 将会以 JSON 的形式由逻辑层传至渲染层,所以其数据必须是可以转成 JSON 的格式:字符串(例如: 数字,布尔值,对象,数组)。 11 | 12 | 渲染层,通过SWAN模板,对数据进行绑定。 13 | 14 | **代码示例** 15 | 在开发者工具中预览效果 16 | 17 | ```xml 18 | 19 | {{text}} 20 | 21 | 22 | {{arr[0].name}} 23 | 24 | ``` 25 | 26 | ```js 27 | // index.js 28 | Page({ 29 | data: { 30 | text: 'init data', 31 | arr: [{name: 'swan'}, {name: 'Baidu'}] 32 | } 33 | }); 34 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/app_service_route.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 页面栈 3 | header: develop 4 | nav: framework 5 | sidebar: app_service_route 6 | --- 7 | 8 | 9 | 10 | **解释**:框架以栈的形式维护了当前的所有页面。 当发生路由切换的时候,页面栈的表现如下: 11 | 12 | **页面栈表现:** 13 | 14 | |路由方式 |页面栈表现 | 15 | |---- | ---- | 16 | |初始化 |新页面入栈 | 17 | |打开新页面 |新页面入栈 | 18 | |页面重定向 |当前页面出栈,新页面入栈 | 19 | |页面返回 |页面出栈 | 20 | |Tab 切换 |页面全部出栈,只留下初始的 Tab 页面 | 21 | |重加载 |页面全部出栈,只留下新的页面 | 22 | 23 | **注意: 开发者可以使用 getCurrentPages() 函数获取当前页面栈。** 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/app_service_routefile.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 文件作用域 3 | header: develop 4 | nav: framework 5 | sidebar: app_service_routefile 6 | --- 7 | 8 | 9 | **解释**: 在 JavaScript 文件中声明的变量和函数只在该文件中有效;不同的文件中可以声明相同名字的变量和函数,且不会互相影响。 10 | 通过全局函数 getApp() 可以获取全局的应用实例,如果需要全局的数据可以在 [App()](https://smartprogram.baidu.com/docs/develop/framework/app_service_register/#App/) 中设置 11 | 12 | **代码示例** 13 | 14 | ```js 15 | // app.js 16 | App({ 17 | data: 1 18 | }); 19 | ``` 20 | 21 | ```js 22 | // page.js 23 | var app = getApp(); 24 | app.data++; 25 | ``` 26 | 27 | ```js 28 | // page2.js 29 | var app = getApp(); 30 | console.log(app.data); 31 | // 2 32 | ``` 33 | -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/app_service_routegetCurrentPages.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: getCurrentPages 3 | header: develop 4 | nav: framework 5 | sidebar: app_service_routegetCurrentPages 6 | --- 7 | 8 | 9 | 10 | **解释**:getCurrentPages 全局函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。 11 | 12 | **代码示例** 13 | 14 | 在开发者工具中预览效果 15 | 16 | > 页面切换路径过多,详细示例请在开发者工具中的控制台查看。 17 | 18 | ```js 19 | // index.js 20 | Page({ 21 | onShow() { 22 | console.log(getCurrentPages()); // [{...}] 23 | } 24 | }); 25 | ``` 26 | 27 | **注意: 不要尝试修改页面栈,会导致路由以及页面状态错误。** 28 | -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/operating-mechanism.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 运行机制 3 | header: develop 4 | nav: framework 5 | sidebar: operating-mechanism 6 | --- 7 | 8 | 启动方式 9 | ----- 10 | 11 | 智能小程序的启动方式分为两种: 12 | - 首次加载智能小程序的冷启动; 13 | - 一定时间内重新打开智能小程序的热启动。 14 | 15 | **名词解释:** 16 | - **冷启动:** 通常是用户首次打开智能小程序,或者在手机百度客户端主动销毁了智能小程序之后,用户又重新打开了智能小程序,在这两种情况下,智能小程序都会初始化启动。 17 | 18 | - **热启动:** 用户已经访问过该智能小程序,短暂退出后,又重新回到智能小程序。这时手机百度不会销毁该智能小程序,而只是控制智能小程序的显隐。 19 | 20 | 销毁机制 21 | ----- 22 | 23 | 客户端主动触发智能小程序销毁的场景: 24 | - 当用户退出智能小程序超过5分钟后; 25 | - 打开小程序数量超过系统支持上限6个(系统按照小程序被打开的先后顺序进行销毁)。 26 | 27 | 更新机制 28 | ----- 29 | 30 | 当智能小程序冷启动时,客户端会使用本地已有的基础包加载智能小程序,同时会自动检测云端是否有新的基础包版本,并异步下载。下载完成后,当用户下一次触发冷启动时,将使用新版本的基础包。 31 | 32 | 33 | 再次打开逻辑 34 | ----- 35 | 客户端单纯控制使智能小程序的前台展示,再次打开时会保留之前智能小程序的页面栈等所有内容。 36 | 37 | -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/sjs_annotation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 注释 3 | header: develop 4 | nav: framework 5 | sidebar: sjs_annotation 6 | --- 7 | 8 | 9 | sjs文件中的注释方式与JavaScript一致。 10 | 11 | - sjs文件中的代码注释 12 | 13 | **代码示例** 14 | 在开发者工具中预览效果 15 | 16 | ```js 17 | // pages/utils/sjs 18 | 19 | // const NAME = 'sjs'; 20 | 21 | /** 22 | * let str = 'swan'; 23 | */ 24 | ``` 25 | 26 | - import-sjs 标签中代码注释 27 | 28 | **代码示例** 29 | 在开发者工具中预览效果 30 | 31 | ```xml 32 | 33 | 34 | 35 | // const NAME = 'sjs'; 36 | 37 | /** 38 | * let str = 'swan'; 39 | */ 40 | 41 | 42 | ``` 43 | 44 | 45 | 上述例子中,所有`SJS`代码均被注释掉了。 -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/sjs_variable.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 变量 3 | header: develop 4 | nav: framework 5 | sidebar: sjs_variable 6 | --- 7 | 8 | ## 概念 9 | 10 | - SJS 中的变量均为值的引用; 11 | - 没有声明的变量直接赋值使用,会被定义为全局变量; 12 | - 如果只声明变量而不赋值,则默认值为`undefined`; 13 | - var 表现与 javascript 一致,会有变量提升; 14 | - 支持 const 与 let,与 JavaScript 表现一致。 15 | 16 | ```js 17 | // 在SJS模块中 18 | var count = 110; 19 | var bar = 'hello swan'; 20 | var undef; // undef === undefined 21 | const NAME = 'SJS'; 22 | let str = 'string'; 23 | ``` 24 | 25 | ## 变量名 26 | 变量命名必须符合下面两个规则: 27 | 28 | - 首字符必须是:字母(a-zA-Z),下划线(_) 29 | - 剩余字符可以是:字母(a-zA-Z),下划线(_), 数字(0-9) 30 | 31 | ## 保留标识符 32 | 以下标识符不能作为变量名: 33 | 34 | ```js 35 | for 36 | do 37 | while 38 | default 39 | continue 40 | switch 41 | case 42 | break 43 | 44 | var 45 | null 46 | undefined 47 | Infinity 48 | NaN 49 | 50 | void 51 | delete 52 | typeof 53 | 54 | if 55 | else 56 | 57 | true 58 | false 59 | 60 | require 61 | function 62 | arguments 63 | this 64 | return 65 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/framework/view_if.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 条件 3 | header: develop 4 | nav: framework 5 | sidebar: view_if 6 | --- 7 | 8 | ### s-if 9 | **通过 s-if 指令我们可以实现以下操作:** 10 | - 为元素指定条件:当条件成立时元素可见,当条件不成立时元素不存在; 11 | - 为 s-if 增加一个额外条件分支块; 12 | - 为 s-if 增加一个不满足条件的分支块。s-else 指令没有值; 13 | 14 | **注意: s-if 与 s-for 不可在同一标签下同时使用。** 15 | 16 | **代码示例** 17 | 18 | ```xml 19 | 20 | 4G 21 | Wifi 22 | Other 23 | ``` 24 | 25 | ```js 26 | // if-demo.js 27 | Page({ 28 | data: { 29 | is4G: true, 30 | isWifi: false 31 | } 32 | }); 33 | ``` 34 | s-if 与 s-else 之间加入多余标签会报错 35 | 36 | **代码示例** 37 | 38 | ```xml 39 | 40 | 4G 41 | other words 42 | Other 43 | ``` 44 | 45 | ```js 46 | // if-demo.js 47 | Page({ 48 | data: { 49 | is4G: true, 50 | isWifi: false 51 | } 52 | }); 53 | ``` 54 | 55 | ### block s-if 56 | **解释:** block 虚拟组件,在渲染时不会包含自身,只会渲染其内容。可以用来渲染一组组件或者标签。 57 | 58 | **代码示例** 59 | 60 | ```xml 61 | 62 | 63 | name 64 | age 65 | 66 | ``` 67 | -------------------------------------------------------------------------------- /program-docs/docs/develop/function/error_code.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 错误码 3 | header: develop 4 | nav: function 5 | sidebar: error_code 6 | --- 7 | 8 | ## 业务平台错误码 9 | 10 | |错误码|错误码描述|解决方案 11 | |---|---|---| 12 | |10000|签名校验失败|签名生成规则详见【签名与验签】| 13 | |10001|参数错误,userId取值不合法|检查请求参数(参考接口API),修改后重新发起请求| 14 | |10001|参数错误,orderId取值不合法|检查请求参数(参考接口API),修改后重新发起请求| 15 | |10001|参数错误,dealId不能为空|检查请求参数(参考接口API),修改后重新发起请求| 16 | |10001|参数错误,status不在取值范围|检查请求参数(参考接口API),修改后重新发起请求| 17 | |10002|系统错误,订单未找到|订单不存在,更换订单号重新请求| 18 | |10002|系统错误,已消费订单不允许退款|已消费订单不允许退款| 19 | |10002|系统错误,appKey未找到|使用正确的appKey,appKey的获取见【文档】| 20 | |10003|系统内部错误,请稍候重试|稍候重试| 21 | 22 | ## 接入平台统一错误码 23 | 24 | |错误码|错误码描述| 25 | |----|----| 26 | |930 |系统签名异常| 27 | |970 |接口权限校验失败| 28 | |4010001|系统异常| 29 | |4010002|非法操作| 30 | |4010003|系统未知错误| 31 | |4010004|系统必传参数缺失| 32 | |4010006|检测到XSS注入| 33 | |4010007|第三方服务异常,请求失败| 34 | |5010001|参数为空| 35 | |5010002|网络异常,请稍后再试| 36 | |5010003|访问量超过接口最大QPS| 37 | |5010004|服务异常,请稍后再试| 38 | |5010005|配置文件异常| 39 | |6010007|用户未登录| 40 | |6010008|系统异常| 41 | |7010001|第三方服务,返回数据异常| 42 | 43 |
44 | 45 | -------------------------------------------------------------------------------- /program-docs/docs/develop/function/file_system.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 读写权限 3 | header: develop 4 | nav: function 5 | sidebar: file_system 6 | --- 7 | 8 | 9 | 10 | 11 | 12 | |接口|是否可读|是否可写| 13 | |-|-|-| 14 | |代码包文件|有|无| 15 | |本地临时文件|有|无| 16 | |本地缓存文件|有|无| 17 | |本地用户文件|有|有| 18 | 19 | -------------------------------------------------------------------------------- /program-docs/docs/develop/function/file_system_package.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 代码包文件 3 | header: develop 4 | nav: function 5 | sidebar: file_system_package 6 | --- 7 | 8 | 文件系统是小程序提供的一套以小程序和用户维度隔离的存储以及一套相应的管理接口,为开发者提供了更加完善的能力来支撑小程序中复杂的文件目录结构和文件读写操作。通过 [swan.getFileSystemManager](/develop/api/file/file_system/#FileSystemManager/)来获取全局唯一的文件系统管理器,所有文件系统的管理操作通过 [FileSystemManager](/develop/api/file/file_system/#FileSystemManager/) 来调用。 9 | 10 | 11 | 12 | + “代码包文件” 是项目代码目录中的文件。 13 | + 生命周期: 14 | + 下载小程序时被产生。 15 | + 小程序被删除时,会被清除。 16 | + 读写权限:只可读,不可写入。 17 | + 访问路径:从项目根目录开始写文件路径,不支持相对路径(即不支持 "./" 或 "../"),不需要带访问协议前缀。 18 | 19 | 例如: 20 | ```js 21 | const fileSystemManager = swan.getFileSystemManager(); 22 | // 路径:从项目根目录开始写文件路径,不支持相对路径,不需要带访问协议前缀。 23 | const imageData = fileSystemManager.readFileSync('loading/loading_barbg.png'); 24 | ``` 25 | 26 | -------------------------------------------------------------------------------- /program-docs/docs/develop/function/invoke_process.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 调用流程 3 | header: develop 4 | nav: function 5 | sidebar: invoke_process 6 | --- 7 | 8 | 本文介绍对接百度收银台相关接口的调用流程。 9 | 10 | ## 支付调用流程 11 | 12 | ![图片](../../../img/function/zhifu2.jpg) 13 | 14 | ## 退款调用流程 15 | 16 | ![图片](../../../img/function/zhifu3.png) -------------------------------------------------------------------------------- /program-docs/docs/develop/function/tune_up_capitaBill.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 下载资金账单 3 | header: develop 4 | nav: function 5 | sidebar: tune_up_capitaBill 6 | --- 7 | 8 | 9 | 10 | **接口描述**:商户可以通过该接口下载历史资金流水账单。 11 | 12 | 13 | **接口地址**:`https://openapi.baidu.com/rest/2.0/smartapp/pay/paymentservice/capitaBill` 14 | 15 | 16 | **请求方式**:`GET` 17 | 18 | **请求参数**: 19 | 20 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | 21 | | ------------ | -------------------------------- |-----------|--------|----| 22 | |access_token|获取[access_token](https://smartprogram.baidu.com/docs/develop/serverapi/power_exp/) | query | true |string | 23 | | billTime | 对账单日期 格式 yyyy-MM-dd | query | true |string | 24 | 25 | **响应示例**: 26 | 27 | ```json 28 | { 29 | "data": { 30 | "data": [ 31 | { 32 | "createTime": "string",//创建时间 33 | "downloadName": "string",//账单名称 34 | "exportStatus": 0,//导出进度 35 | "url": "string"//下载地址 36 | } 37 | ], 38 | "totalCount": 0 39 | }, 40 | "errno": 0, 41 | "msg": "string" 42 | } 43 | ``` 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /program-docs/docs/develop/function/tune_up_orderBill.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 下载订单对账单 3 | header: develop 4 | nav: function 5 | sidebar: tune_up_orderBill 6 | --- 7 | 8 | 9 | 10 | **接口描述**:商户可以通过该接口下载历史交易清单。 11 | 12 | 13 | **接口地址**:`https://openapi.baidu.com/rest/2.0/smartapp/pay/paymentservice/orderBill` 14 | 15 | 16 | **请求方式**:`GET` 17 | 18 | **请求参数**: 19 | 20 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | 21 | | ------------ | -------------------------------- |-----------|--------|----| 22 | |access_token|获取[access_token](https://smartprogram.baidu.com/docs/develop/serverapi/power_exp/) | query | true |string | 23 | | billTime | 对账单日期 格式 yyyy-MM-dd | query | true |string | 24 | 25 | **响应示例**: 26 | 27 | ```json 28 | { 29 | "data": { 30 | "data": [ 31 | { 32 | "createTime": "string",//创建时间 33 | "downloadName": "string",//账单名称 34 | "exportStatus": 0,//导出进度 35 | "url": "string"//下载地址 36 | } 37 | ], 38 | "totalCount": 0 39 | }, 40 | "errno": 0, 41 | "msg": "string" 42 | } 43 | ``` 44 | -------------------------------------------------------------------------------- /program-docs/docs/develop/performance/http.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: http请求失败说明 3 | header: develop 4 | nav: framework 5 | sidebar: http 6 | --- 7 | 8 |   9 | ## HTTP访问失败定义 10 | 在网络可用的前提下,当使用小程序request网络请求,**请求结果失败或服务端返回的错误码为4XX/5XX,则认为当次HTTP访问失败。** 11 | 小程序错误码包含0/4XX/5XX几种情况,其中: 12 | * "0"代表网络请求直接失败、无错误码; 13 | * 4xx/5xx为小程序服务端返回的错误码。 14 | 15 |   16 | ## 数据解读 17 | 18 | ### HTTP访问失败率 = HTTP访问失败pv/request请求pv 19 | 20 | 开发者可以在小程序平台运维中心模块看到自己小程序HTTP访问失败率的数据情况,当HTTP访问失败率较高时,小程序自身服务可能存在不稳定的情况,这同时也可能会影响白屏率和性能相关数据。 -------------------------------------------------------------------------------- /program-docs/docs/develop/performance/performance-analysis-tool.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 性能分析工具 3 | header: develop 4 | nav: framework 5 | sidebar: performance-analysis-tool 6 | --- 7 | 8 | ### 性能面板 9 | 10 | 我们提供了性能面板让开发者了解智能小程序的性能。开发者可以在开发版智能小程序下打开性能面板,打开方法:进入开发版智能小程序,进入右上角更多按钮,点击「性能窗口开关」。 11 | 12 | 13 | 14 | 15 | ### 性能面板指标说明 16 | 17 | |指标|说明| 18 | |----|----| 19 | |CPU| 智能小程序进程的 CPU 占用率,仅 Android 下提供| 20 | |内存| 智能小程序进程的内存占用,仅 Android 下提供| 21 | |启动耗时| 智能小程序启动总耗时| 22 | |下载耗时| 智能小程序包下载耗时,首次打开或资源包需更新时会进行下载| 23 | |页面切换耗时 | 智能小程序页面切换的耗时| 24 | |帧率/FPS | 智能小程序页面刷新帧率| 25 | |首次渲染耗时 | 页面首次渲染的耗时| 26 | |再次渲染耗时| 页面再次渲染的耗时(通常由开发者的 setData 操作触发)| 27 | |数据缓存 | 智能小程序通过 Storage 接口储存的缓存大小 | 28 | -------------------------------------------------------------------------------- /program-docs/docs/develop/serverapi/deleteresource.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: deleteresource 3 | header: develop 4 | nav: serverapi 5 | sidebar: deleteresource 6 | --- 7 | 8 | 9 | ## 下线物料资源 10 | **解释**:删除素材接口,API实时接口提交方式。 11 | > 若有资源在小程序内下线或资源推送错误需要删除的情况,请调用该接口进行资源的删除,删除后的素材无法重新提交。 12 | 13 | ``` 14 | POST https://openapi.baidu.com/rest/2.0/smartapp/access/deleteresource 15 | ``` 16 | 17 | **公共请求参数** 18 | 19 | |参数|类型|是否必填|描述|示例值| 20 | |--|--|--|--|--| 21 | |access_token|string|是|小程序权限校验Token|--| 22 | 23 | **请求参数** 24 | 25 | |参数|类型|是否必填|描述|示例值| 26 | |--|--|--|--|--| 27 | |app_id|integer|否|app_id|--| 28 | |path|string|是|智能小程序内页链接|/pages/detail/detail?id=100001| 29 | 30 | **公共响应参数** 31 | 32 | |参数|类型|描述|示例值| 33 | |--|--|--|--| 34 | |errno|integer|状态码|40001| 35 | |msg|string|状态描述|参数错误| 36 | |data|object|响应参数|--| 37 | 38 | 39 | 40 | 41 | **响应示例** 42 | ```json 43 | {    44 | "errno":0,    45 | "msg":"success",    46 | "data":"" 47 | } 48 | ``` 49 | 50 | -------------------------------------------------------------------------------- /program-docs/docs/develop/serverapi/deletesitemap.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: deletesitemap 3 | header: develop 4 | nav: serverapi 5 | sidebar: deletesitemap 6 | --- 7 | 8 | 9 | 10 | ## 删除sitemap 11 | 12 | **解释**:删除链接文件(即sitemap)接口,链接文件提交方式(即sitemap提交)。 13 | > 若需要删除sitemap文件,请调用该接口,删除的仅为sitemap链接地址,对sitemap中已提交成功的素材无影响。 14 | 15 | ``` 16 | POST https://openapi.baidu.com/rest/2.0/smartapp/access/deletesitemap 17 | ``` 18 | 19 | **公共请求参数** 20 | 21 | |参数|类型|是否必填|描述|示例值| 22 | |--|--|--|--|--| 23 | |access_token|string|是|小程序权限校验Token|--| 24 | 25 | **请求参数** 26 | 27 | |参数|类型|是否必填|描述|示例值| 28 | |--|--|--|--|--| 29 | |app_id|integer|否|app_id|--| 30 | |url|string|是|sitemap链接|--| 31 | 32 | **公共响应参数** 33 | 34 | |参数|类型|描述|示例值| 35 | |--|--|--|--| 36 | |errno|integer|状态码|40001| 37 | |msg|string|状态描述|参数错误| 38 | |data|object|响应参数|--| 39 | 40 | 41 | 42 | 43 | 44 | **响应示例** 45 | 46 | ```json 47 | { 48 | "errno":0,    49 | "msg":"success",    50 | "data":"" 51 | } 52 | ``` 53 | -------------------------------------------------------------------------------- /program-docs/docs/develop/serverapi/open_feed.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 信息流物料提交简介 3 | header: develop 4 | nav: serverapi 5 | sidebar: open_feed 6 | --- 7 | 8 | 9 | 10 | 必填字段为必须要提交的字段,未填写时系统校验将不会通过。 11 | 12 | 选填字段越多越好,有利于保证物料的更好分发。 13 | 14 | 开发者需按照小程序物料对应的类型补充相关字段,否则将会被过滤。若包含多个物料类型,可以按照开发者文档提供多个物料类型(例如汽车之家同时包含视频和图文两种类型物料)。 15 | 16 | #### 1.物料提交 17 | 18 | - 开发者可以通过接口(适用于少量的素材提交,每天调用上限500次,实时性较好)、sitemap接口(适用于素材量较大的情况)或文件三种方式提交物料,需通过对应的位置提交相应的物料。 19 | 20 | #### 2.首次数据提交和更新模式 21 | 22 | - 首次提交:开发者根据自己的物料类型,依照对应字段提交初次的内容。字段应包含基本字段和拓展字段。 23 | - 实时更新:调用相关接口,实时进行物料增删改 24 | 25 | #### 3.审核上线 26 | 27 | - 百度侧会对物料进行机器审核和人工审核,并实时反馈审核状态,开发者可对审核失败的物料进行修改 28 | - 物料审核通过后即可进行小流量分发,当质量和分发效果达到一定程度时则进行全量分发 29 | 30 | #### 4.内容和页面规范 31 | 32 | - 物料内容应积极健康,并保证一定的实效性,同时不应与百家号内容重合 33 | 34 | ### 物料提交和删除服务接口 35 | 36 | 开发者可通过接口或sitemap接口的方式提交物料。 37 | 38 | * **API实时接口提交**:适用于少量素材的提交,每天有500次的调用限制。该方式实效性较高,素材可实时同步到小程序库。 39 | 40 | * **链接文件(sitemap)提交**:适用于大量素材的提交,该方式实效性相对接口方式较低,提交素材后,下一天的0点小程序侧会自动抓取解析物料,存在一定时间差。 41 | 42 | -------------------------------------------------------------------------------- /program-docs/docs/develop/serverapi/open_risk_power.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 功能介绍 3 | header: develop 4 | nav: serverapi 5 | sidebar: open_risk_power 6 | --- 7 | 8 | ### 使用场景 9 | 10 | - **营销活动反作弊** 11 | 识别在抽奖、签到、平台装券、商家领券等营销形式上出现的大规模作弊刷取奖品的情况。 12 | 13 | - **恶意下单攻击** 14 | 识别在电商/打车等场景下,出现大规模恶意下单退单、刷取销量、恶意注册等行为。 15 | 16 | - **电商交易反欺诈** 17 | 识别卖家或买家采取虚假交易等方式骗取平台补贴、激励的行为。 18 | 19 | - **稀缺物品抢购** 20 | 识别手机抢购,抢票,排队及专家挂号场景下,恶意刷取的行为。 21 | 22 | - **榜单投票恶意刷量** 23 | 识别明星粉丝打榜、投票、点赞、关注等操作上的作弊行为。 24 | 25 | ### 功能介绍 26 | 27 | 百度智能小程序风控服务,是基于业务场景结合IP画像、设备指纹、黑卡检测、威胁情报等多维度信息实时识别风险的专业防护服务,可有效识别和解决渠道推广、支付安全、营销活动存在的作弊问题,通过对设备伪造、群控、模拟器、设备注入、脚本攻击等黑产常用手段的识别与打击,从而保障开发者个人/企业的营销资金不被黑产恶意套取,提升业务的投资回报率(ROI)。 28 | 29 | > - 服务优势:精准识别、持续对抗、响应快速、海量数据共享 30 | 31 | 32 | 33 | 34 | ### 使用说明 35 | 建议开发者在自身业务的关键环节增加风险判断,比如拆红包环节、领取优惠券环节、拉新环节、生单环节等,针对高作弊风险用户做特殊逻辑处理。风控服务API在使用前,需开发者先通过小程序的[swan-getSystemRiskInfo](https://smartprogram.baidu.com/docs/develop/api/open/swan-getSystemRiskInfo/#swan-getSystemRiskInfo)接口获取风控核心参数xtoken。 36 | >- 为了保证服务质量,希望开发者尽可能传递完整detectrisk接口参数。 37 | >- 切勿针对xtoken做缓存处理等,确保每次请求均通过swan-getSystemRiskInfo实时获取。 38 | 39 | 40 | 41 | **开发流程** 42 | ![图片](../../../img/api/information/risk.png) 43 | 44 | 45 | -------------------------------------------------------------------------------- /program-docs/docs/develop/serverapi/sendintroduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 模板消息下发条件 3 | header: develop 4 | nav: serverapi 5 | sidebar: sendintroduction 6 | --- 7 | 8 | 9 | 10 | **重要:下发消息请先完成模板的选用。** 11 | 开发者需要先在开发者后台添加属于自己的消息模板,获取模板ID后才能进行消息下发 12 | 13 | ## 支付类消息 14 | 对于在小程序内完成过支付行为的用户,可允许开发者向用户在 **7 天内**推送有限条数的模板消息 15 | 16 | 17 | > 1 次支付可下发 3 条,多次支付下发的条数独立,互不影响。 18 | 19 | 20 | ## 表单类消息 21 | 对于在小程序内发生过提交表单行为的用户,可允许开发者向用户在 **7 天内**推送有限条数的模板消息 22 | 23 | 24 | > 1 次提交表单可下发 1 条,多次提交下发条数独立,相互不影响。 25 | 26 | 27 | ## 订阅类消息 28 | 对于在小程序内发生过订阅行为,且同意授权发送订阅消息的用户,可允许开发者向用户推送有限条数的模板消息,**无时间限制** 29 | 30 | 31 | > 1次订阅授权可下发 1 条,同一订阅行为的多次授权,下发条数不累计 32 | 33 | -------------------------------------------------------------------------------- /program-docs/docs/develop/simple/h5.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: h5 3 | header: develop 4 | nav: simple 5 | sidebar: h5 6 | --- 7 | ## 智能小程序登录状态同步到H5页面 8 | 9 | 智能小程序本地存储的用户登录状态可通过如下操作同步到小程序中打开的H5页面中: 10 | 11 | **操作步骤**: 12 | 1. 小程序登录页登录成功后,请调用 setStorage 或者 setStorageSync 将登录状态信息存储在 storage中; 13 | 2. 打开H5页面时,以url为`h5-content-URL`为例: 14 | 2.1 向服务器发请求获取一个认证用的token; 15 | 2.2 将`h5-content-URL`和 token 作为参数,拼接在登录 API 上,如:`login-URL`。 16 | 2.3 使用 web-view 组件加载拼接好的`login-URL`。 17 | 3. 服务器收到`login-URL`L请求后验证token,验证成功后重定向到`h5-content-URL`并 Set-Cookie,实现将小程序登录状态同步到H5页面。 18 | 19 | 20 | **说明**: 21 | > * 登录状态无需在打开H5页面时即刻同步,可以在H5页面中业务流程需要时,通过 jssdk 的 api 调起小程序的登录页面; 22 | > * 为token设置有效期,建议为1-2分钟。 23 | -------------------------------------------------------------------------------- /program-docs/docs/develop/swan/client-lib.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/develop/swan/client-lib.md -------------------------------------------------------------------------------- /program-docs/docs/develop/swan/compatibility.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 兼容性说明 3 | header: develop 4 | nav: swan 5 | sidebar: compatibility 6 | --- 7 | 8 | 随着智能小程序版本的不断更新,组件和 API 能力正在逐步完善和丰富,旧版本的客户端会出现不支持新增功能的情况,因此在使用这些新功能的时候要进行兼容处理。通常我们会使用版本号比较、API存在判断、swan.canIUse三种方式来处理兼容。 9 | 10 | 1. API / 组件是否支持的,用特征支持canIUse / API 存在判断。 11 | 12 | 2. 非兼容性修改导致行为变化的,例如框架生命周期变化等,用版本号判断。 13 | 14 | 如果由于业务需求,无法在低版本的基础库上运行小程序的话,还可以设置最低基础库来让小程序在低于最低基础库版本的客户端上提示用户升级。 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /program-docs/docs/develop/swan/compatibility_api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: API存在判断 3 | header: develop 4 | nav: swan 5 | sidebar: compatibility_api 6 | --- 7 | 8 | 一般来说,对于新增的API,开发者可以用以下代码来判断新增API是否支持用户的客户端: 9 | 10 | **代码示例** 11 | 12 | ```js 13 | if (swan.createCanvasContext) { 14 | swan.createCanvasContext() 15 | } 16 | else { 17 | //这里是开发者自己的兼容逻辑,可以把相关功能入口隐藏掉 18 | } 19 | ``` 20 | -------------------------------------------------------------------------------- /program-docs/docs/develop/swan/compatibility_caniuse.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: canIUse 3 | header: develop 4 | nav: swan 5 | sidebar: compatibility_caniuse 6 | --- 7 | > 详细API内容参见[canIUse](https://smartprogram.baidu.com/docs/develop/api/device_sys/swan-canIUse/)。 8 | ### 兼容api新增属性或返回值 9 | 开发者可以用以下代码判断 API 的参数或者返回值是否有新增: 10 | 11 | **代码示例** 12 | 13 | ```js 14 | swan.showModal({ 15 | success: function(res) { 16 | if (swan.canIUse('showModal.cancel')) { 17 | console.log(res.cancel) 18 | } 19 | } 20 | }) 21 | ``` 22 | ### 兼容组件 23 | 24 | 由于新增的组件或属性在旧版本上是否既不会被处理,也不会报错。开发者可以用以下代码对旧版本进行降级处理: 25 | 26 | **代码示例** 27 | 28 | ```js 29 | Page({ 30 | data: { 31 | canIUse: swan.canIUse('cover-view') 32 | } 33 | }) 34 | 37 | ``` -------------------------------------------------------------------------------- /program-docs/docs/develop/swan/compatibility_diff.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Android 与 iOS 差异 3 | header: develop 4 | nav: swan 5 | sidebar: compatibility_diff 6 | --- 7 | 8 | 9 | |功能|Android|iOS| 10 | |--|--|--| 11 | |webp格式|支持|不支持| -------------------------------------------------------------------------------- /program-docs/docs/develop/swan/compatibility_version.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 基础库最低版本设置 3 | header: develop 4 | nav: swan 5 | sidebar: compatibility_version 6 | --- 7 | 8 | 9 | 10 | 在上线小程序之前,您可根据业务需要,设置最低基础库版本。 11 | 12 | * 初次发布小程序包 13 | 14 | 如您初次发布小程序包,在选择最低基础库版本后,该基础库版本及基础库更高版本所对应的百度 App 使用者,将可正常使用您的小程序;低版本使用者,则会收到升级百度 App 的提示。 15 | 16 | * 多次发布小程序包 17 | 18 | 如您为多次发布小程序的开发者,选择最低基础库版本后,只对最新发布的小程序生效,该基础库版本及基础库更高版本所对应的百度 App 使用者,将可正常使用您最新发布的小程序;低版本使用者,将继续使用旧版本小程序。 19 | > 线上会存在并分发多个小程序版本。 20 | 21 | 25 | 26 | ### 设置方法 27 | 28 | 最低基础库的设置可以在发布时通过开发者工具设置。 29 | 30 | ![图片](../../../img/min-swan-version.png) -------------------------------------------------------------------------------- /program-docs/docs/develop/tutorial/demo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 体验智能小程序 3 | header: develop 4 | nav: tutorial 5 | sidebar: demo 6 | --- 7 | 8 | 9 | 请下载百度 APP 最新版本,扫描下图二维码体验智能小程序。 10 | 11 | > 若安装了[2.27-x及以后工具版本](https://smartprogram.baidu.com/docs/develop/devtools/history/)可[点击此处](swanide://guide/welcome/program?currentTab=templates)调起工具欢迎页,选择官方示例的模板查看。之前版本可下载[小程序示例源码包](https://b.bdstatic.com/miniapp/demo-1.1.9.zip)然后导入工具项目。 12 | 13 | 14 |
15 |
16 |
-------------------------------------------------------------------------------- /program-docs/docs/develop/tutorial/devcss.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 开发 .css 文件 3 | header: develop 4 | nav: tutorial 5 | sidebar: devcss 6 | --- 7 | 8 | 9 | 10 | 11 | CSS 结尾的样式文件,类似于常规 CSS,用以渲染界面时进行样式描述。 12 | 具体可以参考这里:https://smartprogram.baidu.com/docs/develop/framework/view_css/ 13 | -------------------------------------------------------------------------------- /program-docs/docs/develop/tutorial/devjs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 开发 .js 文件 3 | header: develop 4 | nav: tutorial 5 | sidebar: devjs 6 | --- 7 | 8 | 9 | 10 | SWAN 智能小程序中,JS 文件是控制交互逻辑的动态语言。 11 | 如,在 SWAN 模板中书写了以下代码: 12 | 13 | **代码示例** 14 | 15 | ```xml 16 | {{ me }} 17 | 18 | ``` 19 | 20 | 在 JS 中可以对于视图中的行为进行监听,并触发界面的变化。 21 | 22 | ```js 23 | Page({ 24 | setName: function() { 25 | this.setData({ me: "aaa" }); 26 | } 27 | }) 28 | ``` 29 | 30 | **代码示例 - 错误写法** 31 | 32 | ```xml 33 | {{ me }} 34 | 35 | ``` 36 | 37 | 在 JS 中可以对于视图中的行为进行监听,并触发界面的变化。 38 | 39 | ```js 40 | Page({ 41 | setName: function() { 42 | this.Data.me = "aaa"; // 这样写不会触发swan界面的变化 43 | } 44 | }) 45 | ``` 46 | 47 | **说明**: 48 | * 书写 SWAN App 的逻辑层请使用 JavaScript ; 49 | * 逻辑层将数据进行更新后,会触发视图更新; 50 | * 在 app.js 中使用 App 方法、在页面 JS 中使用 Page 方法,来进行页面的逻辑管理; 51 | * 可以在 SWAN 命名空间下,使用各种 API 端能力; 52 | * 框架中不可使用 window, document, location, navigator, localStorage, history等Web、浏览器 API。 53 | -------------------------------------------------------------------------------- /program-docs/docs/develop/tutorial/function_api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: API 3 | header: develop 4 | nav: tutorial 5 | sidebar: function_api 6 | 7 | --- 8 | 9 | 10 | 智能小程序为开发者提供了百度 App 提供的丰富的端能力。使用方式比较简单,直接调用 SWAN 对象上的端能力方法,或者 Page 对象中 this 上挂载的方法。 11 | 12 | 如`showToast`: 13 | 14 | **代码示例** 15 | 16 | ```js 17 | swan.showToast({ 18 | title: '我是标题' 19 | }); 20 | ``` 21 | 也有很多挂载在 Page 对象与 SWAN 上的方法,如 createCanvasContext,在 SWAN 对象与 Page 对象上均有。所以,你可以这样用: 22 | 23 | **代码示例** 24 | 25 | ```js 26 | Page({ 27 | data: {}, 28 | onLoad: function () { 29 | this.createCanvasContext(); 30 | } 31 | }); 32 | ``` 33 | 34 | 也可以这样用: 35 | 36 | **代码示例** 37 | 38 | ```js 39 | Page({ 40 | data: {}, 41 | onLoad: function () { 42 | swan.createCanvasContext(); 43 | } 44 | }); 45 | ``` 46 | 47 | 但是推荐使用第一种方法,可以在当前 Page 上精准查找,避免一些问题。具体方法的挂载,在 [API 章节](https://smartprogram.baidu.com/docs/develop/api/apilist/) 会有详细介绍。 48 | -------------------------------------------------------------------------------- /program-docs/docs/develop/tutorial/function_component.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 组件 3 | header: develop 4 | nav: tutorial 5 | sidebar: function_component 6 | --- 7 | 8 | 9 | 10 | 智能小程序中提供了丰富多样的组件,开发者可以在 .swan 文件中,使用预设好的组件,拼装完成自己的智能小程序的页面。 11 | 12 | 如:使用 slider 组件 13 | 14 | **代码示例** 15 | 16 | ```xml 17 | 18 | ``` 19 | 20 | 即可在页面上展示一个 slider 组件。 21 | 22 | 也可以在 slider 组件上绑定事件,在相应的组件事件发生时,得到回调与组件信息: 23 | 24 | **代码示例** 25 | 26 | ```xml 27 | 28 | ``` 29 | 30 | ```js 31 | Page({ 32 | changeSlider: function () { 33 | console.log('changeSwitchDuration'); 34 | } 35 | }); 36 | ``` 37 | 38 | -------------------------------------------------------------------------------- /program-docs/docs/develop/tutorial/processjs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 配置 app.js 文件 3 | header: develop 4 | nav: tutorial 5 | sidebar: processjs 6 | --- 7 | 8 | 9 | 10 | app.js 中存放全局的 JavaScript 逻辑;更多内容参见[生命周期](https://smartprogram.baidu.com/docs/develop/framework/process_life/)。 11 | 12 | **代码示例** 13 | 14 | ```js 15 | App({ 16 | onLaunch: function () { 17 | console.log('SWAN launch'); 18 | }, 19 | onShow: function () { 20 | console.log('SWAN展现'); 21 | }, 22 | onHide: function () { 23 | console.log('SWAN当前处于后台'); 24 | }, 25 | onError: function () { 26 | console.log('SWAN发生错误'); 27 | }, 28 | globalData: 'SWAN' 29 | }); 30 | ``` 31 | 32 | 整个小程序只有一个 App 实例,是全部页面共享的。开发者可以通过 getApp 方法获取到全局唯一的 App 示例,获取App上的数据或调用开发者注册在 App 上的函数。 33 | 34 | **代码示例** 35 | 36 | ```js 37 | // xxx.js 38 | const appInstance = getApp() 39 | console.log(appInstance.globalData) 40 | ``` 41 | -------------------------------------------------------------------------------- /program-docs/docs/develop/tutorial/testapp.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 测试号 3 | header: develop 4 | nav: tutorial 5 | sidebar: testapp 6 | --- 7 | 8 | 测试号是一个特殊的智能小程序的 AppID,开发者可以使用此 AppID 来开发和体验智能小程序。 9 | 10 | ### 使用测试号 11 | 12 | 在 2.19.0 以上版本的百度开发者工具中,进入新建项目界面,在填写 AppID 下面可以点击使用测试号,即可自动开通测试号权限并将测试号填写到 AppID 输入框。 13 | 14 | ![图片](../../../img/tutorial/testapp/create.png) 15 | 16 | 测试号在使用上有一些功能上的限制,比如不支持发布、云开发、云测试、插件、动态库、远程调试等能力,以及不支持支付、手机号等权限的获取。 17 | 18 | ![图片](../../../img/tutorial/testapp/main.png) 19 | 20 | 如果需要使用webview组件,请在项目信息内关闭域名校验功能后再次预览,即可在百度APP上跳过域名校验。 21 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/accessfeed.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 接入信息流流量 3 | header: introduction 4 | nav: book 5 | sidebar: accessfeed 6 | --- 7 | 8 | 9 | 10 | 11 | 信息流流量接入流程图 12 | 13 | ![图片](../../img/introduction/auditing/1.png) 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/accessfeed_examine.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 素材审核 3 | header: introduction 4 | nav: book 5 | sidebar: accessfeed_examine 6 | --- 7 | 8 | 9 | 10 | 11 | ### 审核概况 12 | 13 | 当您进行批量素材上传后,我们将尽快对您上传的素材进行审核,并给予您素材相关建议,您可以根据建议用于后续补充素材物料上传。 14 | 15 | 16 | 17 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/introduction10.png) 18 | 19 | **字段信息请参考开发文档** [submitresource](/develop/serverapi/submitresource/) 20 | 21 | 22 | 23 | ### 审核结果 24 | 25 | 26 | 27 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/introduction11.png) 28 | 29 | 30 | 31 | ## **信息流收录分发** 32 | 33 | 当您的素材在后台界面中状态显示为“投放中”时,说明您的素材已被信息流收录并会根据实际情况进行相应分发,具体展示样式将根据您提交的素材物料,由百度信息流决定展现具体样式,您可以在开发者后台,数据分析模块查看到信息流入口获取到的流量效果。 34 | 35 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/accessfeed_monitor.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 流量效果监控 3 | header: introduction 4 | nav: book 5 | sidebar: accessfeed_monitor 6 | --- 7 | 8 | 9 | 10 | 11 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/introduction12.png) 12 | 13 | 14 | 15 | 您可从开发者后台数据分析模块了解到信息流流量为您带来的流量收益。 -------------------------------------------------------------------------------- /program-docs/docs/introduction/accessfeed_publish.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 接小程序发布上线 3 | header: introduction 4 | nav: book 5 | sidebar: accessfeed_publish 6 | --- 7 | 8 | 9 | 10 | 11 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/introduction7.png) 12 | 13 | 当您的小程序尚未发布上线时,“素材资料提交”按钮将置灰,您的小程序发布上线后,该按钮即被点亮,如下图 14 | 15 | 16 | 17 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/introduction8.png) 18 | 19 | 20 | 21 | ![图片](../../img/introduction/auditing/图4.png) 22 | 23 | 在您的小程序尚未发布前,您也可以提前通过阅读“[信息流资源](https://smartprogram.baidu.com/docs/develop/serverapi/open_feed/#信息流物料提交简介/)”以及“[信息流流量说明](https://smartprogram.baidu.com/docs/introduction/feed/)”全面了解信息流流量的玩法及素材提交管理流程。 -------------------------------------------------------------------------------- /program-docs/docs/introduction/accessfeed_suggest.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 素材优化建议 3 | header: introduction 4 | nav: book 5 | sidebar: accessfeed_suggest 6 | --- 7 | 8 | 9 | 10 | ![图片](../../img/introduction/auditing/图15.png) 11 | 12 | 该模块会显示当前的top5待优化问题,您可参考“优化建议”对相应素材内容进行优化,同时您也可以下载问题样例具体查看问题详情,素材完成优化后您可重新上传素材内容,系统会尽快对已解决问题进行校验。 -------------------------------------------------------------------------------- /program-docs/docs/introduction/authenticity.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 真实性认证 3 | header: introduction 4 | nav: book 5 | sidebar: authenticity 6 | --- 7 | 8 | 9 | 10 | ### 什么是真实性认证? 11 | 主体真实性认证是为确保智能小程序帐号信息的真实性、安全性,对企业/机构/媒体等主体进行的认证服务。 12 | 13 | > 该环节主要用于验证主体真实性,为不影响到开发进展,可暂时跳过此步骤直接创建小程序,并在小程序的开发过程中任意时间完成真实性认证即可,真实性认证状态将影响提交代码包及发布上线。 14 | 15 | 真实性认证入口:[登录智能小程序平台](https://smartprogram.baidu.com/developer/index.html),单击顶部导航『管理中心』进入小程序管理界面,如下图所示: 16 | 17 | 18 | ![图片](../../img/introduction/register/图1.png) 19 | 20 | ### 真实性认证步骤 21 | 1. 验证 22 | 2. 收费(小程序优惠通道) 23 | 24 | 25 | ## FAQ 26 | 27 | #### Q: 银行信息输错,如何更改银行信息 28 | 29 | A:信息不对会打款失败,打款失败后就可以再次发起打款,再次打款可以改银行卡信息 30 | 31 | 32 | 33 | #### Q:进行真实性认证的时候,认证费百度是开专票还是普票? 34 | 35 | A;开发者可选专票/普票 36 | 37 | 38 | 39 | #### Q:进行真实性认证的时候,发票信息是否可以修改? 40 | 41 | A:开票主体信息不可改,直接带入注册时提交信息 42 | 43 | 44 | 45 | #### Q :真实性认证的时候账号永冻了怎么处理? 46 | 47 | A:目前永冻暂不支持解冻,建议重新注册账号进行操作。 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/authenticity_verification.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 验证 3 | header: introduction 4 | nav: book 5 | sidebar: authenticity_verification 6 | --- 7 | 8 | 9 | 针对各主体类型的特性,提供以下不同的验证方式,可以根据主体特性任选一种: 10 | 11 | 12 | |主体类型|验证方式| 13 | |---|---| 14 | |媒体|企业媒体:对公验证;
组织媒体:对公验证or证照验证。| 15 | |企业|企业:对公验证;
个体工商户:对公验证or法人人脸识别。| 16 | |政府|对公验证| 17 | |其他组织|对公验证或证照验证| 18 | 19 | 20 | #### 对公验证 21 | 22 | 1. 单击“对公验证”,进入对公打款页面。 23 | ![图片](../../img/introduction/register/p10.png) 24 | 2. 对公打款:填写企业对公银行开户信息。 25 | ![图片](../../img/introduction/register/p11.png) 26 | 3. 登录查询银行对公账户回填正确的打款金额进行验证。 27 | ![图片](../../img/introduction/register/p12.png) 28 | 29 | > 真实性认证打款有3次验证的机会,界面会有倒数次数的提示,超过3次填写错误账户会被冻结,请开发者谨慎操作。 30 | #### 证照验证 31 | 32 | > 仅组织媒体、其他组织需要进行此步操作。 33 | 34 | ![图片](../../img/introduction/register/2.jpg) 35 | 36 | #### 法人人脸识别 37 | 38 | > 仅个体工商需要进行此步操作。 39 | 40 | ![图片](../../img/introduction/register/111.png) 41 | ![图片](../../img/introduction/register/222.png) -------------------------------------------------------------------------------- /program-docs/docs/introduction/baijiahao.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 百家号流量接入 3 | header: introduction 4 | nav: book 5 | sidebar: baijiahao 6 | --- 7 | 8 | 智能小程序为开发者提供了对接百度生态的能力,将百度百家号流量成功接入智能小程序,从而打造一个更加开放、互联互通的小程序生态。 9 | 10 | 在小程序平台完成“上线小程序 ->上传素材->素材审核通过”的操作后,在百家号平台完成“编辑文章 -> 选择小程序 -> 文章发布”即可完成百家号文章的挂载。 11 | 12 | ![图片](../../img/introduction/scancode/baijiahao2.jpg) 13 | 14 | 15 | ## 小程序平台操作流程 16 | 17 | 1.小程序上线 18 | 19 | 确保有上线状态的小程序且小程序体验较好。 20 | 21 | 2.在开发者平台上传素材 22 | 23 | 开发者提交素材并确保素材审核通过 24 | 25 | ![图片](../../img/introduction/scancode/baijiahao9.png) 26 | 27 | 3.补充标题、图片、path和页面描述 28 | 29 | ![图片](../../img/introduction/scancode/baijiahao8.png) 30 | 31 | 4.作者在百家号端发布文章挂载小程序 32 | 33 | 百家号作者在百家号平台发文时可检索到该小程序并选择素材使用 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/baijiahaointroduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 百家号流量介绍 3 | header: introduction 4 | nav: book 5 | sidebar: baijiahaointroduction 6 | --- 7 | 百家号文章挂载智能小程序是一种为小程序获取流量的新方式,开发者可在发布百家号文章时,在文内插入相关的智能小程序来获得展现机会,获得更多分发。通过将百家号流量成功接入智能小程序,从而打造一个更加开放、互联互通的小程序生态。 8 | 9 | ## 入口介绍 10 | 11 | 挂载智能小程序的文章通过信息流进行展现: 12 | 1. 文章在信息流中展现; 13 | 2. 点击进入文章; 14 | 3. 点击文中插入的小程序卡片进入小程序。 15 | 16 | ![图片](../../img/introduction/scancode/baijiahao.gif) -------------------------------------------------------------------------------- /program-docs/docs/introduction/category.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 服务类目 3 | header: introduction 4 | nav: book 5 | sidebar: category 6 | --- 7 | 8 | 9 | 10 | 请根据界面提示上传所需资质文件,有可参考平台运营规范-[服务类目](https://smartprogram.baidu.com/docs/operations/catagory/)提前准备相关资质文件。 11 | 12 | ![图片](../../img/introduction/register/4.1.png) 13 | 小程序创建完成后,无需等待服务类目审核完成,登录 [智能小程序开发者后台](https://smartprogram.baidu.com/mappconsole/main/login) 。 打开“智能小程序首页”-“设置”-“开发设置”, 查看智能小程序的 AppID,以便尽快进入到开发环节。 14 | 15 | 服务类目状态将影响您的小程序发布,因此请在开发完成前务必确保服务类目审核通过。 16 | 17 | ## FAQ 18 | 19 | #### Q: 服务类目里的特殊行业资质如果没有我可以从哪里得到帮助? 20 | 21 | A: 通过小程序后台在线问题反馈系统或社区反馈服务类目及缺少的资质 22 | 23 | 24 | #### Q: H5 被替换成小程序之后,如果小程序下线,是在替换成原来的H5吗,还是其他的机制? 25 | 26 | A:会替换成为原来的H5 -------------------------------------------------------------------------------- /program-docs/docs/introduction/contact.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 客服功能介绍 3 | header: introduction 4 | nav: book 5 | sidebar: contact 6 | --- 7 | 8 | ## 为什么要接入客服功能 9 | 10 | 百度为小程序提供了强大、易用的客服消息能力。一方面为小程序客服消息提供了多个入口,触达用户更高效;另一方面,小程序与用户的交互更高效,提升服务质量,提高转化。 11 | 12 | ### 多入口重访,让百度用户成为你的用户 13 | 14 | - **百度APP/私信页面更快触达用户:** 百度APP的私信入口,对用户沟通过的客服消息聚合展示,用户可以在私信页面直接完成小程序重访。让百度用户成为你的用户。 15 | 16 | - **多入口快速跳转小程序主页:** 用户可以在客服消息页面直接跳转至小程序主页,实现用户唤醒。 17 | 18 | ### 高效的用户转化 19 | 20 | - **挖掘用户兴趣点提升转化率:** 客服功能扩展了与用户的接触时间,让运营能够在沟通中更便捷的了解用户,从而结合产品能力,更快更好的挖掘用户兴趣点,把潜在的用户转化成精准的用户,提高转化。 21 | - **用户沟通更有效:** 通过客服功能,开发者不仅能够实时的与用户进行沟通,也能够及时了解用户基本情况与诉求,提高客服应对能力,打造服务口碑。 22 | 23 | ## 客服消息入口 24 | 25 | 1. 开发者在小程序内添加客服功能(参考[在页面中使用客服消息](https://smartprogram.baidu.com/docs/develop/serverapi/contact_api_page/))后,用户可在小程序内唤起客服会话页面,给小程序发消息。 26 | 27 | 2. 已使用过的小程序客服消息会聚合显示在“百度APP-我的-私信”中,用户可以在此处查看历史客服消息,并给小程序客服发消息。 28 | 29 | ![图片](../../img/introduction/contact/1.png) 30 | 31 | ## 消息下发条件 32 | 33 | - 当用户向小程序客服发送消息后,48小时内,小程序客服最多就该条消息向用户发送5条消息回复,可发送客服消息条数不累加。 34 | 35 | - 用户每发送一条新消息,对小程序客服进行新的时间限制和条数限制,即重新开始计时,新的48个小时内小程序客服最多向用户发送5条消息回复。 36 | 37 | ## 消息支持的类型 38 | 39 | 目前不仅支持文本消息,也支持图片类型消息。 40 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/contact_standard.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 运营规范 3 | header: introduction 4 | nav: book 5 | sidebar: contact_standard 6 | --- 7 | 8 | 9 | 小程序客服消息使用除必须遵守《智能小程序平台运营规范》外,还不能违反以下规则,包括但不限于: 10 | 11 | 1. 不允许恶意诱导用户进行可能触发客服消息下发的操作,以达到可向用户下发客服消息的目的。 12 | 13 | 2. 不允许恶意骚扰用户,不允许下发与用户发送的内容无关或对用户造成骚扰的消息。 14 | 15 | 3. 不允许下发虚假夸大、违法类等恶意营销信息。 16 | 17 | 4. 不允许使用客服消息向用户下发色情、暴力等违反国家法律规定的信息。 18 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/design 6.textClipping: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/program-docs/docs/introduction/design 6.textClipping -------------------------------------------------------------------------------- /program-docs/docs/introduction/enter_application.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 登录与注册 3 | header: introduction 4 | nav: book 5 | sidebar: enter_application 6 | --- 7 | 8 | 打开[智能小程序官网首页](https://smartprogram.baidu.com/mappconsole/main/login),点击右上方“登录”按钮。目前支持百度账号及百度商业账号登录,企业账户建议选用百度商业账号进行登录。 9 | 10 | * 百度账号:除已有的百度账号外,您还可以使用百家号的非个人类型的账号快速入驻,没有账号可以点击[立即注册](https://passport.baidu.com/v2/?reg&tt=1529653839787&overseas=undefined&gid=4FAE580-DD55-41AB-B906-49E45497043D&tpl=smartapp&u=https%3A%2F%2Fsmartapp.baidu.com%2Fmappconsole%2Fmain%2Findex)。 11 | 12 | * 百度商业账号:您可以使用百度推广、百青藤、百度电商账号直接登录,也可点击[注册百度商业账号](https://smartprogram.baidu.com/developer/registeruc.html)。 13 | 14 | ​ ![1582703749214](https://b.bdstatic.com/searchbox/icms/searchbox/img/02271.png) 15 | 16 | ![1582703758848](https://b.bdstatic.com/searchbox/icms/searchbox/img/02272.png) 17 | 18 | ## FAQ 19 | 20 | #### Q:港澳台身份证及手机号码能提交百度小程序吗? 21 | 22 | A:暂时还不支持港澳台身份证及手机号码。 23 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/examine_faq.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 小程序审核失败FAQ 3 | header: introduction 4 | nav: book 5 | sidebar: examine_faq 6 | --- 7 | 8 | 9 | 10 | ## 一、名称问题 11 | 12 | 13 | 智能小程序名称未经允许不能直接使用宽泛及通用名词,包括不限于城市名、行业领域、产品名称、热门应用、流行用语句、古诗词句等;网站类名称结尾需含有“网”字。详细规范可查看:[注册名称规范](https://smartprogram.baidu.com/docs/operations/specification/#1-%E6%B3%A8%E5%86%8C%E5%90%8D%E7%A7%B0%E8%A7%84%E8%8C%83/) 14 | 15 | ## 二、服务类目问题 16 | 17 | 18 | - Discuz!小程序必须添加<社区|论坛>类目; 19 | - 类目可多选,请按照审核反馈修改服务类目; 20 | - 服务类目可前往智能小程序后台>设置>基本设置中修改; 21 | 22 | ## 三、小程序功能问题 23 | 24 | 25 | 若因小程序页面白屏、请求失败、页面加载为空等问题拒审: 26 | 27 | - 首先,请检查插件是否安装正确,是否已更新为最新版本。 28 | - 其次,确认智能小程序后台是否有新的模版版本待更新,如有,请更新。 29 | - 最后,需确认论坛PC站的对应页面或功能是否存在问题。 30 | 31 | >若经过以上排查,皆未发现问题原因,可将审核失败原因及相关截图在社区反馈。 32 | 33 | ## 四、小程序内容问题 34 | 35 | 36 | - 论坛网站得不含有涉政、黄赌毒等违反小程序规定的内容; 37 | - 请确保论坛网站的帖子数量、版块数量合理(不能过少); 38 | 39 | >为了提升审核通过率,可修改后多尝试几次重新提交。若屡次提交审核都未通过,可将审核失败原因及相关截图在社区反馈。 -------------------------------------------------------------------------------- /program-docs/docs/introduction/feed.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 信息流接入概述 3 | header: introduction 4 | nav: book 5 | sidebar: feed 6 | --- 7 | 8 | 9 | ### 智能小程序信息流流量简介 10 | 11 | 12 | 13 | * **对开发者:** 百度信息流流量是小程序开发者能够免费获取的重要流量入口之一,智能小程序为开发者提供上传素材入口,从而为开发者实现将小程序内容接入百度信息流流量的能力,开发者只需要进行简单的配置工作,就可以使自己的智能小程序内容被百度信息流收录及分发。 14 | 15 | 16 | 17 | * **对百度用户:** 在百度app中查看首页信息流时,百度信息流会根据用户属性、兴趣等个性化的推荐分发智能小程序的相关内容,从而使用户得到更加精准的服务推荐。 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | ### 信息流流量样式示例 26 | 27 | >小程序接入信息流流量属于自然分发,获取的是自然用户流量,展示样式由百度信息流决定,开发者仅需要提供素材即可。 28 | 29 | 30 | 31 | ![图片](../../img/introduction/auditing/all.jpg) 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/getphonenumber.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 获取用户手机号权限申请 3 | header: introduction 4 | nav: book 5 | sidebar: getphonenumber 6 | --- 7 | 8 | 9 | ### 申请条件 10 | 已完成认证的企业账号。 11 | 12 | ### 申请入口 13 | 登录[开发者平台](https://smartprogram.baidu.com/developer/index.html),通过小程序后台-设置-开发设置-获取用户手机号权限申请,申请获取用户手机号权限。 14 | 15 | 16 | 17 | ### 申请材料 18 | 19 | 企业注册资本、行业口碑、信息安全等级证书、手机号使用场景等。 20 | ![图片](../../img/introduction/register/register-14.png) 21 | * 企业注册资本,比如:50万 22 | 23 | * 行业口碑:申请获取用户手机号权限企业需具备良好的行业口碑:申请企业需无不良信用记录。 24 | 25 | [国家企业信用信息公示系统查询](http://www.gsxt.gov.cn/index.html查询) 26 | 27 | [企业失信黑名单查询](http://zhixing.court.gov.cn/search/) 28 | 29 | * 信息安全等级证书示例: 30 | 31 | ![图片](../../img/introduction/register/safe.png) 32 | 33 | * 手机号使用场景:目前仅支持使用手机号登录、填写收货联系方式,如有其它使用场景,请详细说明。 34 | 35 | > 申请说明:您的小程序内需包含用户隐私政策说明,完善的客服售后机制,否则影响您的小程序上线。 36 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/mount.md: -------------------------------------------------------------------------------- 1 | # 百家号作者发文挂载智能小程序 2 | 3 | 4 | 5 | 百家号作者发文挂载智能小程序,是开发者通过普通作者挂载自己小程序来获取更多流量的新流量获取方式。开发者只需在平台上传并授权给作者开放小程序挂载卡片物料,就可以将自己的小程序提供给写相关内容的作者进行挂载,从而获得流量。依托此功能,开发者可以获取到更开放的流量。 6 | 7 | 8 | 9 | ## 入口介绍: 10 | 11 | 挂载智能小程序的文章通过信息流进行展现 12 | 13 | 信息流展现——点击进入文章——点击文中插入的小程序卡片进入小程序 14 | 15 | 百家号挂载入口图 16 | 17 | ![图片](../../img/introduction/scancode/baijiahao.gif) 18 | 19 | 20 | 21 | 22 | ## 接入方法: 23 | 24 | 1. 完成小程序发布上线,前往授权: 25 | 26 | 27 | 28 | ![图片](../../img/introduction/mount/2.png) 29 | 30 | 31 | 2. 完成授权:(授权状态不可更改,请慎重选择) 32 | 33 | * 当开发者选择『同意』授权时,授权状态为:全部开放 34 | 35 | * 当开发者选择『不同意』授权时,授权状态为:向绑定熊掌ID的号开放 36 | 37 | 38 | 39 | ![图片](../../img/introduction/mount/3.png) 40 | 41 | 3. 上传素材 42 | 43 | 44 | ![图片](../../img/introduction/mount/4.png) 45 | 46 | 4. 补充标题,图片,path和页面描述(选填) 47 | 48 | ![图片](../../img/introduction/mount/5.png) -------------------------------------------------------------------------------- /program-docs/docs/introduction/publish.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 发布上线 3 | header: introduction 4 | nav: book 5 | sidebar: publish 6 | --- 7 | 8 | 9 | ### 上线前准备 10 | 发布上线前,请确认完成真实性认证,否则小程序将无法发布上线。 11 | 12 | #### 在开发者后台可点击“发布”按钮完成小程序上线发布操作。 13 | 14 | 发布上线小程序后,您可以查看文档中流量的相关介绍进行流量配置与功能介绍,帮助丰富小程序功能与流量获取渠道。 15 | 16 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/introduction6.png) 17 | 18 | 19 | ## FAQ 20 | 21 | #### Q:小程序审核通过就自动发布吗? 22 | 23 | 24 | A:您好,目前小程序审核通过后不会自动发布,需要开发者在开发者管理平台的开发管理中进行发布。 -------------------------------------------------------------------------------- /program-docs/docs/introduction/rank.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 接入自然搜索结果 3 | header: introduction 4 | nav: book 5 | sidebar: rank 6 | --- 7 | 8 | ### 什么是小程序自然搜索? 9 | **对开发者**:智能小程序为开发者提供对接百度搜索生态的能力,为智能小程序导入搜索流量,旨在打造更加开放、互联互通的小程序生态。 10 | 11 | **对百度用户**:在百度搜索结果页中,当智能小程序某页面被正常检索到,其展现形式和普通网页相同,用户在百度App(10.10或以上版本)点击该条搜索结果,即可打开智能小程序。 12 | 13 | **自然搜索结果示例** 14 | ![Alt text](../../img/flow/rank/1555413108354.png) 15 | 16 | **搜索流量接入流程图** 17 | ![Alt text](https://b.bdstatic.com/searchbox/icms/searchbox/img/替换图片.png) 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/rank_data.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 数据提交如何选择 3 | header: introduction 4 | nav: book 5 | sidebar: rank_data 6 | --- 7 | 8 | 9 | 在小程序进入搜索的过程中,有两种资源提交方式:提交Sitemap文件和URL适配规则。两种提交方式不存在先后关系,只与提交的资源类型相关,都能够帮助资源快速进入搜索。 10 | 两者的区别如下: 11 | 1. Sitemap适用于无H5站或者H5站收录不好的开发者,可直接将小程序web提交Sitemap;有H5站的开发者,也可将新产生的小程序资源提交Sitemap,便于资源快速收录。 12 | 2. URL适配规则主要用于小程序资源与原有H5资源的搜索结果线上替换,便于小程序资源快速继承并获得原有H5的流量。值得注意的是,开发者提交URL适配规则后,搜索还将根据开发者的全部数据进行深度挖掘,帮助开发者更好的进行线上结果替换。 13 | 14 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/rank_h5.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 关联H5站点 3 | header: introduction 4 | nav: book 5 | sidebar: rank_h5 6 | --- 7 | 8 | 9 | 10 | 11 | 1. 为何要做H5站点关联? 12 | 13 | 若小程序希望替换搜索中已有H5站点资源,需要先进行H5站点关联,关联是为了校验开发者是否对该站点拥有操作权限(关联时需保证小程序和H5站点都关联在同一个主体下)。完成H5站点关联后,可已关联站点下流量较大的热门目录进行替换,提交适配规则并查看最终的替换结果。 14 | 15 | 2. 如何关联H5站点? 16 | 17 | 请在【搜索接入】>【自然搜索】>【H5资源替换】>【关联H5站】中关联H5站点。 18 | 19 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/1.png) 20 | 21 | 您可在小程序当前主体所关联的站点中进行选择(需为同一主域),如下图,勾选想要关联的站点,点击确定即可。 22 | 23 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/rank02.png) 24 | 25 | 如果当前主体已关联的列表中没有想要关联的站点,可以点击“添加新H5站点”,如下图,输入H5站点域名,下载校验文件,并放置在准备替换的 H5站点根目录下,并由当前小程序创建者的百度账号对应手机号进行验证,完成站点的新增和关联操作。 26 | 27 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/rank03.jpeg) 28 | 29 | 3. H5站点关联说明: 30 | 31 | - “H5 站点”是指开发者 H5 站点的域名,一经配置之后不可更改,请谨慎填写。 32 | 33 | - 如果开发者在一个H5站点下,存在多个子域名,且这些子域名都有对应的小程序页面,请在这里关联所有希望进行替换的 H5站点。 34 | 35 | - 在小程序内容没有对应H5站点的情况下,可以不关联 H5站点,直接通过小程序新资源提交,将小程序资源供提交给百度搜索即可。 36 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/rank_pageinfo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 设置页面基础信息 3 | header: introduction 4 | nav: book 5 | sidebar: rank_pageinfo 6 | --- 7 | 8 | 9 | **1.为什么要进行页面基础信息设置?** 10 | 智能小程序被搜索引擎正常收录的前提是Web化,Web化后小程序将以普通网页的形式被爬虫发现和抓取,因此页面基础信息的设置至关重要,能够提升小程序在搜索中的收录和展现结果。 11 | **2. 页面基础信息都包含什么?** 12 | 页面基础信息包括标题、摘要、Keywords等信息。这些页面基础信息内容,会影响到小程序在搜索结果页中的呈现方式,需要开发者进行符合搜索要求的设置。 13 | **(1)标题**:能够更加快速洞察页面内容,了解该结果与需求的相关性,通常是用来决定用户点击哪个结果的主要信息。所以,使用高质量的页面标题对小程序来说至关重要。 14 | **(2)摘要**:小程序首页、栏目页、分类页的摘要非常重要,因为有可能在搜索结果中直接被用户看到,影响到用户是否选择点击查看详情: 15 | **(3)Keywords**:小程序开发者给网站某个页面设定的词汇,以便让搜索引擎更好地理解页面价值。keywords代表了小程序主题内容,无论是首页、内页还是栏目页,关键词一般都代表的是当前页面或者栏目内容的主体。开发者根据实际情况设置即可。 16 | 开发者可点击并了解[页面基础信息配置方法](https://smartprogram.baidu.com/docs/develop/api/open/swan-setPageInfo/) 17 | > 由于每个页面基础信息和页面内容强相关,建议先通过 swan.request 请求开发者 server,由开发者 server 返回相关信息,再通过页面基础信息的 API 设置到页面中。 -------------------------------------------------------------------------------- /program-docs/docs/introduction/rank_single.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 单卡配置说明 3 | header: introduction 4 | nav: book 5 | sidebar: rank_single 6 | --- 7 | 8 | 9 | **1.智能小程序单卡介绍:** 10 | 11 | 智能小程序单卡是一种搜索特型卡片,具有品牌曝光强势、服务交互便捷等优点,能够帮助开发者获取更多用户关注和转化。 12 | 13 | 在品牌曝光上,用户搜索小程序相关名称时,会有4大特型样式展现,尤其高级卡和品牌服务卡,能占据手机屏幕一半以上,帮助开发者快速打动用户心智。 14 | 15 | 在服务交互上,开发者可自行配置展示模块,用户一搜即达,帮助用户快速找到、使用、分享相关服务能力。 16 | **2.智能小程序单卡样式:** 17 | 18 | ![图片](../../img/introduction/rank/rank_single1.png) 19 | 20 | **3.智能小程序单卡获取方式:** 21 | 22 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/单卡申请方式替换.png) 23 | 24 | **4.智能小程序单卡子链配置方式:** 25 | 如下图路径:登录百度智能小程序开发者后台 > 流量配置 > 小程序单卡 > 添加子链,按提示操作审核通过后即可上线展示给用户。 26 | 27 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/图1.png) 28 | 29 | **5.智能小程序单卡子链配置注意事项:** 30 | 31 | (1)单卡子链必须是该小程序的核心功能或子频道,不能是首页、单一商品页或单一内容页。 32 | (2)最多可提交15个小程序单卡的外露子链进行审核,至少需要有2条子链通过审核才可以展现。 33 | (3)审核通过的子链,开发者设置的排序靠前的优选子链会优先分发,当优选子链出现异常或用户对备选子链有强需求时,会自动分发备选子链。优选子链和备选子链会按照顺序依次分发,请开发者按期望排序调整。 34 | (4)path路径即页面路径,和配置文件app.json的pages字段涵义相同,提交的path要与子链文案相对应。 35 | (5)子链名称不超过10个字符(1个汉字为2个字符)、子链相关描述不超过16个字符(1个汉字为2个字符),子链名称和子链描述不能重复,子链文案需符合广告法。 36 | (6)path落地页功能完善,用户体验优质 37 | 38 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/rank_synchronism.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 小程序资源自动同步 3 | header: introduction 4 | nav: book 5 | sidebar: rank_synchronism 6 | --- 7 | 8 | 9 | 10 | ### 自动同步及索引页是什么? 11 | 12 | 自动同步指通过索引页的方式让开发者通过一次开发和提交,将小程序资源提交给百度。索引页即一个小程序页面,页面内容为站点所有资源链接列表,每个链接指向一个对应的资源小程序页。 13 | 14 | ### 自动同步与其他提交方式的区别是什么?适用于哪种资源? 15 | 16 | 自动同步提交相比于天级和周级收录,没有提交配额限制,索引时效性在一周至一个月。适用于将大量资源一次性提交给百度,搜索爬虫会由新到旧进行索引页内容的自动抓取。 17 | 如有部分资源需要尽快索引,请通过H5资源替换或天级/周级提交进行提交。 18 | 19 | ### 如何通过自动同步提交资源? 20 | 21 | 如下图,在搜索接入-小程序新资源提交-自动同步中提交开发好的索引页path路径即可。 22 | 23 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/202001161.png) 24 | 25 | 索引页开发方式见:[swan-sitemap 动态库](/develop/framework/sitemap/) -------------------------------------------------------------------------------- /program-docs/docs/introduction/register_addbodyinfo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 主体信息填写 3 | header: introduction 4 | nav: book 5 | sidebar: register_addbodyinfo 6 | --- 7 | 8 | 9 | 10 | 11 | * 填写企业信息 12 | 13 | ![图片](../../img/introduction/register/1.4.png) 14 | 15 | * 填写运营者信息: 16 | 17 | ![图片](../../img/introduction/register/1.5.png) 18 | 19 | * 填写完成后请点击提交,等待审核。 20 | > 每个帐号有 5 次提交审核机会,如 5 次审核均未通过,将不能再次提交。 21 | 22 | ![图片](../../img/introduction/register/p8.png) 23 | 24 | 25 | **审核通过**:将直接进入到小程序开发者后台创建小程序,[完善基本信息](https://smartprogram.baidu.com/docs/introduction/register_consummate/)也可以进行[真实性认证](https://smartprogram.baidu.com/docs/introduction/authenticity/)。 26 | **审核被拒绝**:请参考拒绝原因点击返回修改后重新提交主体认证信息,如有疑问请咨询客服。 27 | ![图片](../../img/introduction/register/1.6.png) 28 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/register_choosebodystyle.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 主体类型选择 3 | header: introduction 4 | nav: book 5 | sidebar: register_choosebodystyle 6 | --- 7 | 8 | 登录成功后,点击“下一步”进入主体信息提交环节,主体认证通过后就可以创建智能小程序。 9 | 10 | ![图片](../../img/introduction/register/1.1.png) 11 | 12 | 13 | 14 | 15 | 目前支持的主体类型:媒体、企业、政府、其他组织。主体类型、主体名称一旦提交后将无法更改。 16 | 17 | 18 | 19 | > 暂不支持个人主体类型开发者入驻。 20 | > 当前支持一个主体对应多个账号,但需要每个账号分别进行真实性认证。 21 | 22 | ![图片](../../img/introduction/register/1.2.png) -------------------------------------------------------------------------------- /program-docs/docs/introduction/register_consummate.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 完善基本信息 3 | header: introduction 4 | nav: book 5 | sidebar: register_consummate 6 | --- 7 | 8 | 主体认证审核通过后,您可先操作“创建智能小程序” 9 | 10 | ![图片](../../img/introduction/register/3.png) 11 | 12 | 13 | 14 | 填写智能小程序名称、简介、上传头像并选择服务范围。如果选择为特殊行业,还需根据界面提示提交相应资质材料。小程序名称请参考[平台运营规范](https://smartprogram.baidu.com/docs/operations/specification/)。 15 | 16 | 17 | ![图片](../../img/introduction/register/4.png) 18 | 19 | 若填写的智能小程序名称涉及品牌或名称侵权需提交相关资料进行审核。 20 | 21 | ![图片](../../img/introduction/register/5.png) 22 | ![图片](../../img/introduction/register/6.png) 23 | 24 | 25 | 26 | 27 | 填写智能小程序名称、简介、标签、上传头像并选择服务范围。如果选择为特殊行业,还需根据界面提示提交相应资质,审核预计需要2个工作日完成,在此期间不会影响您进行小程序开发。 28 | ![图片](../../img/introduction/register/p16.png) 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/type_send.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 消息推送 3 | header: introduction 4 | nav: book 5 | sidebar: type_send 6 | --- 7 | 8 | 9 | 10 | ### 简要原理 11 | 12 | - 通过配置消息推送及调用发送客服消息接口进行消息上下行联通。 13 | 14 | - 当用户给小程序客服发消息,百度的服务器会将消息的数据包(JSON或者XML格式)POST到开发者填写的URL。开发者收到请求后可以调用接口进行异步回复。 15 | 16 | - 适用于使用自研IM工具或第三方IM厂商支持消息转发情况,可以通过配置服务器URL,将用户消息转发至相应的服务器。 17 | 18 | ### 消息推送配置流程 19 | 20 | 使用超级管理员或管理员权限登录开发者后台,点击“设置-开发设置”,下滑至"消息推送"卡片,点击"启用"后,按照要求进行配置。 21 | 22 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/customer1.png) 23 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/customer2.png) 24 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/customer3.png) 25 | 26 | 完成配置后,点击"客服管理“,在”消息推送“卡片点击开启按钮。 27 | 28 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/customer4.png) 29 | 30 | ### **接口调用** 31 | 32 | 小程序[客服消息](https://smartprogram.baidu.com/docs/develop/serverapi/contact_api/)API文档。 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /program-docs/docs/introduction/type_thridtool.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 第三方客服工具 3 | header: introduction 4 | nav: book 5 | sidebar: type_thirdtool 6 | --- 7 | 8 | 第三方客服工具由百度推广平台接入,在开发者后台配置后,可以使用第三方客服工具进行客服消息回复。 9 | 10 | ### 配置流程: 11 | 12 | 1. 使用超级管理员权限登录开发者后台,点击“客服管理-第三方客服工具-去配置",即开始第三方客服工具配置流程。 13 | 14 | > 仅超级管理员有权限进行此项配置。 15 | 16 | 17 | 2. 在新跳转的页面选择想要绑定的第三方客服工具,点击"授权新账号"。 18 | 19 | 3. 输入第三方客服工具账号密码,完成授权,授权成功后,点击"确定"。 20 | 21 | 4. 在已经授权的客服工具账号里,选择一个与小程序进行绑定。 22 | 23 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/customer11.png) 24 | 25 | ![图片](../../img/introduction/contact/contact2.png) 26 | 27 | ![图片](https://b.bdstatic.com/searchbox/icms/searchbox/img/customer12.png) 28 | 29 | 30 | -------------------------------------------------------------------------------- /program-docs/docs/operations/thirdparty_law.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 第三方平台服务—开发者授权条款 3 | header: operations 4 | nav: book 5 | sidebar: thirdparty_law 6 | --- 7 | 8 | 9 | 尊敬的开发者您好, 10 | 11 | **您正在申请将您的智能小程序的运营业务授权给特定的智能小程序第三方服务平台(以下简称为“第三方平台”)。为保障您和您关注用户的合法权益,请您仔细阅读并遵守如下条款:** 12 | 13 | 1. “智能小程序的运营业务”是指依据百度智能小程序有关规则,申请、开发、发布和运营智能小程序的全部业务,包括但不限于向百度公司提交开发智能小程序所需要的注册资料、开发和发布小程序及其内容、添加或减少小程序功能、决定或调整小程序的经营范围和规则、开展营销活动、收付款安排以及前述行为产生的有关数据存储或流转等。以下亦简称为“运营业务”。 14 | 15 | 2. 您将授权第三方平台代为进行上述运营业务,第三方平台基于本授权所进行的任何行为,均将视为您自己的行为,请您随时关注您的智能小程序的变化。如您需要,您可以随时通过本平台取消授权,以终止第三方平台继续行使相应的开发或运营权利; 16 | 3. 您应及时以明确、有效的方式告知使用您的智能小程序的用户,被授权功能使用了智能小程序第三方平台的相关服务,其用户数据可能会被第三方平台获取并使用;同时,与您本次授权业务相关的用户数据、运营数据、交易数据等信息均有可能同步至第三方平台,请您确保您的保密数据均已采取了有效的措施以防止泄漏,百度公司对您向第三方平台共享、传输的数据安全不承担审查和保密责任。 17 | 4. 第三方平台由其运营主体自主经营并独立承担全部责任。百度公司作为平台服务提供者,没有义务和能力参与第三方平台的研发、运营或管理,亦不会对第三方平台的服务内容、授权范围进行任何的修改、编辑或整理等。 18 | 5. 如您的智能小程序存在其他联合开发者或利益相关方,请您务必以有效形式与该等权利人取得有效授权和告知。 19 | 6. 您理解并同意,因第三方平台及其服务产生的任何纠纷、责任等,以及您或第三方平台违反相关法律法规或与百度的协议约定所引发的任何后果,百度公司不承担任何责任。在您使用第三方平台及其服务的过程中,如因您违反相关法律法规、违约或违反百度公司的业务规则造成百度公司及其关联公司或他人的损失,您应承担相应的赔偿责任; 20 | -------------------------------------------------------------------------------- /program-docs/docs/operations/thirdparty_low.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 第三方平台服务—开发者授权条款 3 | header: operations 4 | nav: book 5 | sidebar: thirdparty_low 6 | --- 7 | 8 | 9 | 尊敬的开发者您好, 10 | 11 | **您正在申请将您的智能小程序的运营业务授权给特定的智能小程序第三方服务平台(以下简称为“第三方平台”)。为保障您和您关注用户的合法权益,请您仔细阅读并遵守如下条款:** 12 | 13 | 1. “智能小程序的运营业务”是指依据百度智能小程序有关规则,申请、开发、发布和运营智能小程序的全部业务,包括但不限于向百度公司提交开发智能小程序所需要的注册资料、开发和发布小程序及其内容、添加或减少小程序功能、决定或调整小程序的经营范围和规则、开展营销活动、收付款安排以及前述行为产生的有关数据存储或流转等。以下亦简称为“运营业务”。 14 | 15 | 2. 您将授权第三方平台代为进行上述运营业务,第三方平台基于本授权所进行的任何行为,均将视为您自己的行为,请您随时关注您的智能小程序的变化。如您需要,您可以随时通过本平台取消授权,以终止第三方平台继续行使相应的开发或运营权利; 16 | 3. 您应及时以明确、有效的方式告知使用您的智能小程序的用户,被授权功能使用了智能小程序第三方平台的相关服务,其用户数据可能会被第三方平台获取并使用;同时,与您本次授权业务相关的用户数据、运营数据、交易数据等信息均有可能同步至第三方平台,请您确保您的保密数据均已采取了有效的措施以防止泄漏,百度公司对您向第三方平台共享、传输的数据安全不承担审查和保密责任。 17 | 4. 第三方平台由其运营主体自主经营并独立承担全部责任。百度公司作为平台服务提供者,没有义务和能力参与第三方平台的研发、运营或管理,亦不会对第三方平台的服务内容、授权范围进行任何的修改、编辑或整理等。 18 | 5. 如您的智能小程序存在其他联合开发者或利益相关方,请您务必以有效形式与该等权利人取得有效授权和告知。 19 | 6. 您理解并同意,因第三方平台及其服务产生的任何纠纷、责任等,以及您或第三方平台违反相关法律法规或与百度的协议约定所引发的任何后果,百度公司不承担任何责任。在您使用第三方平台及其服务的过程中,如因您违反相关法律法规、违约或违反百度公司的业务规则造成百度公司及其关联公司或他人的损失,您应承担相应的赔偿责任; 20 | -------------------------------------------------------------------------------- /source/img/tp/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/source/img/tp/1.png -------------------------------------------------------------------------------- /source/img/tp/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/source/img/tp/2.png -------------------------------------------------------------------------------- /source/img/tp/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/source/img/tp/3.png -------------------------------------------------------------------------------- /source/img/tp/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/source/img/tp/4.png -------------------------------------------------------------------------------- /source/img/tp/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/source/img/tp/5.png -------------------------------------------------------------------------------- /source/img/tp/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/source/img/tp/6.png -------------------------------------------------------------------------------- /source/img/tp/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/source/img/tp/7.png -------------------------------------------------------------------------------- /source/img/tp/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/source/img/tp/8.png -------------------------------------------------------------------------------- /source/img/tp/card1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/source/img/tp/card1.png -------------------------------------------------------------------------------- /source/img/tp/card2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swan-team/swan-docs/87accb3c0e79036fcca83a0768b65c96c2132c49/source/img/tp/card2.png --------------------------------------------------------------------------------