mpapi(miniProgram API),小程式API 相容插件,一次編寫,多端運行。
⏰ 更新日期: 2019-05-31,小程式功能一直在更新,新版本可能有所差異,請留意。
此專案解決的問題:尋找不同小程式API 之間的差異,盡可能透過一套API 相容多個小程式使用。
api.showToast
可以直接傳string
、 api.setStorageSync
無需呼叫try catch 等
request
、 downloadFile
,詳情api.isWechat
、 api.isAlipay
、 api.isSwan
、 api.isTt
npm install mpapi --save
非npm 安裝方式,直接引入lib
目錄下的mpapi.js
到專案即可
const api = require ( 'mpapi' )
api . alert ( { ... } ) . then ( ( res ) => { } )
api . confirm ( { ... } ) . then ( ( res ) => { } )
api . getLocation ( ) . then ( ( res ) => { } )
. . .
request
、 downloadFile
、 uploadFile
等所有小程式都可以使用的API
互動
alert
confirm
showToast
showLoading
showActionSheet
導覽列
setNavigationBarTitle
setNavigationBarColor
文件
saveFile
getFileInfo
getSavedFileInfo
getSavedFileList
removeSavedFile
圖片
chooseImage
previewImage
compressImage
saveImageToPhotosAlbum
請求
request
uploadFile
downloadFile
資料快取
setStorageSync
getStorageSync
clearStorageSync
getStorageInfoSync
removeStorageSync
系統設備
getSystemInfoSync
setScreenBrightness
getScreenBrightness
makePhoneCall
scanCode
setClipboardData
getClipboardData
只在特定小程式下才會支持
微信小程式、支付寶小程式、百度智能小程式、位元組跳動小程式,有圖標表示只支援對應小程序,沒有圖標表示都支援。
互動
hideToast
hideLoading
showModal
prompt
快取
getStorage
setStorage
removeStorage
getStorageInfo
路由
reLaunch
switchTab
redirectTo
navigateTo
navigateBack
位置
getLocation
openLocation
chooseLocation
文件圖片
saveImage
getImageInfo
chooseVideo
chooseMessageFile
saveVideoToPhotosAlbum
openDocument
音訊
stopVoice
playVoice
getAvailableAudioSources
stopBackgroundAudio
playBackgroundAudio
seekBackgroundAudio
pauseBackgroundAudio
getBackgroundAudioPlayerState
setInnerAudioOption
startRecord
stopRecord
stopRecord
導覽列
getTitleColor
setNavigationBar
showNavigationBarLoading
hideNavigationBarLoading
背景
setBackgroundTextStyle
setBackgroundColor
showTabBar
hideTabBar
setTabBarItem
setTabBarStyle
showTabBarRedDot
hideTabBarRedDot
setTabBarBadge
removeTabBarBadge
下拉重新整理
startPullDownRefresh
stopPullDownRefresh
捲動
pageScrollTo
sendSocketMessage
connectSocket
closeSocket
startLocalServiceDiscovery
stopLocalServiceDiscovery
置頂
setTopBarText
畫布
canvasGetImageData
canvasPutImageData
canvasToTempFilePath
分享轉發
getShareInfo
updateShareMenu
showShareMenu
hideShareMenu
showFavoriteGuide
openShare
登入、授權、使用者資訊
login
checkSession
getUserInfo
getAuthCode
getAuthUserInfo
getPhoneNumber
authorize
支付
tradePay
requestPayment
requestPolymerPayment
開放介面
getSetting
openSetting
reportAnalytics
chooseInvoiceTitle
navigateToMiniProgram
navigateBackMiniProgram
開放介面- 微信小程式
addCard
openCard
chooseInvoice
startSoterAuthentication
checkIsSoterEnrolledInDevice
checkIsSupportSoterAuthentication
getWeRunData
開放接口- 支付寶小程序
startZMVerify
textRiskIdentification
addCardAuth
getRunScene
chooseCity
datePicker
optionsSelect
multiLevelSelect
rsa
開放介面- 百度智能小程式
getSwanId
navigateToSmartProgram
navigateBackSmartProgram
setPageInfo
setMetaDescription
setMetaKeywords
setDocumentTitle
loadSubPackage
聯絡人
chooseAddress
chooseContact
choosePhoneContact
chooseAlipayContact
addPhoneContact
字體載入
loadFontFace
系統資訊
getSystemInfo
getBatteryInfo
getNetworkType
setKeepScreenOn
startAccelerometer
stopAccelerometer
startCompass
stopCompass
startDeviceMotionListening
stopDeviceMotionListening
startGyroscope
stopGyroscope
vibrate
vibrateShort
vibrateLong
watchShake
setEnableDebug
getServerTime
scan
藍牙無線
getBeacons
startBeaconDiscovery
stopBeaconDiscovery
startWifi
stopWifi
setWifiList
getWifiList
connectWifi
getConnectedWifi
getBLEDeviceServices
getBLEDeviceCharacteristics
createBLEConnection
closeBLEConnection
writeBLECharacteristicValue
readBLECharacteristicValue
notifyBLECharacteristicValueChange
startBluetoothDevicesDiscovery
stopBluetoothDevicesDiscovery
openBluetoothAdapter
getConnectedBluetoothDevices
getBluetoothDevices
getBluetoothAdapterState
closeBluetoothAdapter
stopHCE
startHCE
getHCEState
sendHCEMessage
第三方平台
getExtConfig
深層的API,注意:方法加了$
前綴
api.ap
api.ap.$faceVerify
api.ap.$navigateToAlipayPage
...
api.ai
api.ai.$ocrIdCard
api.ai.$ocrBankCard
...
某些新實例的物件上面的API
createMapContext
createVideoContext
createAudioContext
createCameraContext
createInnerAudioContext
createLivePusherContext
createLivePlayerContext
getBackgroundAudioManager
getRecorderManager
createSelectorQuery
getFileSystemManager
createARCameraContext
例如:注意:方法加了$
前綴
let ctx = api . createMapContext ( 'maper' )
ctx . $getCenterLocation ( ) . then ( ( res ) => {
console . log ( 'createMapContext:getCenterLocation' )
console . log ( res )
} )
1.傳參不一致
例如: showLoading
方法,載入的顯示文案,微信和百度裡面是title
參數,支付寶裡面是content
參數,如下
// 微信
wx . showLoading ( {
title : '加载中'
} )
// 百度
swan . showLoading ( {
title : '加载中'
} )
// 支付宝
my . showLoading ( {
content : '加载中'
} )
// 使用 mpapi 之后,多端兼容
api . showLoading ( '加载中' )
api . showLoading ( {
title : '提示内容'
} )
2、返回參不一致
例如: showActionSheet
方法,執行完之後取得選擇的索引,微信和百度裡面是res.tapIndex
,支付寶裡面是res.index
,如下
// 微信
wx . showActionSheet ( {
itemList : [ '台球' , '羽毛球' , '篮球' ] ,
success : ( res ) => {
// res.tapIndex
}
} )
// 支付宝
my . showActionSheet ( {
items : [ '台球' , '羽毛球' , '篮球' ] ,
success : ( res ) => {
// res.index
}
} )
// 使用 mpapi,多端兼容
api . showActionSheet ( {
itemList : [ '台球' , '羽毛球' , '篮球' ] ,
success : ( res ) => {
// res.tapIndex
}
} )
3、不支持,但可相容
例如:支付寶裡面有my.alert
,而微信和百度裡面沒有此方法,但是可以透過微信的wx.showModal
或百度的swan.showModal
封裝一個alert
方法,如下
api . alert ( '提示内容' )
api . alert ( {
content : '提示内容'
} )
// 请求数据,兼容多端
api . request ( { ... } ) . then ( ( res ) => { } )
4.不支持,無法相容
有的API 只在特定端裡面有效,無法相容處理,如下
// 只在支付宝里面有效,微信和百度小程序里面会报错
api . startZMVerify ( { ... } )
// 建议这样处理
if ( api . isAlipay ) {
api . startZMVerify ( { ... } )
}
// 只在微信里面有效,支付宝或百度小程序里面会报错
api . setTopBarText ( { ... } )
// 建议这样处理
if ( api . isWechat ) {
api . setTopBarText ( { ... } )
}
// 百度智能小程序的特殊 API 一样的道理
if ( api . isSwan ) {
api . getSwanId ( ) . then ( ( res ) => { } )
}
1.支持Promise
風格
所有小程式的API 只要包含success
回調,都已經用Promise
封裝過,可以直接使用,兩種寫法都支持,例如
// 使用回调
api . showActionSheet ( {
itemList : [ '台球' , '羽毛球' , '篮球' ] ,
success : ( res ) => {
// res.tapIndex
}
} )
// 或者
api . showActionSheet ( {
itemList : [ '台球' , '羽毛球' , '篮球' ]
} ) . then ( ( res ) => {
// res.tapIndex
} )
// 其它
api . setStorage ( { ... } ) . then ( ( res ) => { } )
api . chooseImage ( { ... } ) . then ( ( res ) => { } )
. . .
2、相容方法裡的傳參和返回參,以微信小程式呼叫為準。其它端不相容的參數不處理(某些參數也無法處理,特定小程式不支援)開發者需要留意,例如
api . chooseImage ( {
count : 1 ,
sizeType : [ 'original' , 'compressed' ] , // 只在微信可用
sourceType : [ 'album' , 'camera' ] ,
} ) . then ( ( res ) => {
// res.tempFilePaths 在微信和支付宝都可用
// res.tempFiles 只在微信可用
} )
某些API 既要支援Promise,又要呼叫它的事件,那麼可以採用以下方式:
以前:
const downloadTask = wx . downloadFile ( {
url : 'https://example.com/audio/123' , // 仅为示例,并非真实的资源
success ( res ) {
console . log ( res )
}
} )
downloadTask . onProgressUpdate ( ( res ) => {
console . log ( res )
} )
downloadTask . abort ( ) // 取消下载任务
使用mpapi
之後:
const api = require ( 'mpapi' )
const downloadTask = api . downloadFile ( {
url : 'https://example.com/audio/123' // 仅为示例,并非真实的资源
} ) . then ( ( res ) => {
console . log ( 'success' )
console . log ( res )
} )
downloadTask . $event ( 'onProgressUpdate' , ( res ) => {
console . log ( res )
} )
// downloadTask.$event('abort') // 取消下载任务
其它API 可以類似處理,例如: request
、 uploadFile
、 connectSocket
如果您在使用過程中發現Bug,或有好的建議,歡迎回報問題。
更新日誌