【uniapp】APP打包上架应用商-注意事项

初雪云-uniapp启动图自定义生成(支持一键生成storyboard)
HBuilderX需要的自定义storyboard文件格式为 " zip压缩包 "

一、“Android” — 设置targetSdkVersion

小米、OPPO、vivo、华为等主流应用商店,将于2023年12月采用 targetSdkVersion>=30的等级要求作为应用上架收录标准。建议广大开发者如期适配。

打开项目的manifest.json文件,在 “App常用其它设置” -> “Android设置” -> “targetSdkVersion” 项中进行设置:
在这里插入图片描述

二、修改App端上传图片/视频 uni.uploadFile

在这里插入图片描述

let that=this;
uni.chooseImage({count: 1,sourceType: ['camera','album'],sizeType: ['compressed', 'original'],success: rey => {uni.showLoading({ title: '上传中',mask: true });uni.uploadFile({url: that.uploadUrl, // 你的上传图片接口filePath: rey.tempFilePaths[0],name: 'file',success:(uploadFileRes) =>{let res = JSON.parse(uploadFileRes.data)uni.hideLoading();if(res.code==1){} else{that.toast(res.msg)}}})},fail: (error) => {}
});

三、配置隐私政策提示框(此方法只支持Android)

在 manifest.json 中配置,在app-plus中添加

uni-app【Android平台隐私与政策提示框】

"privacy" : {"prompt" : "template","template" : {"title" : "用户协议和隐私政策","message" : "  请你务必审慎阅读、充分理解“用户协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href='https://https://xieyi.com'>《用户协议》</a>和<a href='https://https://xieyi.com'>《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。","buttonAccept" : "同意并接受","buttonRefuse" : "暂不同意","second" : {"title" : "温馨提示","message" : "  进入应用前,你需先同意<a href='https://https://xieyi.com'>《用户协议》</a>和<a href='https://https://xieyi.com'>《隐私政策》</a>,否则将退出应用。","buttonAccept" : "同意并继续","buttonRefuse" : "退出应用"}}
},

效果图
在这里插入图片描述

四、华为应用市场审核

用户告知权限申请的目的

【插件市场】解决软件在运行时,未见向用户告知权限申请的目的,华为等上架被拒问题

在这里插入图片描述
4.1 在上传图片中使用

chooseImage选择图片的sourceType要自己定义,来判断选择的权限

<template><view class="page"><view class="authItem" @tap.stop="judgment">上传图片</view><!-- 用户告知权限申请的目的 --><yk-authpup ref="authpup" type="top" @changeAuth="changeAuth" :permissionID="permissionID"></yk-authpup></view>
</template><script>var sourceType = [ ['camera'],['album'],['camera','album'] ]import ykAuthpup from "@/components/yk-authpup/yk-authpup";export default {components: { ykAuthpup },data() {return {// 用户告知权限申请的目的soIndex: 0,permissionID:''}},methods: {judgment() { // 判断H5还是App// #ifdef APP-PLUSlet that=this;uni.showActionSheet({itemList: ['拍摄', '从相册选择'],success: function (res) {that.soIndex = res.tapIndex;if(res.tapIndex==0){ // 相机this.permissionID = 'CAMERA';} else if(res.tapIndex==1){ // 相册选择this.permissionID = 'WRITE_EXTERNAL_STORAGE';}setTimeout(()=>{ this.$refs['authpup'].open(); },200)},fail: function (res) { console.log(res.errMsg); }});// #endif// #ifdef H5this.choose_img();// #endif},choose_img(){var that=this;uni.chooseImage({count: 1,// #ifdef H5sourceType: ['camera','album'],// #endif// #ifdef APP-PLUSsourceType: sourceType[this.soIndex],// #endifsizeType: ['compressed', 'original'],success: rey => {uni.showLoading({ title: '上传中',mask: true });uni.uploadFile({url: that.uploadUrl,filePath: rey.tempFilePaths[0],name: 'file',success:(res) =>{var data=JSON.parse(res.data);if(data.code==1){} else{that.toast(data.msg)}}})},fail: (error) => {}});},}}
</script><style></style>

4.2 对yk-authpup插件进行修改- components/yk-authpup/yk-authpup

由于权限拒绝之后,再次点击 权限说明弹窗总是会一闪一闪,所以进行了修改。
[/** ====新增==== */] 是我修改的内容

<template><!-- 用户告知权限申请的目的 --><view v-if="showPopup" class="uni-popup" :style="{top:isNativeHead?'':StatusBar}"><view :class="[type, ani, animation ? 'ani' : '']" class="uni-custom uni-popup__wrapper" @click="close(true)"><view class="uni-popup__wrapper-box"><view class="title">{{authList[permissionID].title}}</view><view class="content">{{authList[permissionID].content}}</view></view></view></view>
</template><script>export default {name: 'YkAuthpup',props: {// 开启动画animation: {type: Boolean,default: true},type: {type: String,default: 'top'},show: {type: Boolean,default: true},//是否是原生头部isNativeHead:{type: Boolean,default: false},permissionID: {type: [String, Number],default: ''}},data() {return {ani: '',showPopup: false,StatusBar:'',refuseNum:'',//拒绝次数,authList: {'WRITE_EXTERNAL_STORAGE': {title: "存储空间/照片权限申请说明",content: "便于您使用该功能拍照上传您的照片/视频及用于更换头像、XXXX、XXXX等场景中使用,请您确认授权,否则无法使用该功能"},'CAMERA':{title: "相机/摄像头权限申请说明",content: "便于您使用该功能拍照上传您的照片/视频及用于更换头像、XXXX、XXXX等场景中使用,请您确认授权,否则无法使用该功能"},'ACCESS_FINE_LOCATION': {title: "地理位置权限申请说明",content: "便于应用程序可以提供基于位置的服务、计算距离、获取经纬度、定位导航、附近搜索等功能,请您确认授权,否则无法使用该功能"},'CALL_PHONE': {title: "拨打电话权限申请说明",content: "便于您使用该功能联系、XXXX、XXXX,请您确认授权,否则无法使用该功能"}},/** ====新增==== */quanx: {'WRITE_EXTERNAL_STORAGE': 0,'CAMERA': 0,'ACCESS_FINE_LOCATION': 0,'CALL_PHONE': 0,}/** ====新增==== */}},created() {// #ifdef APP-PLUSthis.getSystemInfo();// #endif},methods: {//获取状态栏高度getSystemInfo() {let _this = this;uni.getSystemInfo({success: function(e) {_this.StatusBar = e.statusBarHeight + 'px'; //用于自定义头部时,给手机状态栏留出位置,可通过isNativeHead这个参数控制}})},open() {this.requestPermissions(this.permissionID);},close(type) {this.ani = '';this.$nextTick(() => {setTimeout(() => {this.showPopup = false;}, 300)})},//权限检测requestPermissions(permissionID) {let _this = this;/** ====新增==== */let _quanx = uni.getStorageSync('quanx')||_this.quanx;/** ====新增==== */// #ifdef APP-PLUS//判断安卓与ios设备if (plus.os.name == 'Android') {let _permissionID = 'android.permission.' + permissionID;plus.android.checkPermission(_permissionID,granted => {if (granted.checkResult == -1) {console.log(uni.getStorageSync('quanx'))//还未授权当前查询的权限,打开权限申请目的自定义弹框/** ====新增判断==== */if(_quanx[permissionID]==0){_this.showPopup = true;_this.$nextTick(() => {setTimeout(() => {_this.ani = 'uni-' + _this.type},30)})}/** ====新增==== */}},error => {console.log(error.message);});plus.android.requestPermissions([_permissionID], (e) => {//关闭权限申请目的自定义弹框_this.$nextTick(() => {setTimeout(() => {_this.ani = '';_this.showPopup = false}, 0)})// console.log(e,'kkkkk')if (e.granted.length > 0) { // 已获取的权限/** ====新增==== */_quanx[permissionID]=1;/** ====新增==== *///当前查询权限已授权,此时可以通知页面执行接下来的操作_this.$emit('changeAuth');}if (e.deniedAlways.length > 0) { // 永久拒绝申请的权限/** ====新增==== */_quanx[permissionID]=-1;/** ====新增==== *///当前查询权限已被永久禁用,此时需要引导用户跳转手机系统设置去开启// uni.showModal({// 	title: '温馨提示', content: '还没有该权限,立即去设置开启?',// 	cancelText: "取消", confirmText: "去设置",// 	showCancel: true, confirmColor: '#000', cancelColor: '#666',// 	success: (res) => {// 		if (res.confirm) {// 			_this.goSetting();// 		}// 	}// })}/** ====新增==== */uni.setStorageSync('quanx', _quanx);/** ====新增==== */})} else {//IOS不需要添加自定义弹框来描述权限目的,因为在配置文件的隐私信息访问的许可描述里可添加//正常可以直接调用uni的API调起权限询问弹框使用各种权限,下面的判断使用场景主要是在IOS禁用某权限后,这个可以判断有无权限,进而引导用户跳转设置开启,仅列出了位置、相册、通讯录、相机、录音等权限,其他IOS权限可具体参考 https://ext.dcloud.net.cn/plugin?id=15787let result = 0;if (permissionID == 'ACCESS_FINE_LOCATION') {//IOS检测位置权限let cLLocationManager = plus.ios.importClass("CLLocationManager"),authStatus = cLLocationManager.authorizationStatus(),enable = cLLocationManager.locationServicesEnabled();if (enable && authStatus != 2) {result = 1;} else {result = 0;}plus.ios.deleteObject(cLLocationManager);} else if (permissionID == 'WRITE_EXTERNAL_STORAGE') {//IOS检测相册权限let PHPhotoLibrary = plus.ios.importClass("PHPhotoLibrary"),authStatus = PHPhotoLibrary.authorizationStatus();if (authStatus === 3) {result = 1;} else {result = 0;}plus.ios.deleteObject(PHPhotoLibrary);} else if (permissionID == 'CAMERA') {//IOS检测相机/摄像头权限let avCaptureDevice = plus.ios.importClass("AVCaptureDevice"),authStatus = avCaptureDevice.authorizationStatusForMediaType("vide");if (authStatus === 3) {result = 1;} else {result = 0;}plus.ios.deleteObject(avCaptureDevice);} else if (permissionID == 'CALL_PHONE') {//IOS检测通讯录权限let contactStore = plus.ios.importClass("CNContactStore"),authStatus = contactStore.authorizationStatusForEntityType(0);if (authStatus === 3) {result = 1;} else {result = 0;}plus.ios.deleteObject(contactStore);}else if(permissionID == 'RECORD_AUDIO'){//IOS检测麦克风权限let aVAudioSession = plus.ios.importClass("AVAudioSession"),aVAudio = aVAudioSession.sharedInstance(),authStatus = aVAudio.recordPermission();if ([1684369017, 1970168948].includes(authStatus)) {result = 0;} else {result = 1;}plus.ios.deleteObject(aVAudioSession);}if (result) {//当前查询权限已授权,此时可以通知页面执行接下来的操作that.$emit('changeAuth')} else {//当前查询的权限已禁用,引导用户跳转手机系统设置去开启// uni.showModal({// 	title: '温馨提示', content: '还没有该权限,立即去设置开启?',// 	cancelText: "取消", confirmText: "去设置",// 	showCancel: true, confirmColor: '#000', cancelColor: '#666',// 	success: (res) => {// 		if (res.confirm) {// 			_this.goSetting();// 		}// 	}// })}}// #endif},//跳转手机系统设置goSetting() {if (plus.os.name == "iOS") {var UIApplication = plus.ios.import("UIApplication");var application2 = UIApplication.sharedApplication();var NSURL2 = plus.ios.import("NSURL");var setting2 = NSURL2.URLWithString("app-settings:");application2.openURL(setting2);plus.ios.deleteObject(setting2);plus.ios.deleteObject(NSURL2);plus.ios.deleteObject(application2);} else {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);}}}}
</script><style lang="scss">.uni-popup {position: fixed;top: 0;bottom: 0;left: 0;right: 0;z-index: 99999;overflow: hidden;&__wrapper {position: absolute;z-index: 999;/* #ifndef APP-NVUE */box-sizing: border-box;/* #endif */&.ani {/* #ifndef APP-NVUE */transition: all 0.3s;/* #endif */}&.top {top: 0;width:705rpx;/* #ifdef APP-NVUE */left:22.5rpx;/* #endif *//* #ifndef APP-NVUE */left:0;transform: translateY(-705rpx);/* #endif */}&-box {position: relative;/* #ifndef APP-NVUE */box-sizing: border-box;/* #endif */}&.uni-custom {& .uni-popup__wrapper-box {width: 705rpx;/* #ifndef APP-NVUE */margin: 0 22.5rpx;/* #endif */padding: 30upx;background: #fff;border: solid 2rpx #ddd;/* #ifndef APP-NVUE */box-sizing: border-box;/* #endif */border-radius: 16rpx;.title{font-size: 32rpx;font-weight: bold;}.content{margin-top: 16rpx;line-height: 1.6;}}&.top{& .uni-popup__wrapper-box {width: 705rpx;}}}&.uni-top{transform: translateY(0);}}}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/235156.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多链混沌:Layer2 格局演变与跨链流动性的新探索

点击查看原文&#xff1a;多链混沌&#xff1a;Layer2 格局演变与跨链流动性的新探索 如今的 Crypto 是一个由多链构成的混沌世界。曾经&#xff0c;以太坊聚集了加密世界绝大多数的流动性与 DeFi 应用&#xff0c;但现在其 TVL 占比已经降到 60% 以下&#xff0c;并仍处于下降…

golang实现加密解密文档

golang实现加密解密文档 package mainimport ("bytes""crypto/aes""crypto/cipher""crypto/rand""encoding/base64""flag""fmt""io""io/ioutil" )func main() {encodePtr : flag.…

【开发小程序多少钱?智创开发】

开发一个小程序费用主要看做什么和怎么做&#xff1f; 第一部分&#xff1a;做什么&#xff1f; 做什么是指功能部分&#xff0c;开发的功能不一样&#xff0c;耗时也就不一样&#xff0c;价格自然也就不一样了。就好比买房&#xff0c;套二的公寓和别墅价格自然差距很大。所…

【python基础教程】print输出函数和range()函数的正确使用方式

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 print()有多个参数&#xff0c;参数个数不固定。 有四个关键字参数&#xff08;sep end file flush&#xff09;&#xff0c;这四个关键字参数都有默认值。 print作用是将objects的内容输出到file中&#xff0c;objects中的…

uni-app的学习【第二节】

四 路由配置及页面跳转 (1)路由配置 uni-app页面路由全部交给框架统一管理,需要在pages.json里配置每个路由页面的路径以及页面样式(类似小程序在app.json中配置页面路由) (2)路由跳转 uni-app有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳…

AI人工智能虚拟现实行业发展分析

AI人工智能和虚拟现实是当今科技领域最受关注和研究的两个领域。这两项技术的迅速发展给各行各业带来了巨大的变革和机遇。在过去的几年里&#xff0c;AI和虚拟现实已经取得了显著的进展&#xff0c;并且有着广阔的发展前景。 AI人工智能作为一种模拟人类智能的技术&#xff0…

LangChain v0.1.0:大模型应用技术革新的里程碑

LangChain v0.1.0 最新版本发布, 大模型应用技术革新的里程碑 LangChain官方宣布发布了langchain 0.1.0,这是Langchain第一个稳定版本。支持 Python 和 JavaScript。 Langchain简介 LangChain已经存在了一年多,随着LangChain成长为构建LLM应用程序的默认框架,LangChain已…

详解Keras:keras.preprocessing.image

keras.preprocessing.image Keras 库中的一个模块&#xff0c;用于处理和增强图像数据&#xff0c;它提供了一些实用的函数&#xff0c;如图像的加载、预处理、增强等。 常用函数 1、load_img 用于加载图像文件&#xff0c;并返回一个 NumPy 数组表示该图像 示例 from ker…

JVM基础(1)——JVM类加载机制

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

2024--Django平台开发-Django知识点(五)

day05 django知识点 今日概要&#xff1a; 中间件 【使用】【源码】cookie 【使用】【源码 - Django底层请求本质】session【使用】【源码 - 数据库请求周期中间件】 1.中间件 1.1 使用 编写类&#xff0c;在类型定义&#xff1a;process_request、process_view、process_…

Unity Editor实用功能:Hierarchy面板的对象上绘制按按钮并响应

目录 需求描述上代码打个赏吧 需求描述 现在有这样一个需求&#xff1a; 在Hierarchy面板的对象上绘制按钮点击按钮&#xff0c;弹出菜单再点击菜单项目响应自定义操作在这里的响应主要是复制对象层级路路径 看具体效果请看动图&#xff1a; 注&#xff1a; 核心是对Edito…

控制el-table的列显示隐藏

控制el-table的列显示隐藏&#xff0c;一般的话可以通过循环来实现&#xff0c;但是假如业务及页面比较复杂的话&#xff0c;list数组循环并不好用。 在我们的页面中el-table-column是固定的&#xff0c;因为现在是对现有的进行维护和迭代更新。 对需要控制列显示隐藏的页面进…

【EI会议征稿通知】第三届仿真设计与计算建模国际学术会议(SDCM 2024)

The 3rd International Conference on Simulation Design and Computational Modeling 第三届仿真设计与计算建模国际学术会议&#xff08;SDCM 2024&#xff09; 第三届仿真设计与计算建模国际会议&#xff08;SDCM 2024&#xff09;将于 4 月 26-28 日在中国重庆召开。第二届…

【博士每天一篇文-算法】Graph Structure of Neural Networks

阅读时间&#xff1a;2023-11-12 1 介绍 年份&#xff1a;2020 作者&#xff1a;尤家轩 斯坦福大学 期刊&#xff1a; International Conference on Machine Learning. 引用量&#xff1a;130 论文探讨了神经网络的图结构与其预测性能之间的关系。作者提出了一种新的基于图的…

【leetcode】力扣算法之旋转图像【难度中等】

题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 用例 输入&#xff1a; matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&…

java 体育明星管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 体育明星管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

2000-2022各省、地级市风险投资(VC)数据

2000-2022各省、地级市风险投资&#xff08;VC&#xff09;数据 1、时间&#xff1a;2000-2022年 2、范围&#xff1a;350个地级市&#xff0c;34省 3、指标&#xff1a;包含投资机构层面的风险投资原始数据&#xff0c;汇总到省市层面的结果数据&#xff0c;具体指标如下&a…

【Java集合篇】ConcurrentHashMap是如何保证fail- safe的

ConcurrentHashMap是如何保证fail-safe的 ✅典型解析✅拓展知识仓✅分段锁☑️分段锁适用于什么情况&#x1f7e1;分段锁的锁争用情况,是否会带来一定的性能影响✔️分段锁的优缺点&#x1f7e2; 还有哪些其他的线程安全哈希表实现&#x1f7e0;Hashtable和 Collections区别&am…

二叉树及其实现

二叉树 一.树的概念及结构1.1树的概念1.2相关概念 2.二叉树的概念及结构2.1 概念2.2 特殊的二叉树 3.二叉树的遍历3.1 前序、中序以及后序遍历3.2 层序遍历3.3 判断二叉树是否是完全二叉树3.4 二叉树的高度3.5 二叉树的叶子节点个数3.6 二叉树的第k层的节点个数3.7 二叉树销毁3…

Java面向对象综合练习(拼图小游戏),用java图形化界面实现拼图小游戏

1. 设计游戏的目的 锻炼逻辑思维能力利用Java的图形化界面&#xff0c;写一个项目&#xff0c;知道前面学习的知识点在实际开发中的应用场景 2. 游戏的最终效果呈现 Hello&#xff0c;各位同学大家好。今天&#xff0c;我们要写一个非常有意思的小游戏 —《拼图小游戏》 我们…