小程式wx.canIUse和wx.getSystemInfo踏的坑

知曉程式設計師發表於2017-09-27

今天在做新功能時,用到小程式的獲取使用者手機號API,如下:

getPhoneNumber: function(e) { 
    console.log(e.detail.errMsg) 
    console.log(e.detail.iv) 
    console.log(e.detail.encryptedData) 
}複製程式碼


小程式wx.canIUse和wx.getSystemInfo踏的坑

拿到encryptedData和iv後,就可以在服務端進行解密,解密過程略過~


問題來了,官方給出說明是open-type=getPhoneNumber屬性是1.2.0版本開始支援的,所以,1.2.0之前要自己做相容處理。


然後就用了wx.canIUse進行判斷,折騰了一會兒,發現不對,1.5.2基礎庫上返回也是false,如下:

小程式wx.canIUse和wx.getSystemInfo踏的坑


官方給出說法,建議使用wx.getSystemInfo裡面的SDKVersion進行判斷。


wx.getSystemInfo的返回值:

 wx.getSystemInfo({
  success: function(res) {
    console.log(res.model)
    console.log(res.pixelRatio)
    console.log(res.windowWidth)
    console.log(res.windowHeight)
    console.log(res.language)
    console.log(res.version)
    console.log(res.platform)
    console.log(res.SDKVersion)
  }
})複製程式碼

SDKVersion中1.1.0中才出現,所以要做個簡單處理,把version轉成int,然後進行判斷:

function getSDKVersion(SDKVersion){
  if (SDKVersion){
    SDKVersion = parseInt(SDKVersion.replace(/\./g, ''));
  }
  else SDKVersion = 0;
  return SDKVersion;
}複製程式碼


判斷sdk版本:

var self = this;
wx.getSystemInfo({
  success: function(res){
    var SDKVersion = res.SDKVersion;
    SDKVersion = util.getSDKVersion(SDKVersion);
    console.log(res);
    console.log(SDKVersion);
    if(SDKVersion < 120){   // 1.2.0以下版本不支援獲取手機號功能
      self.setData({
        noSupportPhone: true
      })
    }
  }
});複製程式碼

後面就是你自己去處理了~


歡迎關注我:

小程式wx.canIUse和wx.getSystemInfo踏的坑




相關文章