wx.getLocation 如果用戶曾點擊過一次 “確認授權” ,
那么再次調用該接口時將不會出現彈出框(可以直接拿到經緯度)
關於用戶體驗:
在 onLoad 中判斷:
如果用戶之前“沒有觸發過“授權地理位置事件,則發起請求授權-----> 如果同意授權,直接拿到經緯度處理邏輯;
如果不同意,則彈出自定義模態框進行提示,如果用戶同意就打開setting頁面;如果還不同意,就執行默認事件(用戶不授權的邏輯)
wx.getSetting({
success: function(res){
if (typeof (res.authSetting['scope.userLocation']) == "undefined") { // 從未觸發過授權的情況
wx.getLocation({ // 用戶同意授權地理位置
success: function (res) {
that.setData({
latitude: res.latitude,
longitude: res.longitude
});
that.getShopInfo_nearby(res.latitude, res.longitude);
},
fail: function (err) { // 用戶拒絕授權地理位置
wx.showModal({//彈出模態框,詢問
title: '是否授權當前位置',
content: '如需正常使用本程序,請按確定並在授權管理中選中“地理位置”,然后點按返回即可正常使用。',
cancelColor: '#f00',
success: function (res) {
if (res.confirm) {//同意授權
wx.openSetting({})
} else if (res.cancel) {//不同意授權,進行普通查詢
mac = '08:D8:33:7C:5E:5';
that.getShopInfo(mac);
}
}
})
}
})
}
}
})
在 onShow 中:先檢查用戶授權狀態,如果“曾經觸發過“地理位置授權事件,但沒有確認授權,就彈出自定義模態框進行詢問(同意->setting頁面; 不同意-> 走不同意的邏輯);
如果授權過了,則直接使用wx.getLocation 獲取經緯度拿到經緯度處理邏輯(此時不會再觸發彈框)
wx.getSetting({//檢測用戶權限
success: (res) => {
if (res.authSetting['scope.userLocation'] == false) { // 地理位置授權 觸發過但沒有授權
wx.showModal({//彈出模態框,詢問
title: '是否授權當前位置',
content: '如需正常使用紫燕到家設備,請按確定並在授權管理中選中“地理位置”,然后點按返回即可正常使用。',
cancelColor: '#f00',
success: function (res) {
if (res.confirm) {//同意授權
wx.openSetting({})
} else if (res.cancel) {//不同意授權,進行普通查詢
mac = '08:D8:33:7C:5E:5';
that.getShopInfo(mac);
}
}
})
} else if (res.authSetting['scope.userLocation'] == true){ // 地理位置授權過了
wx.getLocation({
success: function(res) {
that.getShopInfo_nearby(res.latitude, res.longitude);
},
})
}
}
})
1