由於小程序為了客戶體驗,在用戶首次拒絕授權后,彈窗短時間內將不會再出現。然而此時可能有些需要經緯度的重要數據就無法調取,因此需要引導客戶去再次授權。目前發現能夠吊起授權彈框的有wx.getLocation、 wx.authorize但是用戶拒絕后短期內調用這些api也不會出現授權彈框了。
現如今opensetting也已經廢棄
<button hidden='{{!hiddenLoading}}' open-type="openSetting" bindopensetting='handler' class='getLocation'>請先授權</button>
這段代碼可以使用戶進入授權界面再度授權,而上面的按鈕則可以通過用戶是否授權來進行顯示或者隱藏(hiddenLoading)
此時我們只需要在handle里再次調用該函數即可
handler: function() {
this.getLoaction();
}
getLoaction() {
const that = this;
wx.getLocation({
type: 'gcj02',
success: function(res) { /*console.log('success')*/
latitude = res.latitude;
longitude = res.longitude;
that.categoryList(); /*這是我通過經緯度調取數據的函數*/
that.setData({
hiddenLoading: false
});
},
fail: function() { /* console.log('fail');*/
wx.hideLoading();
that.setData({
hiddenLoading: true
})
}
})
}
因為本人小程序這方面所需要面對的情況也不多,所以並沒有寫太多的判斷。不管授權是否,handler函數都會執行!會調動getLocation。倘若此時已經授權,便可以獲取到經緯度調取數據,否則按鈕仍然存在。
此外,一些手機並不支持二次授權的功能,你戳爛屏幕都沒反應。只能判斷他是否支持,
wx.canIUse('button.open-type.openSetting')
如果不支持,則顯示另一段代碼,提示客戶手動去授權,點擊三個點--關於XX小程序--三個點--設置;並附帶一個按鈕(判斷授權,若授權就拉取數據,否則就return)
還有些手機即時打開也不行,你就看看那個一根筋的人是不是手機設置里就把GPS關了,我老板就是還天天嚷。。。。。嗯mmm