全棧工程師之路-中級篇之小程序開發-第三章第五節獲取用戶權限、下載文件、保存到相冊、用戶拒絕授權重新授權

繼上一節課,我們已經簡要說明了將圖片保存到相冊的流程和方法。
這節課我們圍繞這個問題,展開講解獲取用戶權限,將網絡圖片下載到臨時文件,最後保存到相冊。

獲取用戶權限 wx.authorize

這裏寫圖片描述
使用方法如下:

// 可以通過 wx.getSetting 先查詢一下用戶是否授權了
wx.getSetting({
    success(res) {
      if (!res.authSetting[scope]) {
        wx.authorize({
          scope: scope,
          success() {
              console.log('授權成功')
          }
})}}})

這裏的scope有5種參數,使用中間那行接口的時候,就要獲取相應的scope權限。
這裏寫圖片描述
這裏我們拿scope.writePhotosAlbum爲例。
這裏寫圖片描述
我們在小程序初始化的時候獲取權限,也可以在要保存圖片的時候獲取權限。
保存運行效果如下:
這裏寫圖片描述
這裏還有一個調試小技巧。

調試技巧

這裏寫圖片描述
清楚授權緩存,就可以不斷調試授權。

下載文件wx.downloadFile

我們在點擊圖片的響應事件裏面調用下載文件的方法

showImg:function(event){
    var imgSrc = event.currentTarget.dataset.imgSrc;
    //下載文件
    wx.downloadFile({
      url:imgSrc,
      success:function (res){
        console.log(res);
      }
    })
},

保存運行,點擊圖片。可以在console中查看日誌。
這裏寫圖片描述
這裏的tempFilePath就是下載到本地的臨時文件。
可以進一步的調用wx.saveFile將臨時文件保存爲永久文件。
注意這個文件大小限制了10M。

保存到相冊wx.saveImageToPhotosAlbum

接下來我們將本地的臨時文件,保存到相冊裏。

wx.saveImageToPhotosAlbum({
      filePath: res.tempFilePath,
      success:function(data){
        console.log(data);
      },
      fail:function(err){
        console.log(err);
      }
})

這裏的res就是我們調用下載文件的回調數據,實際代碼結構如下:
這裏寫圖片描述
保存運行,點擊圖片。
這裏寫圖片描述
在工具上調試,會彈出保存窗口。
可以點擊確定、取消。
到這裏我們的功能就都完成了。
接下來我們來看幾種錯誤情況。
1、最開始用戶點擊了拒絕授權。(使用上面的調試技巧,清空一下授權記錄)
錯誤碼:errMsg:”saveImageToPhotosAlbum:fail auth deny”
這裏寫圖片描述
2、用戶點擊了取消。
錯誤碼:errMsg:”saveImageToPhotosAlbum:fail cancel”
這裏寫圖片描述
3、如果一開始用戶點擊了拒絕授權,那就一直是拒絕的。
我們在保存錯誤回調中加入一下測試代碼
這裏寫圖片描述
運行結果
這裏寫圖片描述

用戶拒絕授權重新授權

但是我們有很多小程序的設計都是在用戶同意授權的情況下,才能正常使用的。
這裏我們可以通過調用wx.openSetting的方法打開授權設置頁面。
修改我們的測試代碼。
這裏寫圖片描述
保存運行。點擊圖片。
這裏寫圖片描述
就會打開授權管理頁面。
用戶設置完成點擊確定,會響應success函數。
但是不管用戶是否重新打開都是響應同一個函數。
所以我們可以判斷我們需要的權限是否打開,
然後分別給出提示。
我們修改wx.openSetting函數,保存運行。點擊圖片。

wx.openSetting({
    success(settingdata){
        console.log(settingdata)
        if (settingdata.authSetting.scope.writePhotosAlbum){
            console.log('獲取權限成功,給出再次點擊圖片保存到相冊的提示。')
        }else{
            console.log('獲取權限失敗,給出不給權限就無法正常使用的提示')
        }
    }
})

這裏寫圖片描述
這裏有一個報錯,我們的代碼裏settingdata.authSetting.scope.writePhotosAlbum這樣的取值猛地一看並沒有錯誤,這也是一個比較容易犯的一個錯誤,可能覺得沒有錯,後面的scope.writePhotosAlbum對應圖中紅框中的屬性名。但是按程序理解的話,上面的數據結構如下:

settingdata:{
  authSetting:{
    scope:{
      writePhotosAlbum:false
    }
  }  
}

所以這裏我們修改一下settingdata.authSetting.scope.writePhotosAlbum,改成settingdata.authSetting[‘scope.writePhotosAlbum’]。這裏就是js中的兩種取值方式了,點取值和中括號取值,中括號有一個最大的有點就是中括號內可以寫一個變量。
保存運行,點擊圖片。先直接點擊關閉,再點擊圖片,勾選權限,再點擊關閉。日誌如下:
這裏寫圖片描述
源代碼:百度雲 鏈接:http://pan.baidu.com/s/1dFgtiHN 密碼:77yw
這節課的內容就到這裏結束了。
感謝您的閱讀。
我是莽夫,希望你開心。
如果你覺得本文對你有幫助,請掃描文末二維碼,支持博主原創。
希望大家關注我的個人公衆號ionic_
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章