当前位置:   article > 正文

uniapp 微信小程序 授权隐私流程 网上没有的踩坑记录!_uniapp小程序授权隐私

uniapp小程序授权隐私

首先什么时候我们需要授权操作,比如下图我们调用这些接口时候首先必须让用户授权,这个政策是2022年2月21日24时起对一下接口增加用户授权操作,详情可以看微信文档

授权的逻辑按照官网的意思是: 

这个时候就踩坑了,我把以上逻辑都写好后,发现一直接口走fail,百思不得其解,最后我灵光乍现,之前在处理微信的隐私政策时候调用保存相册功能,必须现在小程序后台管理系统里的用户隐私保护指引里添加上这个隐私类目,最后经过验证,果真是因为这个!!文档里丝毫没提需要有这一步操作。 希望看到这篇文章的兄弟们,避过此坑!

下面贴上我的授权逻辑代码(仅供参考)

  1. getAuthority({ commit, state }, val) { //val:权限名称 和触发函数
  2. return new Promise(async (resolve, reject) => {
  3. let authorityMap = {
  4. 'scope.werun': '微信运动',
  5. 'scope.bluetooth': '蓝牙',
  6. }
  7. if (state.hasLogin) {
  8. uni.getSetting({
  9. async success(res) {
  10. // console.log(res);
  11. if (!res.authSetting[val.type]) {
  12. wx.requirePrivacyAuthorize({
  13. success: () => {
  14. // 用户同意授权
  15. // 继续小程序逻辑
  16. console.log("1");
  17. uni.authorize({
  18. scope: val.type,
  19. async success(res) {
  20. let a = await val.method()
  21. console.log("a", a);
  22. resolve(a)
  23. },
  24. fail() {
  25. console.log("2");
  26. uni.showModal({
  27. content: `为了您良好的用户体验,请允许${authorityMap[val.type]}权限`,
  28. showCancel: false,
  29. success() {
  30. uni.openSetting({
  31. async success(settingdata) {
  32. if (settingdata.authSetting[val.type]) {
  33. let a = await val.method()
  34. console.log("a", a);
  35. resolve(a)
  36. } else {
  37. console.log('获取权限失败')
  38. uni.showToast({
  39. title: '获取权限失败',
  40. icon: 'error',
  41. duration: 2000
  42. })
  43. }
  44. }
  45. })
  46. }
  47. })
  48. }
  49. })
  50. },
  51. fail: () => {}, // 用户拒绝授权
  52. complete: () => {}
  53. })
  54. } else {
  55. let a = await val.method()
  56. console.log("a", a);
  57. resolve(a)
  58. }
  59. }
  60. })
  61. }
  62. })
  63. },

使用:

  1. let authorityRes = await this.$store.dispatch("getAuthority", {
  2. type: 'scope.bluetooth',
  3. method: async () => {
  4. return new Promise(async (resolve) => {
  5. this.$jumpTo(`/pages-clockIn/weight/weightRecord/index`)
  6. resolve(1)
  7. })
  8. }
  9. })
  10. console.log("authorityRes", authorityRes);

当然method里也可以传入异步函数比如调用了接口都是可以的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/292271
推荐阅读
相关标签
  

闽ICP备14008679号