uniapp开发app:应用上架要求应用获取权限时要求有权限描述

2,312 阅读2分钟

代码参考来着blog.csdn.net/xiyan_yu/ar…

ios权限描述

ios权限描述直接在manifest.json配置即可
文档来源uniapp.dcloud.net.cn/collocation…
image.png 以头像和图库为例

"ios" : {
  "privacyDescription" : {
    "NSPhotoLibraryUsageDescription" : "app有上传头像功能,允许用户从相册中上传头像图片",
      "NSCameraUsageDescription" : "app有上传头像功能,用户可以通过摄像头拍照并上传头像"
  },
  ......
},

如果对ios权限设置有更多的要求的可去看这篇文章www.cnblogs.com/guanqiweb/p…

安卓主动发起权限申请

文档来源www.html5plus.org/doc/zh_cn/a…

发起权限请求如下,如果权限被禁用或者获取不到跳转手机应用权限设置(跳转手机应用权限设置见下面第二段代码)。
scope为权限,这个传入值可以直接百度关键词:Android权限android.permission
message为被禁用时弹窗提醒,注意这个传参一定要有权限使用描述,就是你要这个权限是用于干啥的,要不然审核很可能不给过

function requestPermissions(scope, message) {
  return new Promise((resolve, reject) => {
    plus.android.requestPermissions(
      ["android.permission." + scope],
      function (resultObj) {
        console.log(resultObj, "resultObj");
        resolve(resultObj);
        if (
          resultObj.deniedPresent.length > 0 ||
          resultObj.deniedAlways.length > 0
        ) {
          goSetting(message);
        }
      },
      function (error) {
        goSetting("获取权限失败,请重试");
      }
    );
  });
}

跳转手机应用权限设置如下

// 跳转权限设置
function goSetting(message) {
  uni.showModal({
    title: "提示",
    content: message,
    // showCancel: false, // 不显示取消按钮
    success(res) {
      if (res.confirm) {
        var Intent = plus.android.importClass("android.content.Intent");
        var Settings = plus.android.importClass("android.provider.Settings");
        var Uri = plus.android.importClass("android.net.Uri");
        var mainActivity = plus.android.runtimeMainActivity();
        var intent = new Intent();
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
        intent.setData(uri);
        mainActivity.startActivity(intent);
      } else if (res.cancel) {
        SubmitSureRef.value.cancel();
      }
    },
    fail(err) {
      SubmitSureRef.value.cancel();
    },
  });
}

创建权限描述视图

title为什么权限,message为权限描述——这个权限是为了什么

var topMessageView;
function createTopMessage(title, message) {
  topMessageView = new plus.nativeObj.View("topMessageView", {
    width: "100%",
    height: "100%",
    backgroundColor: "rgba(0,0,0,0.7)",
  });
  topMessageView.drawText(
    title,
    {
      left: "10%",
      width: "80%",
      top: "0px",
      height: "80%",
    },
    {
      color: "#ffffff",
      size: "25px",
    }
  );
  topMessageView.drawText(
    message,
    {
      top: "35px",
      left: "10%",
      width: "80%",
      height: "80%",
    },
    {
      color: "#ffffff",
      whiteSpace: "normal",
    }
  );
  // 显示消息提示框
  topMessageView.show();
}

将以上组合使用,以uni.chooseImage为例

拍照

async function camera() {
  /*#ifdef APP-PLUS*/
  if (plus.os.name !== "iOS") {
    setTimeout(() => {
      createTopMessage("相机权限", "为了给您提供修改头像功能");
    }, 300);
    let res = await requestPermissions(
      "CAMERA",
      "相机权限未获得,此权限为了给您提供修改头像功能,请前往设置中打开"
    );
    setTimeout(() => {
      topMessageView.close();
    }, 300);
    if (!res.granted[0]) {
      // 无权限
      return;
    }
  }
  /*#endif*/
  uni.chooseImage({
    count: 1, //默认9
    sizeType: ["compressed"], //可以指定是原图还是压缩图,默认二者都有
    sourceType: ["camera"], //从相册选择
    success: function (res) {
      saveAvatar(res);
    },
  });
}

图库获取图片

async function photo(params) {
  /*#ifdef APP-PLUS*/
  if (plus.os.name !== "iOS") {
    setTimeout(() => {
      createTopMessage("访问媒体和文件权限", "为了给您提供修改头像功能");
    }, 300);
    let res = await requestPermissions(
      "READ_EXTERNAL_STORAGE",
      "访问媒体和文件权限未获得,此权限为了给您提供修改头像功能,请前往设置中打开"
    );
    setTimeout(() => {
      topMessageView.close();
    }, 300);
    if (!res.granted[0]) {
      // 无权限
      return;
    }
  }
  /*#endif*/
  uni.chooseImage({
    count: 1, //默认9
    sizeType: ["compressed"], //可以指定是原图还是压缩图,默认二者都有
    sourceType: ["album"], //从相册选择
    success: function (res) {
      saveAvatar(res);
    },
  });
}

效果如下图 3e2fac2199e6cd66956afcd73c6bcef.jpg