解決:用戶拒絕授權小程序使用通訊地址API的問題


解決:用戶拒絕授權小程序使用通訊地址API的問題

通訊地址等這些開發接口,都是由微信自身提供的能力。小程序中要使用這些開發接口, 必須經過用戶授權后,才能使用。

小程序中正確使用通訊地址這個開發接口的流程:

/**
 * 思路:
 * 1 調用 wx.getSetting() 獲取用戶的授權狀態
 *   狀態有三種:res.authSetting['scope.address']
 *   1.1 undefined 第一次點擊按鈕,獲取權限,直接調用 wx.chooseAddress() 即可
 *   1.2 true 第二次點擊按鈕,說明用戶已經授權過,直接調用 wx.chooseAddress() 即可
 *   1.3 false 第二次點擊按鈕,說明用戶上一次拒絕了授權,此時,應該調用 wx.showModal() 彈出對話框
 *       告訴用戶已經拒絕過授權了,應該點擊確定再次同意授權后,才能選擇收獲地址
 *       1.3.1 在確定中,調用 wx.openSetting() 打開設置界面
 *       1.3.2 點擊 <(返回)按鈕后,根據返回值來確定用戶是否開啟授權
 *       1.3.3 開啟了,就說明用戶同意授權,直接調用 wx.chooseAddress() 即可
 *       1.3.4 沒有開啟,直接返回原來的頁面即可
 */

wxml為:

<!-- 收獲地址完成整個(授權功能)-->
<button bindtap="getAddress">獲取收貨地址</button>

js文件為:

Page({
   // 1 獲取收獲地址
  getAddress () {
    wx.getSetting({
      success(res) {
        // 1 如果 res.authSetting 對象為空,說明小程序還沒有向用戶請求過權限
        if (res.authSetting['scope.address'] === undefined) {
          console.log('用戶第一點擊按鈕,小程序還沒有請求過通訊地址')
          // 此時,應該向用戶請求 通訊地址 權限
          wx.chooseAddress({
            success(res) {
              // 成功授權:
              console.log('success', res)
            },
            fail(err) {
              // 用戶拒絕授權
              // console.log('fail:', err)
            }
          })
        } else if (res.authSetting['scope.address'] === true) {
          // 說明用戶已經授權過了,此時,只需要再次打開收獲地址界面,讓用戶選擇收獲地址即可
          wx.chooseAddress({
            success(res) {
              console.log('success', res)
            },
            fail(err) {
              // console.log('fail:', err)
            }
          })
        } else if (res.authSetting['scope.address'] === false) {
          // 說明小程序已經向用戶請求過授權了,但是,用戶拒絕了
          // 當用戶第二次點擊按鈕的時候,就會執行這個邏輯
          wx.showModal({
            title: '溫馨提示',
            content: '您需要授權后,才能使用收獲地址功能,是否重新授權',
            confirmColor: '#ff2d4a',
            success(res) {
              if (res.confirm) {
                // 如果用戶點了確定,就打開 設置 界面
                wx.openSetting({
                  success(res) {
                    // 不管是否開啟授權,都執行success
                    // 應該根據 res['scope.address'] 是 true 或 false 來確定用戶是否同意授權
                    console.log('設置success:', res.authSetting)
                    if (res.authSetting['scope.address'] === true) {
                      // 直接打開收獲地址選擇界面,讓用戶選擇收獲地址
                      wx.chooseAddress({
                        success(res) {
                          console.log('success', res)
                        },
                        fail(err) {
                          // console.log('fail:', err)
                        }
                      })
                    }
                  },
                  fail(err) {
                    console.log('設置fail:', err)
                  }
                })
                console.log('用戶點擊確定')
              } else if (res.cancel) {
                // 用戶點擊取消,不需要做任何處理
                // console.log('用戶點擊取消')
              }
            }
          })
        }

        console.log('授權狀態:', res)
      }
    })
  }
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM