小程序受權:微信小程序受權文檔html
對接科大訊飛:科大訊飛語音識別接口文檔java
部分接口須要通過用戶受權贊成才能調用。咱們把這些接口按使用範圍分紅多個
scope
,用戶選擇對scope
來進行受權,當受權給一個scope
以後,其對應的全部接口均可以直接使用。json此類接口調用時:小程序
- 若是用戶未接受或拒絕過此權限,會彈窗詢問用戶,用戶點擊贊成後方可調用接口;
- 若是用戶已受權,能夠直接調用接口;
- 若是用戶已拒絕受權,則不會出現彈窗,而是直接進入接口 fail 回調。請開發者兼容用戶拒絕受權的場景。
scope | 對應接口 | 描述 |
---|---|---|
scope.userInfo | wx.getUserInfo | 用戶信息 |
scope.userLocation | wx.getLocation, wx.chooseLocation | 地理位置 |
scope.address | wx.chooseAddress | 通信地址 |
scope.invoiceTitle | wx.chooseInvoiceTitle | 發票擡頭 |
scope.invoice | wx.chooseInvoice | 獲取發票 |
scope.werun | wx.getWeRunData | 微信運動步數 |
scope.record | wx.startRecord | 錄音功能 |
scope.writePhotosAlbum | wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum | 保存到相冊 |
scope.camera | camera 組件 | 攝像頭 |
提早向用戶發起受權請求。調用後會馬上彈窗詢問用戶是否贊成受權小程序使用某項功能或獲取用戶的某些數據,但不會實際調用對應接口。若是用戶以前已經贊成受權,則不會出現彈窗,直接返回成功。更多用法詳見 用戶受權。後端
開發者可使用 wx.authorize 在調用需受權 API 以前,提早向用戶發起受權請求。微信小程序
使用wx.authorize({scope: "scope.userInfo"})
,不會彈出受權窗口,請使用 <button open-type="getUserInfo">受權按鈕</button>;
scope.userLocation
時必須配置地理位置用途說明,以下:// 在app.json文件中配置以下代碼,才能使用位置受權
{
"permission": {
"scope.userLocation": {
"desc": "你的位置信息將用於小程序位置接口的效果展現"
}
}
}複製代碼
獲取用戶的當前設置。返回值中只會出現小程序已經向用戶請求過的權限。api
wx.getSetting({
success (res) {
console.log(res.authSetting)
}
})複製代碼
wx.getSetting({
success (res) {
if (res.authSetting['scope.userInfo']) {
wx.getUserInfo({
success (res) {
console.log(res)
}
})
}
}
})複製代碼
調起客戶端小程序設置界面,返回用戶設置的操做結果。設置界面只會出現小程序已經向用戶請求過的權限。bash
在原來的
wx.openSetting
接口中,咱們容許開發者直接調用此接口,但目前咱們發現有很多開發者濫用此接口,使用戶在無任何操做時,不斷地強行跳轉至設置頁,致使用戶沒法正常使用甚至沒法退出小程序。爲保證用戶得到更順暢的小程序使用體驗,避免此類濫用狀況,咱們對該接口進行了調整。app調整後「打開小程序設置頁」將支持如下兩種實現方式:
- 經過<button open-type="openSetting" bindopensetting="callback">打開設置頁</button>打開設置頁;
- 由點擊行爲觸發
wx.openSetting
接口的調用,說明一下:使用wx.showModal彈窗也能觸發打開受權頁
全部說明均寫在代碼註釋內
<!-- 簡化後的代碼 -->
<template>
<div class="release-order">
<!-- 這是錄音icon -->
<image :src="iconRecord" @touchstart="startRecord" @touchend="endRecord" />
</div>
</template>
<script>
import tool from '@/utils/tool' // 工具方法
const recorder = wx.getRecorderManager() // 初始化錄音實例
export default {
data () {
return {
iconRecord: require('@static/icon/icon_voice.png')
}
},
onLoad () {
// 進入發佈合單頁開始獲取用戶的當前設置,這裏主要看用戶是否操做過錄音受權
wx.getSetting({
success (res) {
// res.authSetting['scope.record']爲false時有兩種狀況:
// 一、用戶以前拒絕過,這個時候wx.authorize將再也不進入success,而是直接進入fail;
// 二、用戶第一次進入發佈合單頁;
if (!res.authSetting['scope.record']) {
wx.authorize({
scope: 'scope.record',
success () {
// 用戶已經贊成小程序使用錄音功能
},
fail () {
// 用戶以前拒絕過該受權
}
})
}
}
})
},
methods: {
startRecord () {
const that = this
// 當用戶點擊錄音icon時,獲取用戶是否開啓了錄音權限
wx.getSetting({
success (res) {
if (!res.authSetting['scope.record']) {
// 未開啓
wx.authorize({
scope: 'scope.record',
fail () {
// 用戶以前拒絕過該受權
// 此時使用wx.showModal引導用戶點擊前往受權按鈕進入設置頁
that.failSetting()
}
})
} else {
// 已開啓
tool.showRecordLoading('語音輸入中...')
recorder.start({
duration: 15000, // 錄音最長時間爲15秒
format: 'mp3' // 音頻格式爲mp3
})
}
}
})
},
failSetting () {
wx.showModal({
title: '提示',
content: '您未受權錄音,功能將沒法使用',
showCancel: false,
confirmText: '前往受權',
confirmColor: '#5bb53c',
success: function (res) {
wx.openSetting({
success (res) {
// console.log(res)
}
})
}
})
},
endRecord () {
const that = this
// 也要獲取用戶是否開啓了錄音權限,防止未開啓受權手指移開錄音icon也會執行中止錄音的回調
wx.getSetting({
success (res) {
if (res.authSetting['scope.record']) {
wx.hideLoading()
tool.showRecordLoading('語音識別中...')
recorder.stop()
// 監聽錄音中止回調
recorder.onStop(res => {
const { tempFilePath } = res
// 使用微信上傳文件的api
wx.uploadFile({
url: '接口地址', // 接口地址
header: {
// 請求頭相關設置
'Content-Type': 'application/x-www-form-urlencoded'
},
name: 'voice', // 上傳文件名
filePath: tempFilePath, // 臨時文件
success (res) {
// 成功則把從後臺拿到的文字賦值到輸入框
wx.hideLoading() // 隱藏菊花加載
const temp = JSON.parse(res.data)
if (temp.code === 1) {
// 賦值相關操做在這裏進行
}
},
fail () {
// 失敗則提示用戶語音識別失敗
wx.hideLoading() // 隱藏菊花加載
tool.showToast('語音識別失敗')
}
})
})
} else {
// 未受權則中止菊花加載
wx.hideLoading()
}
}
})
}
}
}
</script>
<style lang='stylus' scoped>
</style>
複製代碼
最開始我一直在研究可否不借助後臺直接實現語音轉文字,搜了不少方法,對比後仍是以爲後臺實現簡單不少,參考科大訊飛語音轉寫java實現的demo