HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

iOS上架被拒Guideline 5.1.1问题

iOS打包 iOS

iOS上架被拒Guideline 5.1.1条款问题解决步骤!

Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage

We noticed that your app requests the user’s consent to access their camera/microphone but does not clarify the use of this feature in the permission modal alert.
Next Steps
To resolve this issue, please revise the permission modal alert to specify why the app is requesting access to the user's camera/microphone.
The permission request alert should specify how your app will use this feature to help users understand why your app is requesting access to their personal data.

意思就是没有对请求的相关权限进行描述,或者描述的不够准确,比如使用到了定位,相册相机,通讯录等权限,要把为什么使用这些权限做下详细描述!

权限描述举例说明

比如一个外卖应用,获取定位后需要展示附近的美食信息。那么,相应的定位权限描述,应当是类似“获取定位信息用于为用户提供附近的美食信息”这样的描述。

而不应当是,“获取用户当前位置信息”这种没有明确描述定位用处的信息。

下面介绍修改权限说明入口及例子!修改后重新打包上传审核!

HBuilderX开发工具修改入口!

打开manifest.json文件

继续阅读 »

iOS上架被拒Guideline 5.1.1条款问题解决步骤!

Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage

We noticed that your app requests the user’s consent to access their camera/microphone but does not clarify the use of this feature in the permission modal alert.
Next Steps
To resolve this issue, please revise the permission modal alert to specify why the app is requesting access to the user's camera/microphone.
The permission request alert should specify how your app will use this feature to help users understand why your app is requesting access to their personal data.

意思就是没有对请求的相关权限进行描述,或者描述的不够准确,比如使用到了定位,相册相机,通讯录等权限,要把为什么使用这些权限做下详细描述!

权限描述举例说明

比如一个外卖应用,获取定位后需要展示附近的美食信息。那么,相应的定位权限描述,应当是类似“获取定位信息用于为用户提供附近的美食信息”这样的描述。

而不应当是,“获取用户当前位置信息”这种没有明确描述定位用处的信息。

下面介绍修改权限说明入口及例子!修改后重新打包上传审核!

HBuilderX开发工具修改入口!

打开manifest.json文件

收起阅读 »

关于MUI适配IOS13的一些经验分享

调试 mui iOS13

问题产生背景

由于业余发展的需要,我们对一款MUI开发的5+App进行了功能上的增加。开始的时候是在Android平台上使用真机调试 的模式进行开发测试,完成测试之后,在进行IOS测试时遇到了一些问题,在这里做一些总结。

开发工具

HbuilderX

  • 初始版本:2.2.0
  • 最终版本:2.3.7

IOS端问题

问题一: 无法进行调试

  • 原因: 由于IOS系统升级,老版本的HbuilderX中的基座无法对iOS进行真机调试操作
  • 解决方案: 按照官方的要求,将HbuilderX升级到2.3的版本以后,我这里是将HbuilderX升级到了最新的稳定版本-2.3.7

问题二: 启动App后无法跳转到首页

  • 原来方案: 之前关闭App的启动图,是在程序中使用plus.navigator.closeSplashscreen() 这个方法,但是在IOS13上,这个方法没有生效,然后也没有在配置文件中进行配置
  • 原因: 配置文件没有配置,程序中代码没生效
  • 解决方案: 在配置文件中勾选 自动关闭启动界面
    如图所示

问题三: 登录和获取用户信息session不一致

  • 影响: 这个问题,导致在IOS上App无法获取用户的信息,无法进行下一步的操作
  • 原因:
    • iOS有UIWebview和WKWebview两种webview,从IOS13开始苹果将UIWebview列为过期的API
    • MUI开发的5+App默认为UIWebview,然而HbuilderX2.2.5+版本已将IOS上所有的webview的默认内核由UIWebview调整为 WKWebview
    • 如果同时在一个app里使用这两种webview,注意这两种webview之间的cookie、localstorage、session不共享,但plus.storage是共享的。
  • 解决方案: 在manifest.json文件源码视图中设置 plus -> kernel -> ios的值为 "UIWebview"
    如图所示
继续阅读 »

问题产生背景

由于业余发展的需要,我们对一款MUI开发的5+App进行了功能上的增加。开始的时候是在Android平台上使用真机调试 的模式进行开发测试,完成测试之后,在进行IOS测试时遇到了一些问题,在这里做一些总结。

开发工具

HbuilderX

  • 初始版本:2.2.0
  • 最终版本:2.3.7

IOS端问题

问题一: 无法进行调试

  • 原因: 由于IOS系统升级,老版本的HbuilderX中的基座无法对iOS进行真机调试操作
  • 解决方案: 按照官方的要求,将HbuilderX升级到2.3的版本以后,我这里是将HbuilderX升级到了最新的稳定版本-2.3.7

问题二: 启动App后无法跳转到首页

  • 原来方案: 之前关闭App的启动图,是在程序中使用plus.navigator.closeSplashscreen() 这个方法,但是在IOS13上,这个方法没有生效,然后也没有在配置文件中进行配置
  • 原因: 配置文件没有配置,程序中代码没生效
  • 解决方案: 在配置文件中勾选 自动关闭启动界面
    如图所示

问题三: 登录和获取用户信息session不一致

  • 影响: 这个问题,导致在IOS上App无法获取用户的信息,无法进行下一步的操作
  • 原因:
    • iOS有UIWebview和WKWebview两种webview,从IOS13开始苹果将UIWebview列为过期的API
    • MUI开发的5+App默认为UIWebview,然而HbuilderX2.2.5+版本已将IOS上所有的webview的默认内核由UIWebview调整为 WKWebview
    • 如果同时在一个app里使用这两种webview,注意这两种webview之间的cookie、localstorage、session不共享,但plus.storage是共享的。
  • 解决方案: 在manifest.json文件源码视图中设置 plus -> kernel -> ios的值为 "UIWebview"
    如图所示
收起阅读 »

分享我的踩坑经验

Vue css

我是从vue 中直接移植过来的,

因为vue中 style文件都会加上一个scoped 只对本页面生效嘛,

然后我就没有删掉这个,(在其他端都可以运行,就是在手机APP端的css全部失效)

但是运行在app端的时候, css样式会全部失效, 经过我一天的寻找,发现就是.vue文件的scoped导致的,

故,特此分享一下, 防止别人也踩坑

继续阅读 »

我是从vue 中直接移植过来的,

因为vue中 style文件都会加上一个scoped 只对本页面生效嘛,

然后我就没有删掉这个,(在其他端都可以运行,就是在手机APP端的css全部失效)

但是运行在app端的时候, css样式会全部失效, 经过我一天的寻找,发现就是.vue文件的scoped导致的,

故,特此分享一下, 防止别人也踩坑

收起阅读 »

关于消息推送集成知识分享-采用个推 遇到了若干个坑

个推

在集成过程中遇到了诸多坑啊,几乎把社区里所有关于个推的问题看了一个遍,功夫不负有心人,终于完成了!

注意事项:
IDE:HbuilderX 版本2.3.7.20191024
后台服务语言: java
打包方式:云打包 本地自定义基座方式测试

实现结果:
安卓:
在线时,可以在通知栏收到推送消息(通知类型和透传类型都可以收到)
离现时,由于个推推送机制以及各厂商限制问题,暂不能收到,但是消息有效期内,打开app就会在通知栏收到信息
IOS:
在线和离线的情况,都可以正常在通知栏收到消息(只支持透传类型)
为了能够让安卓和IOS都正常收到消息,后端服务发送消息类型都选择了透传类型模板 TransmissionTemplate template = new TransmissionTemplate();
1. 开发前必读文档

2.遇到的坑

  • 关于为何plus.push.createMessage创建不了本地消息以及为何点击通知栏无法触发click事件问题
    答:我遇到情况是,我是用的IDE最开始是Hbuilder,版本已经很老了,在这方面打包或者自定义基座运行会出现上述两个问题,后来改用IDE:HbuilderX进行开发测试就可以了

  • 关于为何IOS收不到离线消息(包括app后台运行以及app进程down)
    答: 1.首先的问题让你们的后端服务查看发送的消息是否配置了IOS通知样式 template.setAPNInfo(getAPNPayload(title,content,payload));

    1. 此时如果发现还是收不到消息,大概率是因为你们上传到个推的push证书有问题,请重新按照 iOS 推送证书的创建与Xcode中的配置 进行生产,然后上传到个推
      3.经上面两个步骤 IOS推送解决
      -关于 IOS 离线消息(app后台运行)自动触发click事件或者触发两次 的问题
      答: 这个问题出在后端服务上,需要后端设置 payload.setContentAvailable(0); //此处官方文档设置了1
  • 关于如何清空IOS角标 或者对角标数字进行加减
    答:代码如下
    var UIApplication = plus.ios.import("UIApplication");
    var app = UIApplication.sharedApplication();
    //获取应用图标的数量
    var oldNum = app.applicationIconBadgeNumber();
    if(oldNum!=0){
    // console.log("oldNum:"+oldNum);
    var newNum = oldNum - 1;
    // console.log("newNum:"+newNum);
    //设置应用图标的数量
    plus.runtime.setBadgeNumber(newNum);
    //导入个推原生类
    var GeTuiSdk = plus.ios.importClass('GeTuiSdk');
    GeTuiSdk.setBadge(newNum);
    }
    -关于IOS平台创建本地消息也会触发监听的"receive"事件
    答: 对payload 进行本地标识添加 代码如下:当然根据自己业务进行处理

    plus.push.addEventListener('receive', function(msg){
    console.log("透传消息:"+JSON.stringify(msg))
    var apsMsg = msg.aps;//来自离线消息
    if(msg.payload.indexOf("LocalMsg")==-1){
    var tit = msg.title;
    var options = {cover:false,title:tit};
    var da="LocalMsg:"+msg.payload;
    plus.push.createMessage(msg.content,da, options );
    }
    }, false);
    -关于如何清空通知栏消息
    由于推送消息目的是提示用户打开app促活 所以我们默认只要用户打开app就会清空消息 并且角标设0
    plus.push.clear();

如有不对的地方请指教,
关于有什么问题可以提问,我会尽量及时解答

上传后端服务代码 以及 前端js

继续阅读 »

在集成过程中遇到了诸多坑啊,几乎把社区里所有关于个推的问题看了一个遍,功夫不负有心人,终于完成了!

注意事项:
IDE:HbuilderX 版本2.3.7.20191024
后台服务语言: java
打包方式:云打包 本地自定义基座方式测试

实现结果:
安卓:
在线时,可以在通知栏收到推送消息(通知类型和透传类型都可以收到)
离现时,由于个推推送机制以及各厂商限制问题,暂不能收到,但是消息有效期内,打开app就会在通知栏收到信息
IOS:
在线和离线的情况,都可以正常在通知栏收到消息(只支持透传类型)
为了能够让安卓和IOS都正常收到消息,后端服务发送消息类型都选择了透传类型模板 TransmissionTemplate template = new TransmissionTemplate();
1. 开发前必读文档

2.遇到的坑

  • 关于为何plus.push.createMessage创建不了本地消息以及为何点击通知栏无法触发click事件问题
    答:我遇到情况是,我是用的IDE最开始是Hbuilder,版本已经很老了,在这方面打包或者自定义基座运行会出现上述两个问题,后来改用IDE:HbuilderX进行开发测试就可以了

  • 关于为何IOS收不到离线消息(包括app后台运行以及app进程down)
    答: 1.首先的问题让你们的后端服务查看发送的消息是否配置了IOS通知样式 template.setAPNInfo(getAPNPayload(title,content,payload));

    1. 此时如果发现还是收不到消息,大概率是因为你们上传到个推的push证书有问题,请重新按照 iOS 推送证书的创建与Xcode中的配置 进行生产,然后上传到个推
      3.经上面两个步骤 IOS推送解决
      -关于 IOS 离线消息(app后台运行)自动触发click事件或者触发两次 的问题
      答: 这个问题出在后端服务上,需要后端设置 payload.setContentAvailable(0); //此处官方文档设置了1
  • 关于如何清空IOS角标 或者对角标数字进行加减
    答:代码如下
    var UIApplication = plus.ios.import("UIApplication");
    var app = UIApplication.sharedApplication();
    //获取应用图标的数量
    var oldNum = app.applicationIconBadgeNumber();
    if(oldNum!=0){
    // console.log("oldNum:"+oldNum);
    var newNum = oldNum - 1;
    // console.log("newNum:"+newNum);
    //设置应用图标的数量
    plus.runtime.setBadgeNumber(newNum);
    //导入个推原生类
    var GeTuiSdk = plus.ios.importClass('GeTuiSdk');
    GeTuiSdk.setBadge(newNum);
    }
    -关于IOS平台创建本地消息也会触发监听的"receive"事件
    答: 对payload 进行本地标识添加 代码如下:当然根据自己业务进行处理

    plus.push.addEventListener('receive', function(msg){
    console.log("透传消息:"+JSON.stringify(msg))
    var apsMsg = msg.aps;//来自离线消息
    if(msg.payload.indexOf("LocalMsg")==-1){
    var tit = msg.title;
    var options = {cover:false,title:tit};
    var da="LocalMsg:"+msg.payload;
    plus.push.createMessage(msg.content,da, options );
    }
    }, false);
    -关于如何清空通知栏消息
    由于推送消息目的是提示用户打开app促活 所以我们默认只要用户打开app就会清空消息 并且角标设0
    plus.push.clear();

如有不对的地方请指教,
关于有什么问题可以提问,我会尽量及时解答

上传后端服务代码 以及 前端js

收起阅读 »

【阿里云双11特惠】云服务器低至86/年 229/3年,另外有香港服务器 119/年

阿里云双十一,云服务器历史最低价来啦啦啦!!
1核-2G-1M,1年86元,3年229。
2核-4G-3M,3年799元。
2核-8G-5M,3年1399元。
4核-8G-5M,1年5621元。
8核-16G-8M,3年12209元。
1核-1G-1M,香港服务器1年119块。
2核-4G-5M,香港服务器3年2926块。
现在下单就可以买。
(没有新账号的,用家人的来注册阿里云并且实名,购买完成之后再把手机号绑定更改为自己的)
拼团链接:https://www.aliyun.com/1111/2019/group-buying-share?ptCode=F9E6C0F5F69CFE2439882EFC16E69926647C88CF896EF535&userCode=wbqjs7bw&share_source=copy_link

先领取2000元红包再拼团
红包链接:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=wbqjs7bw

继续阅读 »

阿里云双十一,云服务器历史最低价来啦啦啦!!
1核-2G-1M,1年86元,3年229。
2核-4G-3M,3年799元。
2核-8G-5M,3年1399元。
4核-8G-5M,1年5621元。
8核-16G-8M,3年12209元。
1核-1G-1M,香港服务器1年119块。
2核-4G-5M,香港服务器3年2926块。
现在下单就可以买。
(没有新账号的,用家人的来注册阿里云并且实名,购买完成之后再把手机号绑定更改为自己的)
拼团链接:https://www.aliyun.com/1111/2019/group-buying-share?ptCode=F9E6C0F5F69CFE2439882EFC16E69926647C88CF896EF535&userCode=wbqjs7bw&share_source=copy_link

先领取2000元红包再拼团
红包链接:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=wbqjs7bw

收起阅读 »

大厂团队接各种外包

外包

可提供服务

  • Web网站的整体研发

  • 小程序开发

  • 微信公众号开发

  • 安卓/Ios

技术栈介绍

  • Html5/Css/Js/Vue.js/jQuery.js/Node.js/小程序

  • React.js/Typescript/ReactNative/Java/Python/PHP

  • Electron

联系方式

微信 gzamon (注:外包)

继续阅读 »

可提供服务

  • Web网站的整体研发

  • 小程序开发

  • 微信公众号开发

  • 安卓/Ios

技术栈介绍

  • Html5/Css/Js/Vue.js/jQuery.js/Node.js/小程序

  • React.js/Typescript/ReactNative/Java/Python/PHP

  • Electron

联系方式

微信 gzamon (注:外包)

收起阅读 »

升级HBx后mui.ajax跨域访问全部挂掉 还好用5+的XMLHttpRequest解决

ajax

还好之前有封装mui.ajax 否则一个一个的改真要命啊

还好之前有封装mui.ajax 否则一个一个的改真要命啊

Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息

IMEI Android

说明

Android平台从6.0(API23)开始系统对权限的管理更加严格,所有涉及敏感权限都需要用户授权允许才能获取。
因此一些应用基础业务逻辑需要的权限会在应用启动时申请,并引导用户允许。

<a id="externalstorage"></a>

读写手机存储权限

HBuilderX3.5.5+版本调整申请读写手机存储权限策略默认值为 none

应用需要保存运行状态等数据到手机SD卡中,启动时需要获取读写手机存储权限,此权限为基础权限,影响真机运行、wgt升级。

  • 注意:此权限目标不是要访问相册,是Android把相册写入权限和存储写入权限合并在一个权限里了。
  • 注意:wgt热更新是应用市场不乐见的,不建议明显提示给用户或告知应用市场。

申请读写手机存储需要用户授权,会弹出如下提示框:

  • HBuilderX2.4.2及以下版本,用户拒绝此权限则直接退出应用。
  • HBuilderX2.4.3+版本,用户拒绝后键会弹出以下提示框引导用户重新允许

    点击“取消”退出应用;
    点击“确定”重新弹出授权框,如果用户已经勾选“不再询问”则打开应用的设置界面。
    此提示语可在manifest.json中配置
  • HBuilderX2.5.0+开始支持配置应用启动时申请获取手机存储权限,支持以下三种策略
    • none
      应用启动时不申请
    • once
      应用第一次启动时申请,用户可以拒绝
    • always
      应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许

源码视图配置

打开manifest.json文件,切换到“源码视图”项

  • uni-app项目
    在"app-plus" -> "distribute" -> "android" 节点下添加 permissionExternalStorage 节点
  • 5+ App项目
    在 "plus" -> "distribute" -> "google" 节点下添加 permissionExternalStorage 节点

permissionExternalStorage节点数据格式如下:

    "permissionExternalStorage": {  
        "request": "always",  
        "prompt": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"  
     }
  • request
    字符串类型,必填,申请读写手机存储权限策略,可取值none、once、always。
    • HBuilderX3.5.5+版本默认值调整为none
    • HBuilderX3.0以下版本默认值always
  • prompt
    字符串类型,可选,用户拒绝时弹出提示框上的内容。
    默认值为:应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。
    国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
    设置自定义键名称为“dcloud_permission_write_external_storage_message”。

保存后提交云端打包生效

<a id="phonestate"></a>

访问设备信息权限

Android平台应用获取设备信息(如IMEI、IMSI等),统计、推送、广告等业务功能依赖这些信息。
此权限不是必选,拒绝此权限不影响App端基座运行。但拥有本权限可以给开发者提供更准确的统计报表。
而申请获取这些信息需要用户授权,会弹出如下提示框:


华为手机应用的设置中权限列表中为“电话”权限
部分手机设备对该权限描述为“拨打电话,管理电话权限”

HBuilderX2.3.8+开始支持配置应用启动时申请获取设备信息权限,支持以下三种策略

  • none
    应用启动时不申请
  • once
    应用第一次启动时申请,用户可以拒绝
  • always
    应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许

    此提示框删的文本可自定义,参考下面的prompt字段

HX3.5.5+版本开始默认策略为none,即应用启动不再主动申请

源码视图配置

打开manifest.json文件,切换到“源码视图”项

  • uni-app项目
    在 "app-plus" -> "distribute" -> "android" 节点下添加 permissionPhoneState 节点
  • 5+ App项目
    在 "plus" -> "distribute" -> "google" 节点下添加 permissionPhoneState 节点

permissionPhoneState节点数据格式如下:

    "permissionPhoneState": {  
        "request": "always",  
        "prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"  
     }
  • request
    字符串类型,必填,申请设备信息权限策略,可取值none、once、always。默认值为once。
  • prompt
    字符串类型,可选,用户拒绝时弹出提示框上的内容。
    默认值为:为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。
    国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
    设置自定义键名称为“dcloud_permission_read_phone_state_message”。

保存后提交云端打包生效

离线打包提示语配置及弹窗配置。

提示语配置

在主项目的strings.xml中添加如下字段。strings.xml位于 项目目录/src/main/res/values下,如果文件或文件夹不存在,直接新建即可。

存储权限提示语配置

<resources>  
    <string name="dcloud_permission_write_external_storage_message">存储权限提示语</string>  
</resources>  

读取手机状态权限配置

<resources>  
    <string name="dcloud_permission_read_phone_state_message">读取手机状态权限提示语</string>  
</resources>  

弹窗配置

在androidManifest.xml的application节点下添加如下字段。

存储权限弹窗配置

<application>  
<meta-data android:name="DCLOUD_WRITE_EXTERNAL_STORAGE" android:value="once"/>  
</application>  

value可取值为 none、once、always。

读取手机状态弹窗配置

<application>  
<meta-data android:name="DCLOUD_READ_PHONE_STATE" android:value="once"/>  
</application>  

value可取值为 none、once、always。

补充

沟通发现,部分开发者在main.js里面调用了plus.device.getInfo这类方法。

但是其实API操作与permissionExternalStorage设置无关,permissionExternalStorage用于设置应用内部逻辑是否申请访问SD卡权限

开发者是因为在启动的时候调用API触发了权限申请,误以为permissionExternalStorage设置无效(其实设置是生效的)。

其它API操作会根据功能需求来申请权限,比如操作系统相册也会申请访问SDK卡权限、定位操作会申请定位权限等。

Android平台隐私与政策提示框配置方法

继续阅读 »

说明

Android平台从6.0(API23)开始系统对权限的管理更加严格,所有涉及敏感权限都需要用户授权允许才能获取。
因此一些应用基础业务逻辑需要的权限会在应用启动时申请,并引导用户允许。

<a id="externalstorage"></a>

读写手机存储权限

HBuilderX3.5.5+版本调整申请读写手机存储权限策略默认值为 none

应用需要保存运行状态等数据到手机SD卡中,启动时需要获取读写手机存储权限,此权限为基础权限,影响真机运行、wgt升级。

  • 注意:此权限目标不是要访问相册,是Android把相册写入权限和存储写入权限合并在一个权限里了。
  • 注意:wgt热更新是应用市场不乐见的,不建议明显提示给用户或告知应用市场。

申请读写手机存储需要用户授权,会弹出如下提示框:

  • HBuilderX2.4.2及以下版本,用户拒绝此权限则直接退出应用。
  • HBuilderX2.4.3+版本,用户拒绝后键会弹出以下提示框引导用户重新允许

    点击“取消”退出应用;
    点击“确定”重新弹出授权框,如果用户已经勾选“不再询问”则打开应用的设置界面。
    此提示语可在manifest.json中配置
  • HBuilderX2.5.0+开始支持配置应用启动时申请获取手机存储权限,支持以下三种策略
    • none
      应用启动时不申请
    • once
      应用第一次启动时申请,用户可以拒绝
    • always
      应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许

源码视图配置

打开manifest.json文件,切换到“源码视图”项

  • uni-app项目
    在"app-plus" -> "distribute" -> "android" 节点下添加 permissionExternalStorage 节点
  • 5+ App项目
    在 "plus" -> "distribute" -> "google" 节点下添加 permissionExternalStorage 节点

permissionExternalStorage节点数据格式如下:

    "permissionExternalStorage": {  
        "request": "always",  
        "prompt": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"  
     }
  • request
    字符串类型,必填,申请读写手机存储权限策略,可取值none、once、always。
    • HBuilderX3.5.5+版本默认值调整为none
    • HBuilderX3.0以下版本默认值always
  • prompt
    字符串类型,可选,用户拒绝时弹出提示框上的内容。
    默认值为:应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。
    国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
    设置自定义键名称为“dcloud_permission_write_external_storage_message”。

保存后提交云端打包生效

<a id="phonestate"></a>

访问设备信息权限

Android平台应用获取设备信息(如IMEI、IMSI等),统计、推送、广告等业务功能依赖这些信息。
此权限不是必选,拒绝此权限不影响App端基座运行。但拥有本权限可以给开发者提供更准确的统计报表。
而申请获取这些信息需要用户授权,会弹出如下提示框:


华为手机应用的设置中权限列表中为“电话”权限
部分手机设备对该权限描述为“拨打电话,管理电话权限”

HBuilderX2.3.8+开始支持配置应用启动时申请获取设备信息权限,支持以下三种策略

  • none
    应用启动时不申请
  • once
    应用第一次启动时申请,用户可以拒绝
  • always
    应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许

    此提示框删的文本可自定义,参考下面的prompt字段

HX3.5.5+版本开始默认策略为none,即应用启动不再主动申请

源码视图配置

打开manifest.json文件,切换到“源码视图”项

  • uni-app项目
    在 "app-plus" -> "distribute" -> "android" 节点下添加 permissionPhoneState 节点
  • 5+ App项目
    在 "plus" -> "distribute" -> "google" 节点下添加 permissionPhoneState 节点

permissionPhoneState节点数据格式如下:

    "permissionPhoneState": {  
        "request": "always",  
        "prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"  
     }
  • request
    字符串类型,必填,申请设备信息权限策略,可取值none、once、always。默认值为once。
  • prompt
    字符串类型,可选,用户拒绝时弹出提示框上的内容。
    默认值为:为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。
    国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
    设置自定义键名称为“dcloud_permission_read_phone_state_message”。

保存后提交云端打包生效

离线打包提示语配置及弹窗配置。

提示语配置

在主项目的strings.xml中添加如下字段。strings.xml位于 项目目录/src/main/res/values下,如果文件或文件夹不存在,直接新建即可。

存储权限提示语配置

<resources>  
    <string name="dcloud_permission_write_external_storage_message">存储权限提示语</string>  
</resources>  

读取手机状态权限配置

<resources>  
    <string name="dcloud_permission_read_phone_state_message">读取手机状态权限提示语</string>  
</resources>  

弹窗配置

在androidManifest.xml的application节点下添加如下字段。

存储权限弹窗配置

<application>  
<meta-data android:name="DCLOUD_WRITE_EXTERNAL_STORAGE" android:value="once"/>  
</application>  

value可取值为 none、once、always。

读取手机状态弹窗配置

<application>  
<meta-data android:name="DCLOUD_READ_PHONE_STATE" android:value="once"/>  
</application>  

value可取值为 none、once、always。

补充

沟通发现,部分开发者在main.js里面调用了plus.device.getInfo这类方法。

但是其实API操作与permissionExternalStorage设置无关,permissionExternalStorage用于设置应用内部逻辑是否申请访问SD卡权限

开发者是因为在启动的时候调用API触发了权限申请,误以为permissionExternalStorage设置无效(其实设置是生效的)。

其它API操作会根据功能需求来申请权限,比如操作系统相册也会申请访问SDK卡权限、定位操作会申请定位权限等。

Android平台隐私与政策提示框配置方法

收起阅读 »

HbuilderX怎么定位js报错位置

HBuilder X

我使用的是HbuilderX2.3.7 WIndowsapp开发版,使用的时候发现js报错了,但是从报错信息上根本不知道哪个文件哪行报错了?怎么解决

我使用的是HbuilderX2.3.7 WIndowsapp开发版,使用的时候发现js报错了,但是从报错信息上根本不知道哪个文件哪行报错了?怎么解决

H5+小程序小项目找外包,坐标深圳,有意详谈,仅限深圳市

有个小项目外包,需要对VUE和UNIAPP熟悉一点,H5+小程序,分期开发,坐标深圳,有熟手联系
我是做后端的,前端这块只会简单的VUE,设计图和接口文档等环境已搭好
价格详谈分期计算,2283782927可Q

有个小项目外包,需要对VUE和UNIAPP熟悉一点,H5+小程序,分期开发,坐标深圳,有熟手联系
我是做后端的,前端这块只会简单的VUE,设计图和接口文档等环境已搭好
价格详谈分期计算,2283782927可Q

我写了一个音视频聊天的组件,后续准备接入直播,想问下有多少人需求这个

nvue

https://ext.dcloud.net.cn/plugin?id=824 这个是插件地址,如果有人项目中使用或者打算后续项目中用这个,请联系我,qq:1053316540 我好根据你们需求进行插件升级,如果没有市场,这个插件升级功能就会推迟很多了

https://ext.dcloud.net.cn/plugin?id=824 这个是插件地址,如果有人项目中使用或者打算后续项目中用这个,请联系我,qq:1053316540 我好根据你们需求进行插件升级,如果没有市场,这个插件升级功能就会推迟很多了