HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

全局搜索了个uni.requireNativePlugin,直接吧Hbuilder卡死,重启电脑再次打开依然卡死。

卡慢 HBuilderX

全局搜索了个uni.requireNativePlugin,直接吧Hbuilder卡死,重启电脑再次打开依然卡死。
写代码写上一会就特别卡。

全局搜索了个uni.requireNativePlugin,直接吧Hbuilder卡死,重启电脑再次打开依然卡死。
写代码写上一会就特别卡。

2023年11月阿里云版uniCloud故障说明及赔付方案公告

uniCloud

2023年11月份,阿里云版的uniCloud发生了3次故障,DCloud紧急联系阿里云快速治理恢复。

故障后,阿里云内部也及时做了复盘,现将故障原因及改进措施同步如下:

针对此次故障,依据相关SLA协议,DCloud将执行如下赔付方案:

  • 2023年11月,开发者实际消耗阿里云版uniCloud服务费用总额的10%,DCloud以代金券方式返还给开发者
  • DCloud会在1个月内(2024年1月12日之前),支持在购买包月套餐及按量扣费时,使用代金券

DCloud会继续督促阿里云切实提升服务质量,增强安全防控,确保服务的健壮稳定。

继续阅读 »

2023年11月份,阿里云版的uniCloud发生了3次故障,DCloud紧急联系阿里云快速治理恢复。

故障后,阿里云内部也及时做了复盘,现将故障原因及改进措施同步如下:

针对此次故障,依据相关SLA协议,DCloud将执行如下赔付方案:

  • 2023年11月,开发者实际消耗阿里云版uniCloud服务费用总额的10%,DCloud以代金券方式返还给开发者
  • DCloud会在1个月内(2024年1月12日之前),支持在购买包月套餐及按量扣费时,使用代金券

DCloud会继续督促阿里云切实提升服务质量,增强安全防控,确保服务的健壮稳定。

收起阅读 »

【UniAPP X快速上手】如何使用UniAPPX开发一个原生安卓商城

uniapp 教程 uniapp插件 uniapp模板

什么是UniAPP X

uni-app x,是下一代 uni-app,是一个跨平台应用开发引擎。

uni-app x 没有使用js和webview,它基于 uts 语言。在App端,uts在iOS编译为swift、在Android编译为kotlin,完全达到了原生应用的功能、性能。
更重要的是,UniAPP X未来也会支持鸿蒙,这里引用DCloud社区的官方答复
> DCloud有资源第一时间得到鸿蒙无apk手机的上市计划。我们和华为保持着紧密沟通,会把握好节奏,不用担心。大家可以观察一个信号,等微信的鸿蒙next版敲定了,鸿蒙无apk手机就可以明确上市计划了。鸿蒙的开发语言是arkTS,uni-app x是uts,都是变种ts,uni-app x编译到鸿蒙是靠谱的。
而把uni-app的js编译成arkTS不靠谱。除非编个h5跑在鸿蒙的webview里,但这个体验估计没多少人能接受。

如何学习UniAPP X

1. 学习官方文档

这里的重点和难点应该是UTS语言,因为UTS语言需要编译成Kotlin语言,所以有强类型要求,会TypeScript的同学适应起来会快一些,只是习惯js的同学可能上手会难,可以参考官方组件库easyX的写法,多多学习。

2. 学习UTS语言

UTS语言是TS的变种,建议先学习TS。就连鸿蒙原生开发用的ArkTS也是TS的变种(笔者最近在开发鸿蒙原生应用,会TS上手很快),可见TS的重要性。学习TS可以参考如下教程:
TypeScript 教程

上手TS之后,需要重点关注UTS和TS的区别。

  • UTS为Kotlin和Swift新增了一些专有数据类型;
  • UTS有一些特殊的内置对象和API

其实这些区别主要是为了原生开发的,但是比直接上手安卓和iOS原生开发要简单太多。

3. 关注UniAPP X的Vue规范

uni-app x的vue规范,按照vue3规范实现,但目前不支持setup组合式写法,仅支持option选项式写法。而且有些Vue3的api也不支持。大家在开发过程中遇到问题,要查看官方文档里重点列出的差异
UniAPP X的Vue实现

原生安卓商城的开发

前面的学习铺垫,是为了大家开发过程更加顺利。实际上,easyX已经封装好了常见的电商业务组件,并且已经上线了一些模板。即使是小白,也可以直接用easyX开发出一个原生商城。先看效果
商城首页模板
这个页面的代码可以查看Gitee示例代码, 大家直接复制粘贴即可。

使用easyX组件库和模板库

使用easyX有两种方式,一种是从Gitee下载源码,另一种是从UniAPP插件市场下载源码

下载源码之后解压,找到components目录,将该目录下的所有内容复制到你的UniAPP X项目下的components目录即可使用。
eaxyX支持按需引用,各个组件的具体使用可以查看相关easyX组件文档

当然,您也可以直接下载安卓easyX的安卓apk体验。

easyX演示包下载安装链接

easyX采用MIT协议开源,组件库和模板库仍在不断扩充。对于开发原生商城应用的同学来说,是个宝藏库。等UniAPPX支持鸿蒙后,easyX用来开发鸿蒙原生商城,想想真是吊炸天的开发利器。

应用打包

安卓打包是需要证书的。如果想省事,直接使用Dcloud的公共云证书,傻瓜式操作,不过因为有人滥用这个证书,现在很多品牌的手机会报毒,所以还是建议自己申请证书。
免费证书申请攻略

应用上线

如果要上架到华为、小米、oppo等应用市场,那就需要软件著作权和应用备案了。软件著作权的申请周期比较长,大概3个月,应用备案就快很多了。网上很多服务商提供这两项服务,大家也可以私信我,公司业务可以按照市场最低价给大家服务,个人业务可以提供一些免费指导然后你自己操作。

我是刘明,十年创业老兵,开源技术爱好者。
有问题欢迎私信。

继续阅读 »

什么是UniAPP X

uni-app x,是下一代 uni-app,是一个跨平台应用开发引擎。

uni-app x 没有使用js和webview,它基于 uts 语言。在App端,uts在iOS编译为swift、在Android编译为kotlin,完全达到了原生应用的功能、性能。
更重要的是,UniAPP X未来也会支持鸿蒙,这里引用DCloud社区的官方答复
> DCloud有资源第一时间得到鸿蒙无apk手机的上市计划。我们和华为保持着紧密沟通,会把握好节奏,不用担心。大家可以观察一个信号,等微信的鸿蒙next版敲定了,鸿蒙无apk手机就可以明确上市计划了。鸿蒙的开发语言是arkTS,uni-app x是uts,都是变种ts,uni-app x编译到鸿蒙是靠谱的。
而把uni-app的js编译成arkTS不靠谱。除非编个h5跑在鸿蒙的webview里,但这个体验估计没多少人能接受。

如何学习UniAPP X

1. 学习官方文档

这里的重点和难点应该是UTS语言,因为UTS语言需要编译成Kotlin语言,所以有强类型要求,会TypeScript的同学适应起来会快一些,只是习惯js的同学可能上手会难,可以参考官方组件库easyX的写法,多多学习。

2. 学习UTS语言

UTS语言是TS的变种,建议先学习TS。就连鸿蒙原生开发用的ArkTS也是TS的变种(笔者最近在开发鸿蒙原生应用,会TS上手很快),可见TS的重要性。学习TS可以参考如下教程:
TypeScript 教程

上手TS之后,需要重点关注UTS和TS的区别。

  • UTS为Kotlin和Swift新增了一些专有数据类型;
  • UTS有一些特殊的内置对象和API

其实这些区别主要是为了原生开发的,但是比直接上手安卓和iOS原生开发要简单太多。

3. 关注UniAPP X的Vue规范

uni-app x的vue规范,按照vue3规范实现,但目前不支持setup组合式写法,仅支持option选项式写法。而且有些Vue3的api也不支持。大家在开发过程中遇到问题,要查看官方文档里重点列出的差异
UniAPP X的Vue实现

原生安卓商城的开发

前面的学习铺垫,是为了大家开发过程更加顺利。实际上,easyX已经封装好了常见的电商业务组件,并且已经上线了一些模板。即使是小白,也可以直接用easyX开发出一个原生商城。先看效果
商城首页模板
这个页面的代码可以查看Gitee示例代码, 大家直接复制粘贴即可。

使用easyX组件库和模板库

使用easyX有两种方式,一种是从Gitee下载源码,另一种是从UniAPP插件市场下载源码

下载源码之后解压,找到components目录,将该目录下的所有内容复制到你的UniAPP X项目下的components目录即可使用。
eaxyX支持按需引用,各个组件的具体使用可以查看相关easyX组件文档

当然,您也可以直接下载安卓easyX的安卓apk体验。

easyX演示包下载安装链接

easyX采用MIT协议开源,组件库和模板库仍在不断扩充。对于开发原生商城应用的同学来说,是个宝藏库。等UniAPPX支持鸿蒙后,easyX用来开发鸿蒙原生商城,想想真是吊炸天的开发利器。

应用打包

安卓打包是需要证书的。如果想省事,直接使用Dcloud的公共云证书,傻瓜式操作,不过因为有人滥用这个证书,现在很多品牌的手机会报毒,所以还是建议自己申请证书。
免费证书申请攻略

应用上线

如果要上架到华为、小米、oppo等应用市场,那就需要软件著作权和应用备案了。软件著作权的申请周期比较长,大概3个月,应用备案就快很多了。网上很多服务商提供这两项服务,大家也可以私信我,公司业务可以按照市场最低价给大家服务,个人业务可以提供一些免费指导然后你自己操作。

我是刘明,十年创业老兵,开源技术爱好者。
有问题欢迎私信。

收起阅读 »

解决安卓弹出虚拟键盘时,顶部fixed消失的问题

fixed 虚拟键盘

思路:关掉输入框的adjust-position,键盘就不会把fixed元素顶上去。然后弹出键盘时页面滚动到输入框光标的位置。

<input :adjust-position="false" @keyboardheightchange="handleKeyboardHeightChange"></input>
handleKeyboardHeightChange(e) {  
    const keyboardHeight = e.detail.height  
    // e.target.offsetTop就是输入框中的光标在整个页面的scrollTop。  
    const inputTop = e.target.offsetTop  
    if (keyboardHeight > 0) {  
        const safeHeight = uni.getWindowInfo().safeArea.height  
        const upperHeight = safeHeight - keyboardHeight  

        this.pagePaddingBottom = keyboardHeight  
        setTimeout(() => {  
            uni.pageScrollTo({  
                scrollTop: inputTop - upperHeight + 50,  
                duration: 50,  
            })  
        })  
    } else {  
        this.pagePaddingBottom = 0  
    }  
}
继续阅读 »

思路:关掉输入框的adjust-position,键盘就不会把fixed元素顶上去。然后弹出键盘时页面滚动到输入框光标的位置。

<input :adjust-position="false" @keyboardheightchange="handleKeyboardHeightChange"></input>
handleKeyboardHeightChange(e) {  
    const keyboardHeight = e.detail.height  
    // e.target.offsetTop就是输入框中的光标在整个页面的scrollTop。  
    const inputTop = e.target.offsetTop  
    if (keyboardHeight > 0) {  
        const safeHeight = uni.getWindowInfo().safeArea.height  
        const upperHeight = safeHeight - keyboardHeight  

        this.pagePaddingBottom = keyboardHeight  
        setTimeout(() => {  
            uni.pageScrollTo({  
                scrollTop: inputTop - upperHeight + 50,  
                duration: 50,  
            })  
        })  
    } else {  
        this.pagePaddingBottom = 0  
    }  
}
收起阅读 »

开发一套小程序和后台。具体so liao qso liao q

开发一套后台和一个小程序功能简单能做的资料具体

开发一套后台和一个小程序功能简单能做的资料具体

CodeGeeX 支持 HBuilderX 啦

OpenAI

我看这个已经出来了,我之前用 vscode 用的多,大家用着怎么样

https://ext.dcloud.net.cn/plugin?id=15497#rating

我看这个已经出来了,我之前用 vscode 用的多,大家用着怎么样

https://ext.dcloud.net.cn/plugin?id=15497#rating

uni-AD原生广告SDK-合规使用说明

uni_ad

SDK合规指引

  1. 按照中国国家法律法规、政策及标准的要求,在APP上应对《隐私政策》进行展示。开发者应在APP首次启动和登录注册页面,通过弹窗、超链接等方式,清晰告知用户个人信息处理规则,在用户充分阅读并同意的情况下再读取用户信息设备信息。《隐私政策》可参考国家标准《信息安全技术个人信息安全规范》文件中的隐私政策模板编写。
    </br>
    接入规范及建议

    • 需要在用户明确同意隐私政策\服务条款后,才可以初始化uni-AD原生广告。游客模式下不得初始化广告SDK。
    • 用户未同意隐私政策\服务条款前,禁止获取、传输用户数据;禁止弹出系统权限弹窗向用户申请系统权限。
  2. 应在APP的隐私政策、信息共享清单中明确披露uni-AD原生广告SDK和其他三方广告SDK(如优量汇、穿山甲、快手等)的名称、功能、信息类型及隐私政策等信息。
    uni-AD原生广告SDK披露信息可参考下段内容

    SDK名称:uni-AD原生广告SDK  
    开发者:数字天堂(北京)网络技术有限公司  
    主要功能:提供三方广告联盟SDK广告的拉取和展示功能  
    个人信息类型:设备信息(设备品牌、型号、操作系统版本、分辨率、网络类型、IP地址、User Agent信息、设备语言、手机系统时间、设备名称、时区、屏幕密度)。应用信息(应用名、应用包名、版本号),设备标识符(如IMEI/MEID、IMSI、GAID(仅GMS服务)、AndroidID、OAID),运营商信息,位置信息。  
    SDK隐私政策:https://doc.dcloud.net.cn/markdown-share-docs/40ec97d02d3efd9309c047290a342c79/  

    其他三方广告SDK(如优量汇、穿山甲、快手等)可参考uni-AD各广告模块说明或下面表格。

  3. 应在应用设置页面等位置提供“个性化广告”关闭按钮。
    uni-AD原生广告SDK提供设置“个性化广告”开关的API

    是否开启个性化广告 false为关闭个性化推荐,默认为true  
    
    DCloudAdManager.setPersonalAd(Context context, boolean isOpen);  
  4. 应在向用户展示广告时,提供“关闭(X)”或“跳过”按钮,点击之后广告可以关闭。
    注意:展示广告时不得对“跳过”、“关闭”按钮进行遮挡。

APP合规指引

  1. 隐私弹窗
    应用在首次启动时需要弹窗提示,弹窗内容中需要包含隐私政策\服务条款链接。隐私政策弹框需要提供明确的拒绝按钮。

  2. 隐私政策

    • 隐私政策应该单独成文,不得与用户协议等说明文件的一部分存在。
    • 隐私政策中应清晰描述每个SDK的收集使用个人信息的目的、方式、范围及收集的个人信息类型及权限说明
    • 隐私政策应由最终用户自主选择是否同意,不应以默认勾选“同意”的方式取得用户授权。
    • 因业务需要,确需超出上述范围使用个人信息的,应再次征得用户明示同意。
  3. APP合规规范

    • 用户未同意隐私政策或者游客模式下,不得通过任何方式获取、传输用户隐私信息。
    • 隐私政策\服务条款应该有专门的链接公示。
    • 用户进入您的产品主功能界面后,通过4次以内的点击/滑动,能够访问到您的产品隐私政策。
    • 不应通过捆绑产品或服务各项业务功能的方式,要求用户一次性接受并授权同意其未申请或使用的业务功能收集个人信息的请求。
    • 用户明确表示不同意后,不得频繁征求用户同意、干扰用户正常使用。
    • 不得超范围获取用户信息。
    • APP不应收集与业务功能无任何关系的个人信息。
    • APP更新升级后,不应更改原有的系统权限设置。
  4. 最小必要数据收集
    在仅能收集最小必要的个人信息的情形下,仍能保证用户能使用APP的基本功能服务,可参考《常见类型移动互联网应用程序必要个人信息范围规定》

  5. 个性化退出机制。
    如果用户存在定向推送功能(个性化推荐,营销推送等功能),需要提供关闭定向推送功能的选项。

  6. 账号注销
    APP需要提供账户注销的途径,并在用户注销账号后,及时删除其个人信息或进行匿名化处理。

  7. 投诉管理
    APP应建立投诉管理机制和投诉跟踪流程,并在合理的时间内对投诉进行响应。

uni-AD原生广告集成的三方SDK说明

<table style="word-break:break-all">
<tr>
<th style="width:8%">SDK名称</th>
<th style="width:10%">SDK包名/网址</th>
<th style="width:8%">SDK用途</th>
<th style="width:20%">可能获取的个人信息类型</th>
<th style="width:25%">调用的设备权限</th>
<th style="width:20%">信息用途</th>
<th style="width:10%">SDK隐私政策链接/目的</th>
</tr>
<tr>
<td>快手 </td>
<td>com.kwad.sdk </td>
<td>增强广告 </td>
<td>基础信息:设备品牌、设备型号、软件系统版本、存储信息、运营商信息、设备时区、设备语言、网络信息等基础信息</br>
设备标识:IMEIs、MEID、OAID、Androidld、IMSIs、ICCID</br>
位置信息:IP地址、MAC地址、GPS位置信息、基站信息、WIFI信息</br>
应用信息:应用安装列表</br>
其他信息:传感器信息、sim卡激活信息</td>
<td style="font-size:12px">
android.permission.ACCESS_NETWORK_STATE <br>
android.permission.INTERNET <br>
android.permission.READ_PHONE_STATE <br>
android.permission.ACCESS_WIFI_STATE <br>
android.permission.REQUEST_INSTALL_PACKAGES <br>
android.permission.VIBRATE
</td>
<td>广告投放、广告归因、反作弊、安全 </td>
<td><a href="https://www.kuaishou.com/about/policy" target="_blank">快手内容联盟隐私协议</a>和<a href="https://u.kuaishou.com/home/detail/1220" target="_blank">SDK使用规范</a></td>
</tr>
<tr>
<td>快手内容联盟 </td>
<td>com.kwad.sdk </td>
<td>增强广告 </td>
<td>基础信息:设备品牌、设备型号、软件系统版本、存储信息、运营商信息、设备时区、设备语言、网络信息等基础信息</br>
设备标识:IMEIs、MEID、OAID、Androidld、IMSIs、ICCID</br>
位置信息:IP地址、MAC地址、GPS位置信息、基站信息、WIFI信息</br>
应用信息:应用安装列表</br>
其他信息:传感器信息、sim卡激活信息 </td>
<td style="font-size:12px">
android.permission.ACCESS_NETWORK_STATE <br>
android.permission.INTERNET <br>
android.permission.READ_PHONE_STATE <br>
android.permission.ACCESS_WIFI_STATE <br>
android.permission.REQUEST_INSTALL_PACKAGES <br>
android.permission.VIBRATE <br>
android.permission.SET_WALLPAPER<br>
android.permission.READ_EXTERNAL_STORAGE <br>
android.permission.WRITE_EXTERNAL_STORAGE <br>
android.permission.ACCESS_COARSE_LOCATION <br>
android.permission.BLUETOOTH
</td>
<td>广告投放、广告归因、反作弊、安全 </td>
<td><a href="https://www.kuaishou.com/about/policy" target="_blank">快手内容联盟隐私协议</a>和<a href="https://u.kuaishou.com/home/detail/1220" target="_blank">SDK使用规范</a></td>
</tr>
<tr>
<td>优量汇 </td>
<td>com.qq.e </td>
<td>增强广告 </td>
<td>基站、附近的WIFI、连接的WIFI、位置信息、设备制造商、设备型号、操作系统版本、屏幕分辨率、屏幕方向、屏幕DPI、IP地址、加速度传感器、磁场传感器、OAID、IMEI/MEID(Device ID)、Android_ID、包名、版本号、进程名称、运行状态、可疑行为、应用安装信息 </td>
<td style="font-size:12px">
android.permission.INTERNET <br>
android.permission.ACCESS_NETWORK_STATE <br>
android.permission.ACCESS_WIFI_STATE <br>
android.permission.REQUEST_INSTALL_PACKAGES <br>
android.permission.CHANGE_NETWORK_STATE<br>
android.permission.QUERY_ALL_PACKAGES <br>
android.permission.REORDER_TASKS<br>
android.permission.VIBRATE <br>
android.permission.ACCESS_COARSE_LOCATION
</td>
<td style="font-size:12px">广告投放与监测归因、广告主统计投放结果、减少App崩溃、确保服务器正常运行、提升可扩展性和性能</td>
<td><a href="https://e.qq.com/dev/help_detail.html?cid=2005&pid=5983" target="_blank">优量汇隐私协议</a></td>
</tr>
<tr>
<td>穿山甲 </td>
<td>com.bytedance.sdk.openadsdk</td>
<td>增强广告 </td>
<td>设备品牌、型号、软件系统版本、分辨率、网络信号强度、IP地址、设备语言、传感器信息等基础信息、无线网SSID名称、MAC地址、AndroidID、应用名、应用包名、版本号、应用前后台状态、应用列表信息、运营商信息、设备时区 </td>
<td style="font-size:12px">
android.permission.ACCESS_NETWORK_STATE <br>
android.permission.READ_PHONE_STATE <br>
android.permission.WRITE_EXTERNAL_STORAGE
</td>
<td>广告投放合作、广告归因、反作弊 </td>
<td><a href="https://www.pangle.cn/privacy/partner" target="_blank">穿山甲隐私协议</a></td>
</tr>
<tr>
<td>Sigmob </td>
<td>com.sigmob.windad </td>
<td>增强广告 </td>
<td>设备信息:设备品牌、型号、操作系统版本、OAID、分辨率等基础设备信息
应用信息:应用名称、应用包名、应用版本号等
其他:运营商信息、时区</td>
<td style="font-size:12px">
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.INTERNET <br>
android.permission.ACCESS_WIFI_STATE <br>
android.permission.CHANGE_WIFI_STATE <br>
android.permission.READ_PHONE_STATE <br>
android.permission.REQUEST_INSTALL_PACKAGES <br>
android.permission.QUERY_ALL_PACKAGES
</td>
<td>广告投放、广告主归因、反作弊 </td>
<td><a href="https://doc.sigmob.com/#/Sigmob%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%9A%90%E7%A7%81%E6%9D%A1%E6%AC%BE/%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96/">Sigmob隐私协议</a></td>
</tr>
<tr>
<td>百度百青藤</td>
<td>com.baidu.mobads.proxy </td>
<td>增强广告 </td>
<td>设备信息:设备品牌、型号、软件系统版本、分辨率、网络信号强度、传感器信息,磁盘总空间、系统总内存空间、手机重启信息、手机系统更新时间等基础信息、OAID、AndroidID、屏幕宽高,屏幕像素密度,系统版本号,设备厂商,设备型号,手机运营商,手机网络状态,设备剩余存储空间,手机重启时间和更新时间
开发者应用信息:应用包名、应用前后台状态
设备信息:IMEI、IMSI、MEID
位置信息</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.READ_PHONE_STATE<br>
android.permission.ACCESS_COARSE_LOCATION<br>
android.permissio.WRITE_EXTERNAL_STORAGE<br>
</td>
<td>为最终用户提供安全保障、改善我们的产品和服务,开展内部审计、数据分析和研究 </td>
<td><a href="https://union.baidu.com/bqt/#/legal/policies">百度百青藤隐私协议</a></td>
</tr>

<tr>
<td>HUAWEI Ads</td>
<td>com.huawei.hms.ads.lite</td>
<td>增强广告 </td>
<td>设备信息、网络信息、位置信息、应用信息、应用使用信息、上下文信息</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
</td>
<td>单次请求的广告定向投放、程序化广告投放、广告监测归因与反作弊。</td>
<td><a href="https://developer.huawei.com/consumer/cn/doc/distribution/monetize/yinsishengming-0000001085219712">HUAWEI Ads 隐私声明</a><br><br>和<br><br><a href="https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/publisher-service-personal-data-0000001050066921">HUAWEI Ads SDK隐私安全说明</a></td>
</tr>
<tr>
<td>章鱼广告</td>
<td>com.octopus.ad</td>
<td>增强广告 </td>
<td>设备品牌、设备型号、设备时区、设备语言、系统版本、开发者应用名、应用版本号、应用包名、网络类型、UserAgent信息、网络状态、崩溃信息、性能数据、屏幕高宽、屏幕方向、屏幕DPI信息、系统更新时间、开机时间、磁盘空间、物理内存、设备ID(OAID、GAID)、IMEI 用户授权才收集、USB调试模式、cpu、运行状态、运营商、传感器信息、掠过手势内容</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.WRITE_EXTERNAL_STORAGE<br>
android.permission.READ_EXTERNAL_STORAGE<br>
</td>
<td>基于用户设备信息调整广告投放、统计分析、反作弊、实现广告正常显示与交互功能,通过崩溃信息,以此来优化代码缺陷,最大程度减少App崩溃。通过收集SDK运行过程中性能数据,以优化SDK的性能。统计广告数据,以用于广告主统计投放结果。</td>
<td><a href="https://doc.adintl.cn/#/zh-cn/guide/UsePrivacy">章鱼广告SDK隐私政策</a></td>
</tr>

<tr>
<td>倍孜广告</td>
<td>com.beizi.ad</td>
<td>增强广告 </td>
<td>设备品牌、设备型号、设备时区、设备语言、系统版本、网络类型、UserAgent信息、屏幕高宽、屏幕方向、屏幕DPI信息、系统更新时间、开机时间、磁盘空间、物理内存、运营商、sim卡状态、传感器信息、掠过手势内容、cpu、设备ID(国内用户OAID、海外用户GAID)、开发者应用名、应用版本号、应用包名、运行状态、使用数据、诊断数据</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.WRITE_EXTERNAL_STORAGE<br>
android.permission.READ_EXTERNAL_STORAGE<br>
</td>
<td>广告投放策略、统计分析服务、反作弊分析、广告正常显示与交互功能的实现、广告归因、最大程度减少App崩溃、确保服务器正常运行、提升可扩展性和性能</td>
<td><a href="https://sdkdoc.beizi.biz/#/zh-cn/guide/UsePrivacy">BeiZi SDK隐私保护声明</a></td>
</tr>

<tr>
<td>章鱼广告</td>
<td>com.octopus.ad</td>
<td>增强广告 </td>
<td>设备品牌、设备型号、设备时区、设备语言、系统版本、开发者应用名、应用版本号、应用包名、网络类型、UserAgent信息、网络状态、崩溃信息、性能数据、屏幕高宽、屏幕方向、屏幕DPI信息、系统更新时间、开机时间、磁盘空间、物理内存、设备ID(OAID、GAID)、IMEI 用户授权才收集、USB调试模式、cpu、运行状态、运营商、传感器信息、掠过手势内容</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.WRITE_EXTERNAL_STORAGE<br>
android.permission.READ_EXTERNAL_STORAGE<br>
</td>
<td>基于用户设备信息调整广告投放、统计分析、反作弊、实现广告正常显示与交互功能,通过崩溃信息,以此来优化代码缺陷,最大程度减少App崩溃。通过收集SDK运行过程中性能数据,以优化SDK的性能。统计广告数据,以用于广告主统计投放结果。</td>
<td><a href="https://doc.adintl.cn/#/zh-cn/guide/UsePrivacy">章鱼广告SDK隐私政策</a></td>
</tr>

<tr>
<td>倍孜广告</td>
<td>com.beizi.ad</td>
<td>增强广告 </td>
<td>设备品牌、设备型号、设备时区、设备语言、系统版本、网络类型、UserAgent信息、屏幕高宽、屏幕方向、屏幕DPI信息、系统更新时间、开机时间、磁盘空间、物理内存、运营商、sim卡状态、传感器信息、掠过手势内容、cpu、设备ID(国内用户OAID、海外用户GAID)、开发者应用名、应用版本号、应用包名、运行状态、使用数据、诊断数据</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.WRITE_EXTERNAL_STORAGE<br>
android.permission.READ_EXTERNAL_STORAGE<br>
</td>
<td>广告投放策略、统计分析服务、反作弊分析、广告正常显示与交互功能的实现、广告归因、最大程度减少App崩溃、确保服务器正常运行、提升可扩展性和性能</td>
<td><a href="https://sdkdoc.beizi.biz/#/zh-cn/guide/UsePrivacy">BeiZi SDK隐私保护声明</a></td>
</tr>

<tr>
<td>泛连</td>
<td>com.fl.saas.s2s</td>
<td>增强广告 </td>
<td>设备品牌、型号、软件系统版本、屏幕密度、屏幕分辨率、设备语言、设备时区、IMEI、IMSI、ICCID、GAID、MEID、IDFA、IDFV、AndroidID、OAID、手机系统重启时间、设备的MAC地址、User Agent、IP地址、运营商信息、Wi-Fi状态、网络信号强度、应用版本、应用包名、应用名称、应用前后台状态、应用列表信息、加速度传感器、陀螺仪传感器、广告的展示、点击及转化等交互数据、系统崩溃数据、性能数据</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.VIBRATE<br>
android.permission.REQUEST_INSTALL_PACKAGES<br>
android.permission.READ_PHONE_STATE<br/>
</td>
<td>广告投放及广告监测归因、反作弊、摇一摇广告投放、广告投放统计分析、提升SDK的稳定性,减少APP的崩溃</td>
<td><a href="https://www.adfunlink.com/doc/privacy.html">Funlink隐私保护声明</a></td>
</tr>

<tr>
<td>聚力阅盟</td>
<td>com.dcloudym</td>
<td>增强广告 </td>
<td>设备型号、操作系统版本、唯一设备标识符、设备环境等软硬件特征信息;GPS位置以及WLAN接入点、蓝牙和基站等传感器信息</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.VIBRATE<br>
android.permission.REQUEST_INSTALL_PACKAGES<br>
android.permission.READ_PHONE_STATE<br/>
android.permission.WRITE_EXTERNAL_STORAGE<br/>
android.permission.ACCESS_COARSE_LOCATION<br/>
android.permission.ACCESS_FINE_LOCATION<br/>
</td>
<td>广告投放及广告监测归因、反作弊、摇一摇广告投放</td>
<td><a href="https://idbj.juliyuemeng.com/privacy">聚力阅盟隐私保护声明</a></td>
</tr>
</table>

继续阅读 »

SDK合规指引

  1. 按照中国国家法律法规、政策及标准的要求,在APP上应对《隐私政策》进行展示。开发者应在APP首次启动和登录注册页面,通过弹窗、超链接等方式,清晰告知用户个人信息处理规则,在用户充分阅读并同意的情况下再读取用户信息设备信息。《隐私政策》可参考国家标准《信息安全技术个人信息安全规范》文件中的隐私政策模板编写。
    </br>
    接入规范及建议

    • 需要在用户明确同意隐私政策\服务条款后,才可以初始化uni-AD原生广告。游客模式下不得初始化广告SDK。
    • 用户未同意隐私政策\服务条款前,禁止获取、传输用户数据;禁止弹出系统权限弹窗向用户申请系统权限。
  2. 应在APP的隐私政策、信息共享清单中明确披露uni-AD原生广告SDK和其他三方广告SDK(如优量汇、穿山甲、快手等)的名称、功能、信息类型及隐私政策等信息。
    uni-AD原生广告SDK披露信息可参考下段内容

    SDK名称:uni-AD原生广告SDK  
    开发者:数字天堂(北京)网络技术有限公司  
    主要功能:提供三方广告联盟SDK广告的拉取和展示功能  
    个人信息类型:设备信息(设备品牌、型号、操作系统版本、分辨率、网络类型、IP地址、User Agent信息、设备语言、手机系统时间、设备名称、时区、屏幕密度)。应用信息(应用名、应用包名、版本号),设备标识符(如IMEI/MEID、IMSI、GAID(仅GMS服务)、AndroidID、OAID),运营商信息,位置信息。  
    SDK隐私政策:https://doc.dcloud.net.cn/markdown-share-docs/40ec97d02d3efd9309c047290a342c79/  

    其他三方广告SDK(如优量汇、穿山甲、快手等)可参考uni-AD各广告模块说明或下面表格。

  3. 应在应用设置页面等位置提供“个性化广告”关闭按钮。
    uni-AD原生广告SDK提供设置“个性化广告”开关的API

    是否开启个性化广告 false为关闭个性化推荐,默认为true  
    
    DCloudAdManager.setPersonalAd(Context context, boolean isOpen);  
  4. 应在向用户展示广告时,提供“关闭(X)”或“跳过”按钮,点击之后广告可以关闭。
    注意:展示广告时不得对“跳过”、“关闭”按钮进行遮挡。

APP合规指引

  1. 隐私弹窗
    应用在首次启动时需要弹窗提示,弹窗内容中需要包含隐私政策\服务条款链接。隐私政策弹框需要提供明确的拒绝按钮。

  2. 隐私政策

    • 隐私政策应该单独成文,不得与用户协议等说明文件的一部分存在。
    • 隐私政策中应清晰描述每个SDK的收集使用个人信息的目的、方式、范围及收集的个人信息类型及权限说明
    • 隐私政策应由最终用户自主选择是否同意,不应以默认勾选“同意”的方式取得用户授权。
    • 因业务需要,确需超出上述范围使用个人信息的,应再次征得用户明示同意。
  3. APP合规规范

    • 用户未同意隐私政策或者游客模式下,不得通过任何方式获取、传输用户隐私信息。
    • 隐私政策\服务条款应该有专门的链接公示。
    • 用户进入您的产品主功能界面后,通过4次以内的点击/滑动,能够访问到您的产品隐私政策。
    • 不应通过捆绑产品或服务各项业务功能的方式,要求用户一次性接受并授权同意其未申请或使用的业务功能收集个人信息的请求。
    • 用户明确表示不同意后,不得频繁征求用户同意、干扰用户正常使用。
    • 不得超范围获取用户信息。
    • APP不应收集与业务功能无任何关系的个人信息。
    • APP更新升级后,不应更改原有的系统权限设置。
  4. 最小必要数据收集
    在仅能收集最小必要的个人信息的情形下,仍能保证用户能使用APP的基本功能服务,可参考《常见类型移动互联网应用程序必要个人信息范围规定》

  5. 个性化退出机制。
    如果用户存在定向推送功能(个性化推荐,营销推送等功能),需要提供关闭定向推送功能的选项。

  6. 账号注销
    APP需要提供账户注销的途径,并在用户注销账号后,及时删除其个人信息或进行匿名化处理。

  7. 投诉管理
    APP应建立投诉管理机制和投诉跟踪流程,并在合理的时间内对投诉进行响应。

uni-AD原生广告集成的三方SDK说明

<table style="word-break:break-all">
<tr>
<th style="width:8%">SDK名称</th>
<th style="width:10%">SDK包名/网址</th>
<th style="width:8%">SDK用途</th>
<th style="width:20%">可能获取的个人信息类型</th>
<th style="width:25%">调用的设备权限</th>
<th style="width:20%">信息用途</th>
<th style="width:10%">SDK隐私政策链接/目的</th>
</tr>
<tr>
<td>快手 </td>
<td>com.kwad.sdk </td>
<td>增强广告 </td>
<td>基础信息:设备品牌、设备型号、软件系统版本、存储信息、运营商信息、设备时区、设备语言、网络信息等基础信息</br>
设备标识:IMEIs、MEID、OAID、Androidld、IMSIs、ICCID</br>
位置信息:IP地址、MAC地址、GPS位置信息、基站信息、WIFI信息</br>
应用信息:应用安装列表</br>
其他信息:传感器信息、sim卡激活信息</td>
<td style="font-size:12px">
android.permission.ACCESS_NETWORK_STATE <br>
android.permission.INTERNET <br>
android.permission.READ_PHONE_STATE <br>
android.permission.ACCESS_WIFI_STATE <br>
android.permission.REQUEST_INSTALL_PACKAGES <br>
android.permission.VIBRATE
</td>
<td>广告投放、广告归因、反作弊、安全 </td>
<td><a href="https://www.kuaishou.com/about/policy" target="_blank">快手内容联盟隐私协议</a>和<a href="https://u.kuaishou.com/home/detail/1220" target="_blank">SDK使用规范</a></td>
</tr>
<tr>
<td>快手内容联盟 </td>
<td>com.kwad.sdk </td>
<td>增强广告 </td>
<td>基础信息:设备品牌、设备型号、软件系统版本、存储信息、运营商信息、设备时区、设备语言、网络信息等基础信息</br>
设备标识:IMEIs、MEID、OAID、Androidld、IMSIs、ICCID</br>
位置信息:IP地址、MAC地址、GPS位置信息、基站信息、WIFI信息</br>
应用信息:应用安装列表</br>
其他信息:传感器信息、sim卡激活信息 </td>
<td style="font-size:12px">
android.permission.ACCESS_NETWORK_STATE <br>
android.permission.INTERNET <br>
android.permission.READ_PHONE_STATE <br>
android.permission.ACCESS_WIFI_STATE <br>
android.permission.REQUEST_INSTALL_PACKAGES <br>
android.permission.VIBRATE <br>
android.permission.SET_WALLPAPER<br>
android.permission.READ_EXTERNAL_STORAGE <br>
android.permission.WRITE_EXTERNAL_STORAGE <br>
android.permission.ACCESS_COARSE_LOCATION <br>
android.permission.BLUETOOTH
</td>
<td>广告投放、广告归因、反作弊、安全 </td>
<td><a href="https://www.kuaishou.com/about/policy" target="_blank">快手内容联盟隐私协议</a>和<a href="https://u.kuaishou.com/home/detail/1220" target="_blank">SDK使用规范</a></td>
</tr>
<tr>
<td>优量汇 </td>
<td>com.qq.e </td>
<td>增强广告 </td>
<td>基站、附近的WIFI、连接的WIFI、位置信息、设备制造商、设备型号、操作系统版本、屏幕分辨率、屏幕方向、屏幕DPI、IP地址、加速度传感器、磁场传感器、OAID、IMEI/MEID(Device ID)、Android_ID、包名、版本号、进程名称、运行状态、可疑行为、应用安装信息 </td>
<td style="font-size:12px">
android.permission.INTERNET <br>
android.permission.ACCESS_NETWORK_STATE <br>
android.permission.ACCESS_WIFI_STATE <br>
android.permission.REQUEST_INSTALL_PACKAGES <br>
android.permission.CHANGE_NETWORK_STATE<br>
android.permission.QUERY_ALL_PACKAGES <br>
android.permission.REORDER_TASKS<br>
android.permission.VIBRATE <br>
android.permission.ACCESS_COARSE_LOCATION
</td>
<td style="font-size:12px">广告投放与监测归因、广告主统计投放结果、减少App崩溃、确保服务器正常运行、提升可扩展性和性能</td>
<td><a href="https://e.qq.com/dev/help_detail.html?cid=2005&pid=5983" target="_blank">优量汇隐私协议</a></td>
</tr>
<tr>
<td>穿山甲 </td>
<td>com.bytedance.sdk.openadsdk</td>
<td>增强广告 </td>
<td>设备品牌、型号、软件系统版本、分辨率、网络信号强度、IP地址、设备语言、传感器信息等基础信息、无线网SSID名称、MAC地址、AndroidID、应用名、应用包名、版本号、应用前后台状态、应用列表信息、运营商信息、设备时区 </td>
<td style="font-size:12px">
android.permission.ACCESS_NETWORK_STATE <br>
android.permission.READ_PHONE_STATE <br>
android.permission.WRITE_EXTERNAL_STORAGE
</td>
<td>广告投放合作、广告归因、反作弊 </td>
<td><a href="https://www.pangle.cn/privacy/partner" target="_blank">穿山甲隐私协议</a></td>
</tr>
<tr>
<td>Sigmob </td>
<td>com.sigmob.windad </td>
<td>增强广告 </td>
<td>设备信息:设备品牌、型号、操作系统版本、OAID、分辨率等基础设备信息
应用信息:应用名称、应用包名、应用版本号等
其他:运营商信息、时区</td>
<td style="font-size:12px">
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.INTERNET <br>
android.permission.ACCESS_WIFI_STATE <br>
android.permission.CHANGE_WIFI_STATE <br>
android.permission.READ_PHONE_STATE <br>
android.permission.REQUEST_INSTALL_PACKAGES <br>
android.permission.QUERY_ALL_PACKAGES
</td>
<td>广告投放、广告主归因、反作弊 </td>
<td><a href="https://doc.sigmob.com/#/Sigmob%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%9A%90%E7%A7%81%E6%9D%A1%E6%AC%BE/%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96/">Sigmob隐私协议</a></td>
</tr>
<tr>
<td>百度百青藤</td>
<td>com.baidu.mobads.proxy </td>
<td>增强广告 </td>
<td>设备信息:设备品牌、型号、软件系统版本、分辨率、网络信号强度、传感器信息,磁盘总空间、系统总内存空间、手机重启信息、手机系统更新时间等基础信息、OAID、AndroidID、屏幕宽高,屏幕像素密度,系统版本号,设备厂商,设备型号,手机运营商,手机网络状态,设备剩余存储空间,手机重启时间和更新时间
开发者应用信息:应用包名、应用前后台状态
设备信息:IMEI、IMSI、MEID
位置信息</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.READ_PHONE_STATE<br>
android.permission.ACCESS_COARSE_LOCATION<br>
android.permissio.WRITE_EXTERNAL_STORAGE<br>
</td>
<td>为最终用户提供安全保障、改善我们的产品和服务,开展内部审计、数据分析和研究 </td>
<td><a href="https://union.baidu.com/bqt/#/legal/policies">百度百青藤隐私协议</a></td>
</tr>

<tr>
<td>HUAWEI Ads</td>
<td>com.huawei.hms.ads.lite</td>
<td>增强广告 </td>
<td>设备信息、网络信息、位置信息、应用信息、应用使用信息、上下文信息</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
</td>
<td>单次请求的广告定向投放、程序化广告投放、广告监测归因与反作弊。</td>
<td><a href="https://developer.huawei.com/consumer/cn/doc/distribution/monetize/yinsishengming-0000001085219712">HUAWEI Ads 隐私声明</a><br><br>和<br><br><a href="https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/publisher-service-personal-data-0000001050066921">HUAWEI Ads SDK隐私安全说明</a></td>
</tr>
<tr>
<td>章鱼广告</td>
<td>com.octopus.ad</td>
<td>增强广告 </td>
<td>设备品牌、设备型号、设备时区、设备语言、系统版本、开发者应用名、应用版本号、应用包名、网络类型、UserAgent信息、网络状态、崩溃信息、性能数据、屏幕高宽、屏幕方向、屏幕DPI信息、系统更新时间、开机时间、磁盘空间、物理内存、设备ID(OAID、GAID)、IMEI 用户授权才收集、USB调试模式、cpu、运行状态、运营商、传感器信息、掠过手势内容</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.WRITE_EXTERNAL_STORAGE<br>
android.permission.READ_EXTERNAL_STORAGE<br>
</td>
<td>基于用户设备信息调整广告投放、统计分析、反作弊、实现广告正常显示与交互功能,通过崩溃信息,以此来优化代码缺陷,最大程度减少App崩溃。通过收集SDK运行过程中性能数据,以优化SDK的性能。统计广告数据,以用于广告主统计投放结果。</td>
<td><a href="https://doc.adintl.cn/#/zh-cn/guide/UsePrivacy">章鱼广告SDK隐私政策</a></td>
</tr>

<tr>
<td>倍孜广告</td>
<td>com.beizi.ad</td>
<td>增强广告 </td>
<td>设备品牌、设备型号、设备时区、设备语言、系统版本、网络类型、UserAgent信息、屏幕高宽、屏幕方向、屏幕DPI信息、系统更新时间、开机时间、磁盘空间、物理内存、运营商、sim卡状态、传感器信息、掠过手势内容、cpu、设备ID(国内用户OAID、海外用户GAID)、开发者应用名、应用版本号、应用包名、运行状态、使用数据、诊断数据</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.WRITE_EXTERNAL_STORAGE<br>
android.permission.READ_EXTERNAL_STORAGE<br>
</td>
<td>广告投放策略、统计分析服务、反作弊分析、广告正常显示与交互功能的实现、广告归因、最大程度减少App崩溃、确保服务器正常运行、提升可扩展性和性能</td>
<td><a href="https://sdkdoc.beizi.biz/#/zh-cn/guide/UsePrivacy">BeiZi SDK隐私保护声明</a></td>
</tr>

<tr>
<td>章鱼广告</td>
<td>com.octopus.ad</td>
<td>增强广告 </td>
<td>设备品牌、设备型号、设备时区、设备语言、系统版本、开发者应用名、应用版本号、应用包名、网络类型、UserAgent信息、网络状态、崩溃信息、性能数据、屏幕高宽、屏幕方向、屏幕DPI信息、系统更新时间、开机时间、磁盘空间、物理内存、设备ID(OAID、GAID)、IMEI 用户授权才收集、USB调试模式、cpu、运行状态、运营商、传感器信息、掠过手势内容</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.WRITE_EXTERNAL_STORAGE<br>
android.permission.READ_EXTERNAL_STORAGE<br>
</td>
<td>基于用户设备信息调整广告投放、统计分析、反作弊、实现广告正常显示与交互功能,通过崩溃信息,以此来优化代码缺陷,最大程度减少App崩溃。通过收集SDK运行过程中性能数据,以优化SDK的性能。统计广告数据,以用于广告主统计投放结果。</td>
<td><a href="https://doc.adintl.cn/#/zh-cn/guide/UsePrivacy">章鱼广告SDK隐私政策</a></td>
</tr>

<tr>
<td>倍孜广告</td>
<td>com.beizi.ad</td>
<td>增强广告 </td>
<td>设备品牌、设备型号、设备时区、设备语言、系统版本、网络类型、UserAgent信息、屏幕高宽、屏幕方向、屏幕DPI信息、系统更新时间、开机时间、磁盘空间、物理内存、运营商、sim卡状态、传感器信息、掠过手势内容、cpu、设备ID(国内用户OAID、海外用户GAID)、开发者应用名、应用版本号、应用包名、运行状态、使用数据、诊断数据</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.WRITE_EXTERNAL_STORAGE<br>
android.permission.READ_EXTERNAL_STORAGE<br>
</td>
<td>广告投放策略、统计分析服务、反作弊分析、广告正常显示与交互功能的实现、广告归因、最大程度减少App崩溃、确保服务器正常运行、提升可扩展性和性能</td>
<td><a href="https://sdkdoc.beizi.biz/#/zh-cn/guide/UsePrivacy">BeiZi SDK隐私保护声明</a></td>
</tr>

<tr>
<td>泛连</td>
<td>com.fl.saas.s2s</td>
<td>增强广告 </td>
<td>设备品牌、型号、软件系统版本、屏幕密度、屏幕分辨率、设备语言、设备时区、IMEI、IMSI、ICCID、GAID、MEID、IDFA、IDFV、AndroidID、OAID、手机系统重启时间、设备的MAC地址、User Agent、IP地址、运营商信息、Wi-Fi状态、网络信号强度、应用版本、应用包名、应用名称、应用前后台状态、应用列表信息、加速度传感器、陀螺仪传感器、广告的展示、点击及转化等交互数据、系统崩溃数据、性能数据</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.VIBRATE<br>
android.permission.REQUEST_INSTALL_PACKAGES<br>
android.permission.READ_PHONE_STATE<br/>
</td>
<td>广告投放及广告监测归因、反作弊、摇一摇广告投放、广告投放统计分析、提升SDK的稳定性,减少APP的崩溃</td>
<td><a href="https://www.adfunlink.com/doc/privacy.html">Funlink隐私保护声明</a></td>
</tr>

<tr>
<td>聚力阅盟</td>
<td>com.dcloudym</td>
<td>增强广告 </td>
<td>设备型号、操作系统版本、唯一设备标识符、设备环境等软硬件特征信息;GPS位置以及WLAN接入点、蓝牙和基站等传感器信息</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.VIBRATE<br>
android.permission.REQUEST_INSTALL_PACKAGES<br>
android.permission.READ_PHONE_STATE<br/>
android.permission.WRITE_EXTERNAL_STORAGE<br/>
android.permission.ACCESS_COARSE_LOCATION<br/>
android.permission.ACCESS_FINE_LOCATION<br/>
</td>
<td>广告投放及广告监测归因、反作弊、摇一摇广告投放</td>
<td><a href="https://idbj.juliyuemeng.com/privacy">聚力阅盟隐私保护声明</a></td>
</tr>
</table>

收起阅读 »

H5 路由切换没有动画效果

h5

H5 路由切换没有动画效果这个问题怎么办啊,为什么app就支持H5就不支持嘞。。。。。。。不理解,官方什么时候解决一下,插件市场那些不好用有bug

H5 路由切换没有动画效果这个问题怎么办啊,为什么app就支持H5就不支持嘞。。。。。。。不理解,官方什么时候解决一下,插件市场那些不好用有bug

抄官方代码编译报错?

非官方bug
  type SwiperTabsItem = {  
    x : number,  
    w : number  
  }  

  type SwiperViewItem = {  
    title : string,  
  }

提示 Parsing error: Unexpected token SwiperTabsItem
编译报错: [plugin:uni:app-uvue] Parse error @:1:1

这种应该如何解决呢?

继续阅读 »
  type SwiperTabsItem = {  
    x : number,  
    w : number  
  }  

  type SwiperViewItem = {  
    title : string,  
  }

提示 Parsing error: Unexpected token SwiperTabsItem
编译报错: [plugin:uni:app-uvue] Parse error @:1:1

这种应该如何解决呢?

收起阅读 »

使用Native.js引入IOS的NFC相关类失败,是不是Native.js不支持IOS的NFC功能?

NFC Native.JS iOS

使用以下代码测试,引入类打印结果为null:

getNfcAPI(){  
  let ndef = plus.ios.importClass("NFCNDEFReaderSession");  
  console.log("API",nedf);  
//结果为:API,null  
}
继续阅读 »

使用以下代码测试,引入类打印结果为null:

getNfcAPI(){  
  let ndef = plus.ios.importClass("NFCNDEFReaderSession");  
  console.log("API",nedf);  
//结果为:API,null  
}
收起阅读 »

3.98 uni.getLocation 失效了嘛?

uni.getlocation

win 10
HX 3.98
调用uni.getLocation success 没结果,fail 也没结果 也不报错

win 10
HX 3.98
调用uni.getLocation success 没结果,fail 也没结果 也不报错

身份证阅读器社保卡读卡器Uniapp安卓原生项目实战SDK二次开发包

DONSEE系列身份证多功能读写器Android Uniapp API接口规范V1.0.0

本项目Uniapp调用了身份证读卡器的库文件:DonseeDeviceLib-debug.aar,该库放到nativeplugins\donsee-card\android,然后会自动加载。SDK会自动检查是否拥有USB设备权限,如没有权限,会自动进行申请,如果您的安卓设备是定制设备,遇到找不到设备时,请询问设备定制方是否开放了USB接口的系统层权限。

<!--
//========================================================================
// Uniapp Android 端,调用身份证阅读器.aar原生态读卡库
// 版权所有 广东东信智能科技有限公司
// 未经授权不允许对程序代码以任何形式任何目的的再发布
// 网站:http://www.eastcoms.com/
// 前端修改日期:2023.12.07
// =======================================================================
-->

<template>
<view class="content">
<text class="title">{{ title }}</text>
<view>

             <image  
                  v-bind:src="imageUlr"  
                 style="width:204rpx; height: 256rpx;"   
                  >  
                </image>  
        <view  
        class="resultInfor"  
        style="white-space: pre-wrap;"  
        >{{ result }}</view>  

        <button type="primary" @click="open">打开设备</button>  
        <button type="primary" @click="beep">蜂鸣器</button>  
        <button type="primary" @click="readIDCard">读取身份</button>  
        <button type="primary" @click="readSSCard">读取社保卡</button>  
        <button type="primary" @click="getBankCardNo">读取银行</button>  
        <button type="primary" @click="readICUid">IC卡卡号</button>  
        <button type="primary" @click="close">关闭设备</button>  
        <!-- <view class="">  
            {{result1}}  
        </view> -->  

    </view>  
</view>  

</template>

<script>
const DonseeDevice = uni.requireNativePlugin('Card-Module');

export default {
data() {
return {
title: '欢迎使用广东东信智能科技有限公司SDK',
result: '请先打开读卡设备',
result1:0,
imageUlr: '',
};

},  
onLoad() {},  
methods: {  

    open(){  

        DonseeDevice.Donsee_Open(data => {  
                if(data.result == 0){  
                    this.result = "打开设备成功"  
                }else if(data.result == -2){  
                    this.result = "打开设备失败:未发现读卡器";  
                }else if(data.result == -4){  
                    this.result = "打开设备失败:未获取usb权限";  
                }else {  
                    this.result = "打开设备失败:"+data.result;  
                }  

            });  

    },  
    beep(){  
        let ret =  DonseeDevice.Donsee_Beep();  
        if(ret == 0){  
            this.result ="蜂鸣成功";  
        }else{  
            this.result ="蜂鸣失败 "+ret;  
        }  

    },  
    close(){  

    let ret =  DonseeDevice.Donsee_Close();  
    if(ret == 0){  
        this.result ="关闭设备成功";  
    }else{  
        this.result ="关闭设备失败 "+ret;  
    }  

    },  
    readIDCard(){  

        let idInfo = DonseeDevice.Donsee_ReadIDCard(1);  //1:文字+照片  2:文字+照片+指纹  

        if(idInfo.code == 0){  
                this.result = "中文姓名:"+ idInfo.name+"\n"  
                +"英文姓名:"+ idInfo.enFullName+"\n"//如果是Y,则需要和英文姓名备用reserveName组合才是完整姓名  
                +"性    别:"+ idInfo.sex+"\n"  
                +"民    族:"+ idInfo.nation+"\n"  
                +"出身日期:"+ idInfo.birthDate+"\n"  
                +"家庭住址:"+ idInfo.address+"\n"  
                +"身份号:"+ idInfo.idNO+"\n"  
                +"签发单位:"+ idInfo.organs+"\n"  
                +"开始有效期限:"+ idInfo.issueDate+"\n"  
                +"结束有效期限:"+ idInfo.expireDate+"\n"  
                +"证件类别:"+ idInfo.certType+"\n"  //0 I J Y四种证件类型  
                +"证件版本:"+ idInfo.certVersion+"\n"  
                +"英文姓名备用:"+ idInfo.reserveName+"\n"    
                +"既往版本号码:"+ idInfo.previousVersionNO+"\n"  
                +"通行证号:"+ idInfo.passNu+"\n"  
                +"签发数次:"+ idInfo.signCount+"\n"  
                //+"指纹数据:"+ idInfo.figData+"\n"  
                this.imageUlr = "data:image/png;base64,"+idInfo.headStr;  //照片base64数据  
        }else{  
            this.result = idInfo.code;    
        }  

    },  

    readSSCard(){  

        let ssCardInfor = DonseeDevice.Donsee_ReadSSCard();  

        if(ssCardInfor.code == 0){  

                this.result = "姓    名:"+ ssCardInfor.name+"\n"  
                +"性    别:"+ ssCardInfor.sex+"\n"  
                +"民    族:"+ ssCardInfor.nation+"\n"  
                +"出身日期:"+ ssCardInfor.birthDate+"\n"  
                +"城市代码:"+ ssCardInfor.city+"\n"  
                +"身份号:"+ ssCardInfor.idNO+"\n"  
                +"社保卡号:"+ ssCardInfor.cardNO+"\n"  
                +"开始有效期限:"+ ssCardInfor.issueDate+"\n"  
                +"结束有效期限:"+ ssCardInfor.expireDate+"\n"  
                +"社保版本:"+ ssCardInfor.fullVersion+"\n"  

        }else{  
            this.result = ssCardInfor.code;   
        }  

    },  

    getBankCardNo(){  

        let cardInfor = DonseeDevice.Donsee_GetBankCardNo();  

        if(cardInfor.code == 0){  
                this.result = "卡号:"+ cardInfor.cardNumber  

        }else{  
            this.result = cardInfor.code;     
        }  

    },  

    readICUid(){  
        let cardInfor = DonseeDevice.Donsee_ReadICUid();  

        if(cardInfor.code == 0){  
                this.result = "卡号:"+ cardInfor.cardNumber  

        }else{  
            this.result = cardInfor.code;     
        }  

    }  
}  

};
</script>

<style>
.content {
text-align: left;
height: 400upx;
}
.resultInfor {
text-align: left;
}

.title {
font-size: 36upx;
color: #8f8f94;
}

button {
margin-top: 20upx;
margin-bottom: 20upx;
}

.button-sp-area {
margin: 0 auto;
width: 60%;
}

.content {
text-align: center;
height: 400upx;
}

.wrapper {
flex-direction: column;
justify-content: center;
}

.button {
width: 200px;
margin-top: 20px;
margin-left: 20px;
padding-top: 20px;
padding-bottom: 20px;
border-width: 2px;
border-style: solid;
border-color: #458b00;
background-color: #458b00;
}

.text {
font-size: 30px;
color: #666666;
text-align: center;
}
</style>

继续阅读 »

DONSEE系列身份证多功能读写器Android Uniapp API接口规范V1.0.0

本项目Uniapp调用了身份证读卡器的库文件:DonseeDeviceLib-debug.aar,该库放到nativeplugins\donsee-card\android,然后会自动加载。SDK会自动检查是否拥有USB设备权限,如没有权限,会自动进行申请,如果您的安卓设备是定制设备,遇到找不到设备时,请询问设备定制方是否开放了USB接口的系统层权限。

<!--
//========================================================================
// Uniapp Android 端,调用身份证阅读器.aar原生态读卡库
// 版权所有 广东东信智能科技有限公司
// 未经授权不允许对程序代码以任何形式任何目的的再发布
// 网站:http://www.eastcoms.com/
// 前端修改日期:2023.12.07
// =======================================================================
-->

<template>
<view class="content">
<text class="title">{{ title }}</text>
<view>

             <image  
                  v-bind:src="imageUlr"  
                 style="width:204rpx; height: 256rpx;"   
                  >  
                </image>  
        <view  
        class="resultInfor"  
        style="white-space: pre-wrap;"  
        >{{ result }}</view>  

        <button type="primary" @click="open">打开设备</button>  
        <button type="primary" @click="beep">蜂鸣器</button>  
        <button type="primary" @click="readIDCard">读取身份</button>  
        <button type="primary" @click="readSSCard">读取社保卡</button>  
        <button type="primary" @click="getBankCardNo">读取银行</button>  
        <button type="primary" @click="readICUid">IC卡卡号</button>  
        <button type="primary" @click="close">关闭设备</button>  
        <!-- <view class="">  
            {{result1}}  
        </view> -->  

    </view>  
</view>  

</template>

<script>
const DonseeDevice = uni.requireNativePlugin('Card-Module');

export default {
data() {
return {
title: '欢迎使用广东东信智能科技有限公司SDK',
result: '请先打开读卡设备',
result1:0,
imageUlr: '',
};

},  
onLoad() {},  
methods: {  

    open(){  

        DonseeDevice.Donsee_Open(data => {  
                if(data.result == 0){  
                    this.result = "打开设备成功"  
                }else if(data.result == -2){  
                    this.result = "打开设备失败:未发现读卡器";  
                }else if(data.result == -4){  
                    this.result = "打开设备失败:未获取usb权限";  
                }else {  
                    this.result = "打开设备失败:"+data.result;  
                }  

            });  

    },  
    beep(){  
        let ret =  DonseeDevice.Donsee_Beep();  
        if(ret == 0){  
            this.result ="蜂鸣成功";  
        }else{  
            this.result ="蜂鸣失败 "+ret;  
        }  

    },  
    close(){  

    let ret =  DonseeDevice.Donsee_Close();  
    if(ret == 0){  
        this.result ="关闭设备成功";  
    }else{  
        this.result ="关闭设备失败 "+ret;  
    }  

    },  
    readIDCard(){  

        let idInfo = DonseeDevice.Donsee_ReadIDCard(1);  //1:文字+照片  2:文字+照片+指纹  

        if(idInfo.code == 0){  
                this.result = "中文姓名:"+ idInfo.name+"\n"  
                +"英文姓名:"+ idInfo.enFullName+"\n"//如果是Y,则需要和英文姓名备用reserveName组合才是完整姓名  
                +"性    别:"+ idInfo.sex+"\n"  
                +"民    族:"+ idInfo.nation+"\n"  
                +"出身日期:"+ idInfo.birthDate+"\n"  
                +"家庭住址:"+ idInfo.address+"\n"  
                +"身份号:"+ idInfo.idNO+"\n"  
                +"签发单位:"+ idInfo.organs+"\n"  
                +"开始有效期限:"+ idInfo.issueDate+"\n"  
                +"结束有效期限:"+ idInfo.expireDate+"\n"  
                +"证件类别:"+ idInfo.certType+"\n"  //0 I J Y四种证件类型  
                +"证件版本:"+ idInfo.certVersion+"\n"  
                +"英文姓名备用:"+ idInfo.reserveName+"\n"    
                +"既往版本号码:"+ idInfo.previousVersionNO+"\n"  
                +"通行证号:"+ idInfo.passNu+"\n"  
                +"签发数次:"+ idInfo.signCount+"\n"  
                //+"指纹数据:"+ idInfo.figData+"\n"  
                this.imageUlr = "data:image/png;base64,"+idInfo.headStr;  //照片base64数据  
        }else{  
            this.result = idInfo.code;    
        }  

    },  

    readSSCard(){  

        let ssCardInfor = DonseeDevice.Donsee_ReadSSCard();  

        if(ssCardInfor.code == 0){  

                this.result = "姓    名:"+ ssCardInfor.name+"\n"  
                +"性    别:"+ ssCardInfor.sex+"\n"  
                +"民    族:"+ ssCardInfor.nation+"\n"  
                +"出身日期:"+ ssCardInfor.birthDate+"\n"  
                +"城市代码:"+ ssCardInfor.city+"\n"  
                +"身份号:"+ ssCardInfor.idNO+"\n"  
                +"社保卡号:"+ ssCardInfor.cardNO+"\n"  
                +"开始有效期限:"+ ssCardInfor.issueDate+"\n"  
                +"结束有效期限:"+ ssCardInfor.expireDate+"\n"  
                +"社保版本:"+ ssCardInfor.fullVersion+"\n"  

        }else{  
            this.result = ssCardInfor.code;   
        }  

    },  

    getBankCardNo(){  

        let cardInfor = DonseeDevice.Donsee_GetBankCardNo();  

        if(cardInfor.code == 0){  
                this.result = "卡号:"+ cardInfor.cardNumber  

        }else{  
            this.result = cardInfor.code;     
        }  

    },  

    readICUid(){  
        let cardInfor = DonseeDevice.Donsee_ReadICUid();  

        if(cardInfor.code == 0){  
                this.result = "卡号:"+ cardInfor.cardNumber  

        }else{  
            this.result = cardInfor.code;     
        }  

    }  
}  

};
</script>

<style>
.content {
text-align: left;
height: 400upx;
}
.resultInfor {
text-align: left;
}

.title {
font-size: 36upx;
color: #8f8f94;
}

button {
margin-top: 20upx;
margin-bottom: 20upx;
}

.button-sp-area {
margin: 0 auto;
width: 60%;
}

.content {
text-align: center;
height: 400upx;
}

.wrapper {
flex-direction: column;
justify-content: center;
}

.button {
width: 200px;
margin-top: 20px;
margin-left: 20px;
padding-top: 20px;
padding-bottom: 20px;
border-width: 2px;
border-style: solid;
border-color: #458b00;
background-color: #458b00;
}

.text {
font-size: 30px;
color: #666666;
text-align: center;
}
</style>

收起阅读 »