意见反馈:左侧项目管理器里面的文档列表,能否按修改时间排序?
目前文档列表是按文件名来排序的,找文件不是那么方便,如果能按文件修改时间由近到远来排序就方便多了
目前文档列表是按文件名来排序的,找文件不是那么方便,如果能按文件修改时间由近到远来排序就方便多了
【全球架构师峰会 干货分享】大数据在金融风控中如何应用?
作者:个推高级数据工程师 晓骏
众所周知,金融是数据化程度最高的行业之一,也是人工智能和大数据技术重要的应用领域。随着大数据收集、存储、分析和模型技术日益成熟,大数据技术逐渐应用到金融风控的各个环节。个推作为专业的数据智能服务商,拥有海量数据资源,在智慧金融领域也推出了相应的数据解决方案,为金融客户提供智能反欺诈、多维信贷风险评估和高意愿用户智能筛选等全流程的数据服务,助力各金融机构全面提升风控能力。本文将围绕大数据风控,结合个推实践,介绍金融风控机器学习的基本流程、算法实践和产品化建设等内容。
风控流程 & 多维度特征
大数据风控的内容
数据是风控的核心要素,大数据风控实际上就是对数据的处理、建模和应用的过程。大数据风控的流程主要分为四个阶段:数据获取、数据分析、数据建模、风控产品应用。对获取到的海量数据进行清洗和挖掘,有针对性地对金融特征进行深加工;接着通过规则策略和模型算法的构建,对外输出相应的风控服务。
个推以消息推送服务起家,为数十万APP提供高效稳定的推送服务,并沉淀了丰富的数据资源,覆盖超过40亿终端设备,数据全面、广泛且有深度。利用设备基础信息、线上APP偏好数据、线下场景数据以及外部补充数据,个推构建了8个维度、350+特征,同时对特征进行动态更新。基本属性、资产、金融、行为偏好、社会属性、消费偏好、风险和稳定性构成了个推金融数据的八大维度;个推利用数据的八大维度,逾350种特征进行模型构建,并将其应用于金融风控各环节。
金融风控机器学习的基本流程
整个风控建模流程,在个推大数据平台上完成。首先,对持续更新的海量一手数据进行收集、清洗、存储,在数据存储前进行ID打通;第二步,对清洗好的原数据进行特征构建;最后,利用多维度特征进行金融风控模型构建,用到的技术包括协同推荐算法、LR算法、XGBoost、营销模型、多头模型和信用分模型等。
建模流程
如何高效构建特征,是风控建模中一个至关重要的问题。在实践中,个推会对特征进行稳定性分析、脏数据/异常数据处理、特征分箱、特征聚合和特征有效性验证。特征评估指标则包括IV值、Gain值、单调性、稳定性和饱和度等。
风控场景机器学习的算法实践
利用上述多维度特征和建模能力,增能于贷前、贷中和贷后全流程:拉、选、评、管、催五大环节。
全流程数据增能
拉-营销模型,甄别虚假注册,评估借贷意愿
在拉新获客阶段,个推制定贴合大额、小额两种营销场景需求的营销模型,通过规则策略、模型策略、风控策略三管齐下,帮助客户识别“真人”,有效降低获客成本、提升注册率和转化率。客户可通过提供样本数据,通过个推来完成建模,同时,在缺乏样本数据的情况下,个推依托自身积累的海量样本数据,可以构建出多种营销场景下的通用模型,供客户使用。
选-贷前的审核,识别欺诈人群,防范恶意骗贷
贷前审核阶段我们通常采取两个策略:欺诈分模型、风险人群筛选。欺诈分模型指的是根据客户提供的数据信息在个推平台进行数据转换、特征匹配,并对其风险特征予以筛选,利用预设规则予以打分,最后得出相应的欺诈分。个推在逾350种特征中识别出数几十种风险特征。举例来说,当某用户安装小贷类APP达到多款以上,或线下到访场景异常,或该用户命中黑名单都会被识别为风险特征。根据欺诈分的高低予以排序,为客户列出不准入人员、需重点关注人员等。
风险人群筛选指的是根据用户存在的风险特征数量及程度,梳理出风险人员。个推利用筛选出的8种维度、350+特征,通过模型预测和规则制定,输出三类风险人群:黑名单、灰名单、多头名单。多头名单顾名思义,当某用户频繁安装或卸载多款借贷类APP时则会被模型系统判定为多头人员;灰名单指的是稳定性较差的人员,黑名单指的是异常人员。在贷前审核阶段,黑名单人员可直接不予以准入,灰名单和多头人员则需要重点关注。
评-信用分模型,贷前信用评估,辅助贷款定额
在评的阶段,个推采用信用分模型,为客户输出用户的信用评分。信用评分由五种维度构建而成:资产、身份、稳定性、关系、行为。个推信用评分模型先根据模型训练与规则模型,得到各个维度分,再将五个维度的个人评分作为特征输入模型,作为特征得到总体个人信用分。
信用分模型由多个模型整合而成,第一层是分类模型(lr+xgboost),得到分值;第二层在维度分的基础上再进行回归,得到最终信用评分。
管-贷中管控,监测异常特征,实现风险预警
在管的环节,个推采用贷中监测模型。从整体人群筛选出逾期相似(相关)人群,结合实时数据与高危特征异常监测得到高疑用户,结合客户的实际需求,对此类用户通过进一步的精准研判得到逾期风险人员,将此类人员告知客户,让其予以重点关注或排查。
催-贷后催管,催回价值评估,提高催回效率
在催的环节,个推基于自身构建的催回评分系统,可以有效指导金融机构制定差异化催管策略,助力更高效地完成催收工作。比如,当客户出现逾期和坏账时,金融机构通过个推的催回评分,对用户的还款能力和还款意愿进行评估,从而判断哪些用户优先催。
风控系统产品化
前面几个流程主要讲的是个推利用多维度特征自主构建风控模型,但在很多业务场景客户希望快速构建特征、快速返回风控结果。为此,我们研发上线个真决策引擎,在规则设计层为客户提供风控规则,让业务人员在规则执行层通过规则性加工进行灵活操作,目前已提供给部分客户试用。
风控决策引擎
如今,科技与金融深度交融的时代已经到来,金融风险控制任重而道远,。个推将持续挖掘其丰富的数据资产,不断打磨自身技术,助力金融行业运作效率和服务能力的全面提升。
(本文所有图片均来源于个推)
更多技术干货,请关注公众号:个推技术学院。
作者:个推高级数据工程师 晓骏
众所周知,金融是数据化程度最高的行业之一,也是人工智能和大数据技术重要的应用领域。随着大数据收集、存储、分析和模型技术日益成熟,大数据技术逐渐应用到金融风控的各个环节。个推作为专业的数据智能服务商,拥有海量数据资源,在智慧金融领域也推出了相应的数据解决方案,为金融客户提供智能反欺诈、多维信贷风险评估和高意愿用户智能筛选等全流程的数据服务,助力各金融机构全面提升风控能力。本文将围绕大数据风控,结合个推实践,介绍金融风控机器学习的基本流程、算法实践和产品化建设等内容。
风控流程 & 多维度特征
大数据风控的内容
数据是风控的核心要素,大数据风控实际上就是对数据的处理、建模和应用的过程。大数据风控的流程主要分为四个阶段:数据获取、数据分析、数据建模、风控产品应用。对获取到的海量数据进行清洗和挖掘,有针对性地对金融特征进行深加工;接着通过规则策略和模型算法的构建,对外输出相应的风控服务。
个推以消息推送服务起家,为数十万APP提供高效稳定的推送服务,并沉淀了丰富的数据资源,覆盖超过40亿终端设备,数据全面、广泛且有深度。利用设备基础信息、线上APP偏好数据、线下场景数据以及外部补充数据,个推构建了8个维度、350+特征,同时对特征进行动态更新。基本属性、资产、金融、行为偏好、社会属性、消费偏好、风险和稳定性构成了个推金融数据的八大维度;个推利用数据的八大维度,逾350种特征进行模型构建,并将其应用于金融风控各环节。
金融风控机器学习的基本流程
整个风控建模流程,在个推大数据平台上完成。首先,对持续更新的海量一手数据进行收集、清洗、存储,在数据存储前进行ID打通;第二步,对清洗好的原数据进行特征构建;最后,利用多维度特征进行金融风控模型构建,用到的技术包括协同推荐算法、LR算法、XGBoost、营销模型、多头模型和信用分模型等。
建模流程
如何高效构建特征,是风控建模中一个至关重要的问题。在实践中,个推会对特征进行稳定性分析、脏数据/异常数据处理、特征分箱、特征聚合和特征有效性验证。特征评估指标则包括IV值、Gain值、单调性、稳定性和饱和度等。
风控场景机器学习的算法实践
利用上述多维度特征和建模能力,增能于贷前、贷中和贷后全流程:拉、选、评、管、催五大环节。
全流程数据增能
拉-营销模型,甄别虚假注册,评估借贷意愿
在拉新获客阶段,个推制定贴合大额、小额两种营销场景需求的营销模型,通过规则策略、模型策略、风控策略三管齐下,帮助客户识别“真人”,有效降低获客成本、提升注册率和转化率。客户可通过提供样本数据,通过个推来完成建模,同时,在缺乏样本数据的情况下,个推依托自身积累的海量样本数据,可以构建出多种营销场景下的通用模型,供客户使用。
选-贷前的审核,识别欺诈人群,防范恶意骗贷
贷前审核阶段我们通常采取两个策略:欺诈分模型、风险人群筛选。欺诈分模型指的是根据客户提供的数据信息在个推平台进行数据转换、特征匹配,并对其风险特征予以筛选,利用预设规则予以打分,最后得出相应的欺诈分。个推在逾350种特征中识别出数几十种风险特征。举例来说,当某用户安装小贷类APP达到多款以上,或线下到访场景异常,或该用户命中黑名单都会被识别为风险特征。根据欺诈分的高低予以排序,为客户列出不准入人员、需重点关注人员等。
风险人群筛选指的是根据用户存在的风险特征数量及程度,梳理出风险人员。个推利用筛选出的8种维度、350+特征,通过模型预测和规则制定,输出三类风险人群:黑名单、灰名单、多头名单。多头名单顾名思义,当某用户频繁安装或卸载多款借贷类APP时则会被模型系统判定为多头人员;灰名单指的是稳定性较差的人员,黑名单指的是异常人员。在贷前审核阶段,黑名单人员可直接不予以准入,灰名单和多头人员则需要重点关注。
评-信用分模型,贷前信用评估,辅助贷款定额
在评的阶段,个推采用信用分模型,为客户输出用户的信用评分。信用评分由五种维度构建而成:资产、身份、稳定性、关系、行为。个推信用评分模型先根据模型训练与规则模型,得到各个维度分,再将五个维度的个人评分作为特征输入模型,作为特征得到总体个人信用分。
信用分模型由多个模型整合而成,第一层是分类模型(lr+xgboost),得到分值;第二层在维度分的基础上再进行回归,得到最终信用评分。
管-贷中管控,监测异常特征,实现风险预警
在管的环节,个推采用贷中监测模型。从整体人群筛选出逾期相似(相关)人群,结合实时数据与高危特征异常监测得到高疑用户,结合客户的实际需求,对此类用户通过进一步的精准研判得到逾期风险人员,将此类人员告知客户,让其予以重点关注或排查。
催-贷后催管,催回价值评估,提高催回效率
在催的环节,个推基于自身构建的催回评分系统,可以有效指导金融机构制定差异化催管策略,助力更高效地完成催收工作。比如,当客户出现逾期和坏账时,金融机构通过个推的催回评分,对用户的还款能力和还款意愿进行评估,从而判断哪些用户优先催。
风控系统产品化
前面几个流程主要讲的是个推利用多维度特征自主构建风控模型,但在很多业务场景客户希望快速构建特征、快速返回风控结果。为此,我们研发上线个真决策引擎,在规则设计层为客户提供风控规则,让业务人员在规则执行层通过规则性加工进行灵活操作,目前已提供给部分客户试用。
风控决策引擎
如今,科技与金融深度交融的时代已经到来,金融风险控制任重而道远,。个推将持续挖掘其丰富的数据资产,不断打磨自身技术,助力金融行业运作效率和服务能力的全面提升。
(本文所有图片均来源于个推)
更多技术干货,请关注公众号:个推技术学院。
收起阅读 »
nvue使用vuex的解决方案
在main.js中挂载Vuex
但是在nvue页面无法使用this.$store.state.xxx
于是找文档看评论说都无法解决,没办法只好自己想办法解决了
下面提供两种方式:
方式一:
1.通过globalData建立公用变量 不懂的移步文档地址
- 把vuex挂在globalData
- nvuex操作更改挂载在globalData的vuex变量 getApp().globalData.vuex 操作就行
注:此方法是我现在在用的
方式二:
1.通过 onUniNViewMessage 去监听nvue页面发送的消息 再去操作store 文档地址
2.在nvue页面中通过postMessage发送数据
没有测试过,但是理论上是没有问题的。大家可以测试下
在main.js中挂载Vuex
但是在nvue页面无法使用this.$store.state.xxx
于是找文档看评论说都无法解决,没办法只好自己想办法解决了
下面提供两种方式:
方式一:
1.通过globalData建立公用变量 不懂的移步文档地址
- 把vuex挂在globalData
- nvuex操作更改挂载在globalData的vuex变量 getApp().globalData.vuex 操作就行
注:此方法是我现在在用的
方式二:
1.通过 onUniNViewMessage 去监听nvue页面发送的消息 再去操作store 文档地址
2.在nvue页面中通过postMessage发送数据
没有测试过,但是理论上是没有问题的。大家可以测试下
收起阅读 »使用 editor 组件导出的 html
在 uni-app 中使用
在 editor 组件显示
使用EditorContext.setContents接口设置内容即可
在 rich-text 组件显示
设置 nodes 属性值为 editor 组件导出的 html 即可,若想和 editor 组件样式保持一致可以需要给 rich-text 组件和其父级组件设置对应的 class,如:
<view class="ql-container">
<rich-text class="ql-editor" :nodes="html"></rich-text>
</view>
使用插件解析 html(以 u-parse 为例)
- 下载此 css
- 将里面的标签名改为类名,如
.ql-container img
改为.ql-container .img
- 在页面中引入修改后的css
- 标签结构如下
<view class="ql-container"> <u-parse class="ql-editor" :content="article" @preview="preview" @navigate="navigate" ></u-parse> </view>
在 web 页面中使用
- 在 html 页面中引入此 css
- 将 editor 组件导出的 html 内容放入如下标签结构中
<div class="ql-container"> <div class="ql-editor" > editor 组件导出的 html <div/> <div/>
在 uni-app 中使用
在 editor 组件显示
使用EditorContext.setContents接口设置内容即可
在 rich-text 组件显示
设置 nodes 属性值为 editor 组件导出的 html 即可,若想和 editor 组件样式保持一致可以需要给 rich-text 组件和其父级组件设置对应的 class,如:
<view class="ql-container">
<rich-text class="ql-editor" :nodes="html"></rich-text>
</view>
使用插件解析 html(以 u-parse 为例)
- 下载此 css
- 将里面的标签名改为类名,如
.ql-container img
改为.ql-container .img
- 在页面中引入修改后的css
- 标签结构如下
<view class="ql-container"> <u-parse class="ql-editor" :content="article" @preview="preview" @navigate="navigate" ></u-parse> </view>
在 web 页面中使用
- 在 html 页面中引入此 css
- 将 editor 组件导出的 html 内容放入如下标签结构中
<div class="ql-container"> <div class="ql-editor" > editor 组件导出的 html <div/> <div/>
Android Studio离线打包(版本更新后配置)
HBuilderX版本更新后,Android Studio 离线打包的配置:
1. 下载官方5+SDK最新版
2. 解压缩到本地
3. 打开文件夹,找到目录下这5个文件
4. 替换原有目录下对应文件
5. 修改dcloud_control.xml中的内容
6. 找到解压缩后 /HBuilder-hello/app/lib 目录下的jar/arr包
7. 替换原有目录/app/libs 下的jar/arr包 注意: 如果项目引入第三方插件,注意替换时,应保留这些插件对应的jar/arr包
8. 找到解压缩后 /HBuilder-hello/app/src/main 目录下的AndroidManifest.xml文件
9. 用编辑器打开后 搜索provider 找到provider标签
10. 与原有项目下的AndroidManifest.xml文件中的 provider标签 进行对比替换即可。
至此,项目更新完成,可以愉快的进行Android离线打包了……
HBuilderX版本更新后,Android Studio 离线打包的配置:
1. 下载官方5+SDK最新版
2. 解压缩到本地
3. 打开文件夹,找到目录下这5个文件
4. 替换原有目录下对应文件
5. 修改dcloud_control.xml中的内容
6. 找到解压缩后 /HBuilder-hello/app/lib 目录下的jar/arr包
7. 替换原有目录/app/libs 下的jar/arr包 注意: 如果项目引入第三方插件,注意替换时,应保留这些插件对应的jar/arr包
8. 找到解压缩后 /HBuilder-hello/app/src/main 目录下的AndroidManifest.xml文件
9. 用编辑器打开后 搜索provider 找到provider标签
10. 与原有项目下的AndroidManifest.xml文件中的 provider标签 进行对比替换即可。
至此,项目更新完成,可以愉快的进行Android离线打包了……
收起阅读 »Linux开发uni-app (deepin 上,ubuntu 同理)
此方案可以在Linux上开发uniapp 但是限制是不能打包APP打包APP还是得在HbuilderX上进行
安装 微信开发者工具
两种安装方式
1、deepin 应用商店 一键安装。(deepin 系统 推荐)
2、安装 wine 并且 安装 wechat_web_devtools
安装uni-app框架
// 1. 全局安装vue-cli
npm install -g @vue/cli
// 2. 创建uni-app
ue create -p dcloudio/uni-preset-vue my-project
// 3. 选择需要创建的模板类型 跟 HbuilderX 上差不多
// 4. 进入目录,运行项目
// 4.1 运行至 H5
npm run dev:h5
// 4.1 运行至 微信小程序
npm run dev:mp-weixin
// 5. 打包时 将dev换成build即可。
如果用的deepin 一键安装,在应用列表即可找到快捷方式 打开 微信开发者工具。
如果是安装 wechat_web_devtools 则在安装目录下的 bin文件夹 下的 wxdt 直接运行。(记得按照文档上install)
这里有个bug 导入文件时不能选择文件夹 查了很多资料发现在 1811290 版本的时候是可以用的 新的版本不行。
解决方案:先新建项目 选好文件夹 填好项目名称,然后直接切换到 导入项目一栏 即可。
附件:运行截图
此方案可以在Linux上开发uniapp 但是限制是不能打包APP打包APP还是得在HbuilderX上进行
安装 微信开发者工具
两种安装方式
1、deepin 应用商店 一键安装。(deepin 系统 推荐)
2、安装 wine 并且 安装 wechat_web_devtools
安装uni-app框架
// 1. 全局安装vue-cli
npm install -g @vue/cli
// 2. 创建uni-app
ue create -p dcloudio/uni-preset-vue my-project
// 3. 选择需要创建的模板类型 跟 HbuilderX 上差不多
// 4. 进入目录,运行项目
// 4.1 运行至 H5
npm run dev:h5
// 4.1 运行至 微信小程序
npm run dev:mp-weixin
// 5. 打包时 将dev换成build即可。
如果用的deepin 一键安装,在应用列表即可找到快捷方式 打开 微信开发者工具。
如果是安装 wechat_web_devtools 则在安装目录下的 bin文件夹 下的 wxdt 直接运行。(记得按照文档上install)
这里有个bug 导入文件时不能选择文件夹 查了很多资料发现在 1811290 版本的时候是可以用的 新的版本不行。
解决方案:先新建项目 选好文件夹 填好项目名称,然后直接切换到 导入项目一栏 即可。
附件:运行截图
收起阅读 »适配Android10+设备注意事项
名词介绍: Android 10+ 表示android系统版本大于等于10 既包括android 10以及android 11的系统统称
Android 10+ 概述
Android 10系统开始 进一步增强了平台功能,为外部存储设备上的应用和用户数据提供了更好的保护。作为这项工作的一部分,平台引入了进一步的改进,以简化向分区存储的转换。
为了让用户更好地控制自己的文件,保护用户隐私数据,并限制文件混乱情况,Android 11在分区存储基础上限制了应用访问其他应用的文件。
<a id="io"/>
分区存储
先说一下为什么会有分区存储
这个机制出现。
在分区存储之前,某些应用中,即使功能很简单,大部分都不需要这么宽泛的权限。
这就使得某些应用程序
1、乱占空间 :各种各样的文件散布在磁盘的各个地方,当用户卸载应用之后,这些被遗弃的文件被滞留在原地,无人管理,占用了磁盘空间,最终结果就会导致磁盘不足
2、随意读取用户的数据
3、随意读取应用的数据
因此分区存储
诞生了,限制了过于宽泛的 存储权限。
什么是分区存储
?
Google针对外部存储引入了一个新特性,它的名字叫:Scoped Storage,Google官方对它的翻译为分区存储,我们也可以把它叫做沙盒存储。
更明确了空间的归属,也就是对目录有一个更明确的所有权结构。
分区存储是一种安全机制,用于防止应用读取其他应用的数据。
- 每个应用程序都有自己的存储空间。
- 应用程序不能翻过自己的目录,去访问公共目录。
- 应用程序请求的数据都要通过权限检测,不符合要求不会被放行。
分区存储机制下uni-app/5+ 开发者的影响
android 9及以下系统未做分区存储,除其他应用的内部存储空间不可以读写,其他任意存储目录下的资源文件都可以正常读写操作。
android 10仅对targetSdkVersion>=29则会开启分区存储。targetSdkVersion小于29则不会有任何限制与android9及以下同理。
andorid 11强制执行分区存储。不允许应用读写操作非应用沙盒目录和系统公共目录下的资源文件。
dcloud已对分区存储机制做了适配工作。但也增加了开发者对文件目录操作的规则。在分区存储的环境下分出两个可操文件数据目录系统公共目录
和应用沙盒目录
.
系统公共目录:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones等
- 公共目录的文件在App卸载后,不会删除
- 通过plus.gallery.pick获取
- 拥有权限,也能通过路径直接访问
公共目录对照表:
- Downloads 对应的绝对路径
file:///storage/emulated/0/Download
- Documents 对应的绝对路径
file:///storage/emulated/0/Documents
- Pictures 对应的绝对路径
file:///storage/emulated/0/Pictures
- DCIM 对应的绝对路径
file:///storage/emulated/0/DCIM
- Movies 对应的绝对路径
file:///storage/emulated/0/Movies
- Music 对应的绝对路径
file:///storage/emulated/0/Music
- Ringtones 对应的绝对路径
file:///storage/emulated/0/Ringtones
系统公共目录
缺陷:
系统公共目录
仅支持读取媒体文件 如:音频文件、视频文件、图片文件。其他类型文件不支持!!!!系统公共目录
下创建的文件是公用的,你需要确保你的文件命名是惟一的。否则会出现名称对应不上的问题。多数重命名会文件名尾部(i++)处理系统公共目录
不可随意删减。该文件谁创建的谁才有权限删除修改。如果不是当前应用创建的文件是无权权限删改的。系统公共目录
删减文件会被系统认为恶意操作。将会弹通知栏。告诫手机用户当前XXX应用删除了什么文件。
系统公共目录
地址的获取来源是哪里:
这里多数是通过plus.gallery.pick获取到的媒体文件。如图片视频等。多数是DCIM、Pictures、Movies等。其他Ringtones、Documents仅提供绝对路径让开发者对比,实际业务中可能并不会获取到相关路径目录的。
目前业务逻辑会用到系统公共目录
多数为分享。需要将图片等资源拷贝到系统公共目录
下。别的三方应用才有权读取该文件。进行操作业务逻辑。
应用沙盒目录(应用专属目录)
- 应用沙盒目录只能自己直接访问
- App卸载,数据会清除。
应用沙盒目录分为:
-
内部存储空间目录
-
plus.io.PRIVATE_WWW 对应绝对路径
file:///data/user/0/%PACKAGENAME%/files/apps/%APPID%/www
-
plus.io.PRIVATE_DOC 对应绝对路径
file:///data/user/0/%PACKAGENAME%/files/apps/%APPID%/doc
-
-
外部存储空间目录
-
plus.io.PUBLIC_DOCUMENTS 对应绝对路径
file:///storage/emulated/0/Android/data/%PACKAGENAME%/.%APPID%/documents
-
plus.io.PUBLIC_DOWNLOADS 对应绝对路径
file:///storage/emulated/0/Android/data/%PACKAGENAME%/.%APPID%/downloads
-
具体请参考文档
以下是针对分区存储
机制作出文件操作目录限制的5+API:
- plus.io中的getAudioInfo、getVideoInfo、getFileInfo、getImageInfo仅支持应用沙盒目录和系统公共目录
- plus.io中的DirectoryEntry对象的removeRecursively、getDirectory、getFile、remove、copyTo、moveTo仅支持应用沙盒目录
- plus.io中的DirectoryEntry对象的getMetadata 、getParent仅支持应用沙盒目录和系统公共目录
- DirectoryReader.readEntries仅支持应用沙盒目录和系统功能目录
- FileWriter.write、FileWriter.truncate、FileReader.readAsText仅支持应用沙盒目录
- plus.camera.CameraOptions中的filename仅支持应用沙盒目录。
- plus.gallery.save中的path仅支持应用沙盒目录。
- plus.zip.compress中的src、zipfile仅支持应用沙盒目录。
- plus.zip.decompress中的zipfile、target仅支持应用沙盒目录。
- plus.zip.CompressImageOptions中的dst仅支持应用沙盒目录、src仅支持应用沙盒目录和系统公共目录。
- plus.map相关的plus.maps.Marker.setIcon、setIcons、plus.maps.Bubble.setIcon图片地址仅支持应用沙盒目录。
- plus.nativeObj.Bitmap.save中的path 仅支持应用沙盒目录。
- plus.video.VideoPlayerStyles中的src仅支持应用沙盒目录和系统公共目录。
- plus.nativeUI.toast自定义ToastStyles后android11设备不支持应用进入后台弹出toast显示。
以上API设置了不支持的目录部分会返回code =15的错误信息!,部分会返回执行失败的错误回调具体以API为准!
建议
可预见的未来android系统的更新将会对存储数据操作更加严格。推荐广大开发者文件数据操作都在应用本身的沙盒目录下完成。减少未来不必要的适配工作。相对的你的应用也会更加安全可靠。
扩展问题:
Q:分区存储
我的应用那些需要改动?
A: 目前应用多数与文件操作数据都已适配。用户只需关注部分API操作的文件路径是否符合目录限制规则。非应用沙盒目录
或非系统公共目录
请及时修改或增加判断调整业务逻辑。
Q:我是不是只要targetSdkVersion不设置>=29就可以了?
A: 不是在android11的设备已经强制开启分区存储
机制。您必须做出适配。否则在android11的设备上无法正常运行。
Q:我是不是可以将所以之前应用的特殊文件都放入到系统公共目录
下不就行了。之后也可以随意操作不需要非要在应用沙盒目录
操作文件呀。
A: 首先不推荐这样操作的。这样会导致功系统公共目录
下的文件激增导致多应用做操出现的文件名称冲突等问题。`系统公共目录还有个明显缺陷就是不可以随意删除、修改。都会被系统判断为恶意删减或无权限修改。造成业务逻辑错误。
设备位置
推出新的用户选项;只有在前台使用您的应用时,该选项才允许访问设备位置信息。
Android 10开始中如果应用需要在后台时也获得用户位置,则需要申请后台定位权限,uni-app/5+应用会默认申请该权限,其表现为:
targetSdkVersion>=29,用户同意定位权限后,再次弹窗申请后台定位权限。
targetSdkVersion<29,申请定位权限弹窗中会增加“始终允许”选项。
后台应用启动
针对在没有用户互动的情况下从后台启动活动的新限制。
硬件标识符
对设备硬件标识符(如 IMEI、序列号、MAC 和类似数据)访问权限的新限制。
为保护用户隐私,Android 10开始将不会开放众多可以确定设备的唯一标识。因此Android 10+设备中plus.device.getInfo返回的imei、uuid将会为空。
摄像头和连接性
针对完整摄像头元数据的访问权限实施了新限制,并且现在许多连接工作流都需要精确位置权限。
Android 10+新特性官方说明:https://developer.android.google.cn/preview/privacy
名词介绍: Android 10+ 表示android系统版本大于等于10 既包括android 10以及android 11的系统统称
Android 10+ 概述
Android 10系统开始 进一步增强了平台功能,为外部存储设备上的应用和用户数据提供了更好的保护。作为这项工作的一部分,平台引入了进一步的改进,以简化向分区存储的转换。
为了让用户更好地控制自己的文件,保护用户隐私数据,并限制文件混乱情况,Android 11在分区存储基础上限制了应用访问其他应用的文件。
<a id="io"/>
分区存储
先说一下为什么会有分区存储
这个机制出现。
在分区存储之前,某些应用中,即使功能很简单,大部分都不需要这么宽泛的权限。
这就使得某些应用程序
1、乱占空间 :各种各样的文件散布在磁盘的各个地方,当用户卸载应用之后,这些被遗弃的文件被滞留在原地,无人管理,占用了磁盘空间,最终结果就会导致磁盘不足
2、随意读取用户的数据
3、随意读取应用的数据
因此分区存储
诞生了,限制了过于宽泛的 存储权限。
什么是分区存储
?
Google针对外部存储引入了一个新特性,它的名字叫:Scoped Storage,Google官方对它的翻译为分区存储,我们也可以把它叫做沙盒存储。
更明确了空间的归属,也就是对目录有一个更明确的所有权结构。
分区存储是一种安全机制,用于防止应用读取其他应用的数据。
- 每个应用程序都有自己的存储空间。
- 应用程序不能翻过自己的目录,去访问公共目录。
- 应用程序请求的数据都要通过权限检测,不符合要求不会被放行。
分区存储机制下uni-app/5+ 开发者的影响
android 9及以下系统未做分区存储,除其他应用的内部存储空间不可以读写,其他任意存储目录下的资源文件都可以正常读写操作。
android 10仅对targetSdkVersion>=29则会开启分区存储。targetSdkVersion小于29则不会有任何限制与android9及以下同理。
andorid 11强制执行分区存储。不允许应用读写操作非应用沙盒目录和系统公共目录下的资源文件。
dcloud已对分区存储机制做了适配工作。但也增加了开发者对文件目录操作的规则。在分区存储的环境下分出两个可操文件数据目录系统公共目录
和应用沙盒目录
.
系统公共目录:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones等
- 公共目录的文件在App卸载后,不会删除
- 通过plus.gallery.pick获取
- 拥有权限,也能通过路径直接访问
公共目录对照表:
- Downloads 对应的绝对路径
file:///storage/emulated/0/Download
- Documents 对应的绝对路径
file:///storage/emulated/0/Documents
- Pictures 对应的绝对路径
file:///storage/emulated/0/Pictures
- DCIM 对应的绝对路径
file:///storage/emulated/0/DCIM
- Movies 对应的绝对路径
file:///storage/emulated/0/Movies
- Music 对应的绝对路径
file:///storage/emulated/0/Music
- Ringtones 对应的绝对路径
file:///storage/emulated/0/Ringtones
系统公共目录
缺陷:
系统公共目录
仅支持读取媒体文件 如:音频文件、视频文件、图片文件。其他类型文件不支持!!!!系统公共目录
下创建的文件是公用的,你需要确保你的文件命名是惟一的。否则会出现名称对应不上的问题。多数重命名会文件名尾部(i++)处理系统公共目录
不可随意删减。该文件谁创建的谁才有权限删除修改。如果不是当前应用创建的文件是无权权限删改的。系统公共目录
删减文件会被系统认为恶意操作。将会弹通知栏。告诫手机用户当前XXX应用删除了什么文件。
系统公共目录
地址的获取来源是哪里:
这里多数是通过plus.gallery.pick获取到的媒体文件。如图片视频等。多数是DCIM、Pictures、Movies等。其他Ringtones、Documents仅提供绝对路径让开发者对比,实际业务中可能并不会获取到相关路径目录的。
目前业务逻辑会用到系统公共目录
多数为分享。需要将图片等资源拷贝到系统公共目录
下。别的三方应用才有权读取该文件。进行操作业务逻辑。
应用沙盒目录(应用专属目录)
- 应用沙盒目录只能自己直接访问
- App卸载,数据会清除。
应用沙盒目录分为:
-
内部存储空间目录
-
plus.io.PRIVATE_WWW 对应绝对路径
file:///data/user/0/%PACKAGENAME%/files/apps/%APPID%/www
-
plus.io.PRIVATE_DOC 对应绝对路径
file:///data/user/0/%PACKAGENAME%/files/apps/%APPID%/doc
-
-
外部存储空间目录
-
plus.io.PUBLIC_DOCUMENTS 对应绝对路径
file:///storage/emulated/0/Android/data/%PACKAGENAME%/.%APPID%/documents
-
plus.io.PUBLIC_DOWNLOADS 对应绝对路径
file:///storage/emulated/0/Android/data/%PACKAGENAME%/.%APPID%/downloads
-
具体请参考文档
以下是针对分区存储
机制作出文件操作目录限制的5+API:
- plus.io中的getAudioInfo、getVideoInfo、getFileInfo、getImageInfo仅支持应用沙盒目录和系统公共目录
- plus.io中的DirectoryEntry对象的removeRecursively、getDirectory、getFile、remove、copyTo、moveTo仅支持应用沙盒目录
- plus.io中的DirectoryEntry对象的getMetadata 、getParent仅支持应用沙盒目录和系统公共目录
- DirectoryReader.readEntries仅支持应用沙盒目录和系统功能目录
- FileWriter.write、FileWriter.truncate、FileReader.readAsText仅支持应用沙盒目录
- plus.camera.CameraOptions中的filename仅支持应用沙盒目录。
- plus.gallery.save中的path仅支持应用沙盒目录。
- plus.zip.compress中的src、zipfile仅支持应用沙盒目录。
- plus.zip.decompress中的zipfile、target仅支持应用沙盒目录。
- plus.zip.CompressImageOptions中的dst仅支持应用沙盒目录、src仅支持应用沙盒目录和系统公共目录。
- plus.map相关的plus.maps.Marker.setIcon、setIcons、plus.maps.Bubble.setIcon图片地址仅支持应用沙盒目录。
- plus.nativeObj.Bitmap.save中的path 仅支持应用沙盒目录。
- plus.video.VideoPlayerStyles中的src仅支持应用沙盒目录和系统公共目录。
- plus.nativeUI.toast自定义ToastStyles后android11设备不支持应用进入后台弹出toast显示。
以上API设置了不支持的目录部分会返回code =15的错误信息!,部分会返回执行失败的错误回调具体以API为准!
建议
可预见的未来android系统的更新将会对存储数据操作更加严格。推荐广大开发者文件数据操作都在应用本身的沙盒目录下完成。减少未来不必要的适配工作。相对的你的应用也会更加安全可靠。
扩展问题:
Q:分区存储
我的应用那些需要改动?
A: 目前应用多数与文件操作数据都已适配。用户只需关注部分API操作的文件路径是否符合目录限制规则。非应用沙盒目录
或非系统公共目录
请及时修改或增加判断调整业务逻辑。
Q:我是不是只要targetSdkVersion不设置>=29就可以了?
A: 不是在android11的设备已经强制开启分区存储
机制。您必须做出适配。否则在android11的设备上无法正常运行。
Q:我是不是可以将所以之前应用的特殊文件都放入到系统公共目录
下不就行了。之后也可以随意操作不需要非要在应用沙盒目录
操作文件呀。
A: 首先不推荐这样操作的。这样会导致功系统公共目录
下的文件激增导致多应用做操出现的文件名称冲突等问题。`系统公共目录还有个明显缺陷就是不可以随意删除、修改。都会被系统判断为恶意删减或无权限修改。造成业务逻辑错误。
设备位置
推出新的用户选项;只有在前台使用您的应用时,该选项才允许访问设备位置信息。
Android 10开始中如果应用需要在后台时也获得用户位置,则需要申请后台定位权限,uni-app/5+应用会默认申请该权限,其表现为:
targetSdkVersion>=29,用户同意定位权限后,再次弹窗申请后台定位权限。
targetSdkVersion<29,申请定位权限弹窗中会增加“始终允许”选项。
后台应用启动
针对在没有用户互动的情况下从后台启动活动的新限制。
硬件标识符
对设备硬件标识符(如 IMEI、序列号、MAC 和类似数据)访问权限的新限制。
为保护用户隐私,Android 10开始将不会开放众多可以确定设备的唯一标识。因此Android 10+设备中plus.device.getInfo返回的imei、uuid将会为空。
摄像头和连接性
针对完整摄像头元数据的访问权限实施了新限制,并且现在许多连接工作流都需要精确位置权限。
Android 10+新特性官方说明:https://developer.android.google.cn/preview/privacy
收起阅读 »