HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

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。
    • 用户未同意隐私政策\服务条款前,禁止获取、传输用户数据;禁止弹出系统权限弹窗向用户申请系统权限。
    • 请勿在App处于未激活状态时(例如App在后台运行)请求优量汇相关服务
  2. 应在APP的隐私政策、信息共享清单中明确披露uni-AD原生广告SDK和其他三方广告SDK(如优量汇、穿山甲、快手等)的名称、功能、信息类型及隐私政策等信息。
    uni-AD原生广告SDK披露信息可参考下段内容

    SDK名称:uni-AD原生广告SDK  
    
    开发者:数字天堂(北京)网络技术有限公司  
    
    主要功能:广告投放、三方广告联盟SDK聚合服务  
    
    个人信息类型:必要信息:设备信息(设备品牌、型号、操作系统版本、分辨率、设备语言、手机系统时间、设备名称、时区、屏幕密度),应用信息(应用名、应用包名、版本号)可选信息:设备信息(网络类型、IP地址、User Agent信息、BSSID、SSID),设备标识符(如IMEI/MEID、IMSI、GAID(仅GMS服务)、AndroidID、OAID),运营商信息,位置信息,传感器,应用安装列表。  
    
    SDK隐私政策:https://dcloud.io/license/uni-ad.html  
  3. SDK可选个人信息的配置说明

    <table style="word-break:break-all">
    <tr>
    <th style="width:30%">可选个人信息类型及字段</th>
    <th style="width:15%">使用目的</th>
    <th style="width:15%">使用场景</th>
    <th style="width:40%">配置方案及示例</th>
    </tr>
    <tr>
    <td><b>标识符</b><br />第三方开发者可以选择是否授权本SDK收集如下信息:<br />IMEI(Device ID)、Android_ID、OAID、MAC地址</td>
    <td>广告投放、广告归因、广告监测、反作弊</td>
    <td>在进行广告投放和广告统计分析时使用</td>
    <td>
    <pre><code class="language-java">
    DCloudAdManager.init(this,config);
    // 初始化之后立即调用setPrivacyConfig方法
    DCloudAdManager.setPrivacyConfig(new DCloudAdManager.PrivacyConfig() {
    /**

    • 是否允许SDK主动获取手机设备信息,如:imei,运营商信息
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanUsePhoneState() {
      return false;
      }
      /**
    • 是否允许SDK主动获取MAC地址
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanGetMacAddress() {
      return false;
      }
      /**
    • 是否允许SDK主动获取Android id
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanGetAndroidId() {
      return false;
      }
      /**
    • 是否允许SDK主动获取OAID
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanGetOAID() {
      return false;
      }
      /**
    • 是否允许SDK主动获取IP地址
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanGetIP() {
      return false;
      }
      });
      </code></pre></td>
      </tr>
      <tr>
      <td><b>应用安装列表信息</b><br />第三方开发者可以选择是否授权本SDK收集如下信息:<br />应用安装列表信息</td>
      <td>广告投放、反作弊</td>
      <td>在进行广告投放和广告统计分析时使用</td>
      <td>
      <pre><code class="language-java">DCloudAdManager.init(this,config);
      // 初始化之后立即调用setPrivacyConfig方法
      DCloudAdManager.setPrivacyConfig(new DCloudAdManager.PrivacyConfig() {
      /**
    • 是否允许SDK主动收集上传应用列表
    • @return true 允许SDK收集,false 不允许
      */
      @Override
      public boolean isCanGetInstallAppList() {
      return super.isCanGetInstallAppList();
      }
      /**
    • 是否允许SDK主动收集上传后台运行的应用列表
    • @return true 允许SDK收集,false 不允许
      */
      @Override
      public boolean isCanGetRunningApps() {
      return super.isCanGetRunningApps();
      }
      });</code></pre>
      </td>
      </tr>
      <tr>
      <td><b>传感器信息</b><br />第三方开发者可以选择是否授权本SDK收集如下信息:<br />线性加速度传感器、磁场传感器、旋转矢量传感器、加速度传感器、陀螺仪传感器</td>
      <td>广告投放、广告反作弊</td>
      <td>在进行摇一摇、扭一扭等广告投放和广告反作弊分析时使用</td>
      <td>
      <pre><code class="language-java">DCloudAdManager.init(this,config);
      // 初始化之后立即调用setPrivacyConfig方法
      DCloudAdManager.setPrivacyConfig(new DCloudAdManager.PrivacyConfig() {
      /**
    • 是否允许使用传感器
    • @return true 开启, false 关闭,默认值为true
      */
      @Override
      public boolean isCanUseSensor() {
      return super.isCanUseSensor();
      }
      });</code></pre>
      </td>
      </tr>
      <tr>
      <td><b>位置信息</b><br />第三方开发者可以选择是否授权本SDK收集如下信息:<br />精确位置信息、粗略位置信息</td>
      <td>广告投放、广告反作弊</td>
      <td>在进行广告投放和广告统计分析时使用</td>
      <td>
      <pre><code class="language-java">DCloudAdManager.init(this,config);
      // 初始化之后立即调用setPrivacyConfig方法
      DCloudAdManager.setPrivacyConfig(new DCloudAdManager.PrivacyConfig() {
      /**
    • 是否允许SDK主动获取地理位置信息
    • @return true可以获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanUseLocation() {
      return super.isCanUseLocation();
      }
      });</code></pre>
      </td>
      </tr>
      <tr>
      <td><b>运营商信息</b><br />第三方开发者可以选择是否授权本SDK收集如下信息:<br />运营商信息</td>
      <td>广告投放、广告反作弊</td>
      <td>在进行广告投放和广告统计分析时使用</td>
      <td><pre><code class="language-java">DCloudAdManager.init(this,config);
      // 初始化之后立即调用setPrivacyConfig方法
      DCloudAdManager.setPrivacyConfig(new DCloudAdManager.PrivacyConfig() {
      /**
    • 是否允许SDK主动获取手机设备信息,如:imei
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanUseWifiState() {
      return super.isCanUseWifiState();
      }

    /**

    • 是否允许SDK主动获取手机运营商信息
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanUseSimOperator() {
      return super.isCanUseSimOperator();
      }
      });</code></pre>
      </td>
      </tr>
      </table>
  4. SDK 权限说明

    权限名称 功能 目的 申请时机
    android.permission.ACCESS_NETWORK_STATE<br/>android.permission.ACCESS_WIFI_STATE 获取网络信息 广告监测、统计分析 开发者在调用需要该权限的SDK功能且用户已授权相应权限时。
    android.permission.ACCESS_COARSE_LOCATION<br/>android.permission.ACCESS_FINE_LOCATION 获取位置信息 广告主归因及投放 开发者在调用需要该权限的SDK功能且用户已授权相应权限时。
    android.permission.READ_PHONE_STATE 获取手机设备标识等信息 广告监测、统计分析、广告主投放 开发者在调用需要该权限的SDK功能且用户已授权相应权限时。
  5. 应在应用设置页面等位置提供“个性化广告”关闭按钮。
    uni-AD原生广告SDK提供设置“个性化广告”开关的API

    是否开启个性化广告 false为关闭个性化推荐,默认为true  
    
    DCloudAdManager.setPersonalAd(Context context, boolean isOpen);  
  6. 应在向用户展示广告时,提供“关闭(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<br/>com.android.gdt.qone </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>设备及使用信息:设备标识符(OAID)、设备信息(设备型号、设备硬件信息、操作系统、系统设置、设备使用信息)、应用基本信息、应用设置信息、应用使用信息、传感器信息(陀螺仪、加速度计、旋转矢量传感器、磁力计、气压计)、网络信息、运营商信息、IP地址、WLAN信息(WiFi状态、WiFi参数、WiFi列表、BSSID与SSID)。广告互动信息:
您与本服务投放的广告之间的交互行为,如曝光、点击、内容交互等信息。。广告主服务互动信息:
基于广告投放优化、广告归因和效果分析等目的,广告主可能会向我们提供其与用户交互时获得的转化记录。</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.ACCESS_COARSE_LOCATION<br>
android.permission.ACCESS_FINE_LOCATION<br>
</td>
<td>单次请求的广告定向投放、程序化广告投放、广告监测归因与反作弊。</td>
<td><a href="https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/whale-hong-kinetic-energy-sdk-privacy-statement-0000001658283582">HUAWEI Ads 隐私声明</a><br><br>和<br><br><a href="https://legal.cloud.huawei.com/terms/scope/huawei/ads/privacy-statement.htm?&code=CN&language=zh-CN&branchid=0&contenttag=default">HUAWEI Ads SDK隐私安全说明</a></td>
</tr>
<tr>
<td>章鱼广告(Octopus SDK)</td>
<td>com.octopus.ad</td>
<td>增强广告 </td>
<td>设备信息:必选信息:设备品牌、型号、软件系统版本、屏幕密度、屏幕分辨率、设备语言、设备时区、CPU信息、可用存储空间大小等基础信息、AndroidID、OAID;可选信息:设备标识符(如OAID、GAID(仅GMS服务)。网络信息(必选):运营商信息、Wi-Fi状态、网络信号强度、IP地址。应用信息(必选):应用包名、运行中的进程信息、版本号。传感器信息(可选):线性加速度传感器、磁场传感器、旋转矢量传感器、加速度传感器、陀螺仪传感器。广告信息(必选):对广告的展示、点击及转化等交互数据。性能数据(必选):崩溃数据、性能数据</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>倍孜广告(AdScope SDK)</td>
<td>com.beizi.ad<br/>ms.bz.bd.c</td>
<td>增强广告 </td>
<td>设备信息(必选):设备品牌、设备型号、设备时区、设备语言、系统版本、UserAgent信息、屏幕高宽、屏幕方向、屏幕DPI信息、系统更新时间、磁盘空间、物理内存、sim卡状态、cpu。网络信息(必选):网络类型、运营商。应用信息(必选):开发者应用名、应用版本号、应用包名、运行状态。标识符(必选):OAID。位置信息(可选):精确位置信息、粗略位置信息。传感器信息(可选):重力传感器、加速度传感器、方向传感器、陀螺仪、压力传感器、线性加速度传感器。广告信息(必选):产品交互数据、广告数据(展示、点击、转化)。诊断数据(必选):崩溃数据、性能数据</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<br/>com.fl.saas</td>
<td>增强广告 </td>
<td>设备信息:必选信息:设备品牌、设备型号、设备名称、软件系统版本、屏幕密度、屏幕分辨率、设备语言、设备时区、手机系统重启时间;可选信息:IMEI、IMSI、设备的MAC地址、User Agent、AndroidID。标识符:可选信息:设备ID(国内用户OAID、海外用户GAID)。网络信息:必选信息:IP地址、运营商信息、Wi-Fi状态、网络信号强度。应用信息:必选信息:应用版本、应用包名、应用名称、应用前后台状态。可选信息:应用列表信息。传感器信息:可选信息:重力传感器、加速度传感器、方向传感器、陀螺仪、压力传感器、重力传感器、线性加速度传感器。广告信息:必选信息:当用户与我们在您应用上推广的广告发生了交互行为,我们会手机广告的展示、点击及转化等交互数据。位置信息::粗略位置信息(WI-FI列表、WALAN接入点(如SSID、BSSID))、基站。其他信息:必选信息:系统崩溃数据、性能数据
</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.alliance.ssp.ad</td>
<td>增强广告</td>
<td>设备信息:
必选信息:设备品牌、型号、软件系统版本、屏幕密度、屏幕分辨率、设备语言、设备时区等基础信息 【仅iOS】磁盘总空间、系统总内存空间;
可选信息:设备MAC地址、设备标识符(如IMEI、MEID,具体字段因软硬件版本不同而存在差异)如AndroidID、OAID、IMSI、IMEI、MEID 等。网络信息:
必选信息:运营商信息、网络状态(包括BSSID、SSID 等)、IP地址。应用信息 :必选信息:应用包名、版本号;可选信息:应用安装列表信息。传感器信息:必选信息:加速度传感器。广告信息:
必选信息:对广告的填充、展示、点击及转化等交互数据。位置信息:
可选信息:精确位置信息。性能数据:
必选信息:如崩溃数据、性能数据</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.ACCESS_FINE_LOCATION<br>
android.permission.ACCESS_COARSE_LOCATION<br>
android.permission.READ_EXTERNAL_STORAGE<br>
android.permission.WRITE_EXTERNAL_STORAGE<br>
android.permission.QUERY_ALL_PACKAGES<br>
</td>
<td>广告投放及广告反作弊。广告监测归因。保证网络服务有效性及稳定性。摇一摇、扭一扭功能。减少App崩溃、提供稳定可靠的服务</td>
<td><a href="https://lemon.gameley.com/flowdocs/%E4%BC%98%E6%8E%A8%E5%B9%BF%E5%91%8A%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%9A%90%E7%A7%81%E5%8D%8F%E8%AE%AE/%E4%BC%98%E6%8E%A8%E5%B9%BF%E5%91%8A%E5%B9%B3%E5%8F%B0SDK%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96.html">优推广告平台 SDK 隐私政策</a></td>
</tr>
<tr>
<td>微信开放平台</td>
<td>com.tencent.mm</td>
<td>快捷广告</td>
<td>网络信息、设备信息</td>
<td style="font-size:12px">
</td>
<td>打开小程序</td>
<td><a href="https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/RYiYJkLOrQwu0nb8">https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/RYiYJkLOrQwu0nb8</a></td>
</tr>
<tr>
<td>图灵盾风险识别SDK</td>
<td></td>
<td>腾讯优量汇必需功能</td>
<td>硬件序列号、网络状态、系统设置、系统属性、设备型号、操作系统、IP地址、运营商信息、标识符如OAID、IDFA、IDFV等
由第三方开发者根据实际情况决定是否采集并传输给SDK,SDK采取去标识、加密等方式进行处理</td>
<td style="font-size:12px">
</td>
<td>广告推荐、归因及反作弊场景统计,如虚假流量识别等。</td>
<td><a href="https://privacy.qq.com/document/preview/5331f064a91a47eb93993fdacb91c8f7">https://privacy.qq.com/document/preview/5331f064a91a47eb93993fdacb91c8f7</a></td>
</tr>

<tr>
<td>Qone SDK</td>
<td></td>
<td>腾讯优量汇必需功能</td>
<td>IP地址、设备型号、设备标识信息(OAID、Android ID、IDFA、IDFV等)</td>
<td style="font-size:12px">
</td>
<td>广告归因,识别黑产和虚假设备</td>
<td><a href="https://privacy.qq.com/document/preview/1a3015ecc0f240ebad548012fc64b157">https://privacy.qq.com/document/preview/1a3015ecc0f240ebad548012fc64b157</a></td>
</tr>
<tr>
<td>MSA移动安全联盟</td>
<td></td>
<td>获取OAID(可选)</td>
<td>品牌信息:设备制造商、设备型号、设备品牌。网络信息:设备网络运营商名称。应用软件信息:App包名及签名信息,或在对应应用商店的APPID。</td>
<td style="font-size:12px">
</td>
<td>判断终端品牌,调用接口。判断是否为虚拟机环境。生成VAID时判断是否为同一开发者。</td>
<td><a href="https://privacy.qq.com/document/preview/1a3015ecc0f240ebad548012fc64b157">https://privacy.qq.com/document/preview/1a3015ecc0f240ebad548012fc64b157</a></td>
</tr>
</table>

继续阅读 »

SDK合规指引

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

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

    SDK名称:uni-AD原生广告SDK  
    
    开发者:数字天堂(北京)网络技术有限公司  
    
    主要功能:广告投放、三方广告联盟SDK聚合服务  
    
    个人信息类型:必要信息:设备信息(设备品牌、型号、操作系统版本、分辨率、设备语言、手机系统时间、设备名称、时区、屏幕密度),应用信息(应用名、应用包名、版本号)可选信息:设备信息(网络类型、IP地址、User Agent信息、BSSID、SSID),设备标识符(如IMEI/MEID、IMSI、GAID(仅GMS服务)、AndroidID、OAID),运营商信息,位置信息,传感器,应用安装列表。  
    
    SDK隐私政策:https://dcloud.io/license/uni-ad.html  
  3. SDK可选个人信息的配置说明

    <table style="word-break:break-all">
    <tr>
    <th style="width:30%">可选个人信息类型及字段</th>
    <th style="width:15%">使用目的</th>
    <th style="width:15%">使用场景</th>
    <th style="width:40%">配置方案及示例</th>
    </tr>
    <tr>
    <td><b>标识符</b><br />第三方开发者可以选择是否授权本SDK收集如下信息:<br />IMEI(Device ID)、Android_ID、OAID、MAC地址</td>
    <td>广告投放、广告归因、广告监测、反作弊</td>
    <td>在进行广告投放和广告统计分析时使用</td>
    <td>
    <pre><code class="language-java">
    DCloudAdManager.init(this,config);
    // 初始化之后立即调用setPrivacyConfig方法
    DCloudAdManager.setPrivacyConfig(new DCloudAdManager.PrivacyConfig() {
    /**

    • 是否允许SDK主动获取手机设备信息,如:imei,运营商信息
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanUsePhoneState() {
      return false;
      }
      /**
    • 是否允许SDK主动获取MAC地址
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanGetMacAddress() {
      return false;
      }
      /**
    • 是否允许SDK主动获取Android id
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanGetAndroidId() {
      return false;
      }
      /**
    • 是否允许SDK主动获取OAID
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanGetOAID() {
      return false;
      }
      /**
    • 是否允许SDK主动获取IP地址
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanGetIP() {
      return false;
      }
      });
      </code></pre></td>
      </tr>
      <tr>
      <td><b>应用安装列表信息</b><br />第三方开发者可以选择是否授权本SDK收集如下信息:<br />应用安装列表信息</td>
      <td>广告投放、反作弊</td>
      <td>在进行广告投放和广告统计分析时使用</td>
      <td>
      <pre><code class="language-java">DCloudAdManager.init(this,config);
      // 初始化之后立即调用setPrivacyConfig方法
      DCloudAdManager.setPrivacyConfig(new DCloudAdManager.PrivacyConfig() {
      /**
    • 是否允许SDK主动收集上传应用列表
    • @return true 允许SDK收集,false 不允许
      */
      @Override
      public boolean isCanGetInstallAppList() {
      return super.isCanGetInstallAppList();
      }
      /**
    • 是否允许SDK主动收集上传后台运行的应用列表
    • @return true 允许SDK收集,false 不允许
      */
      @Override
      public boolean isCanGetRunningApps() {
      return super.isCanGetRunningApps();
      }
      });</code></pre>
      </td>
      </tr>
      <tr>
      <td><b>传感器信息</b><br />第三方开发者可以选择是否授权本SDK收集如下信息:<br />线性加速度传感器、磁场传感器、旋转矢量传感器、加速度传感器、陀螺仪传感器</td>
      <td>广告投放、广告反作弊</td>
      <td>在进行摇一摇、扭一扭等广告投放和广告反作弊分析时使用</td>
      <td>
      <pre><code class="language-java">DCloudAdManager.init(this,config);
      // 初始化之后立即调用setPrivacyConfig方法
      DCloudAdManager.setPrivacyConfig(new DCloudAdManager.PrivacyConfig() {
      /**
    • 是否允许使用传感器
    • @return true 开启, false 关闭,默认值为true
      */
      @Override
      public boolean isCanUseSensor() {
      return super.isCanUseSensor();
      }
      });</code></pre>
      </td>
      </tr>
      <tr>
      <td><b>位置信息</b><br />第三方开发者可以选择是否授权本SDK收集如下信息:<br />精确位置信息、粗略位置信息</td>
      <td>广告投放、广告反作弊</td>
      <td>在进行广告投放和广告统计分析时使用</td>
      <td>
      <pre><code class="language-java">DCloudAdManager.init(this,config);
      // 初始化之后立即调用setPrivacyConfig方法
      DCloudAdManager.setPrivacyConfig(new DCloudAdManager.PrivacyConfig() {
      /**
    • 是否允许SDK主动获取地理位置信息
    • @return true可以获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanUseLocation() {
      return super.isCanUseLocation();
      }
      });</code></pre>
      </td>
      </tr>
      <tr>
      <td><b>运营商信息</b><br />第三方开发者可以选择是否授权本SDK收集如下信息:<br />运营商信息</td>
      <td>广告投放、广告反作弊</td>
      <td>在进行广告投放和广告统计分析时使用</td>
      <td><pre><code class="language-java">DCloudAdManager.init(this,config);
      // 初始化之后立即调用setPrivacyConfig方法
      DCloudAdManager.setPrivacyConfig(new DCloudAdManager.PrivacyConfig() {
      /**
    • 是否允许SDK主动获取手机设备信息,如:imei
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanUseWifiState() {
      return super.isCanUseWifiState();
      }

    /**

    • 是否允许SDK主动获取手机运营商信息
    • @return true允许获取,false禁止获取。默认为true
      */
      @Override
      public boolean isCanUseSimOperator() {
      return super.isCanUseSimOperator();
      }
      });</code></pre>
      </td>
      </tr>
      </table>
  4. SDK 权限说明

    权限名称 功能 目的 申请时机
    android.permission.ACCESS_NETWORK_STATE<br/>android.permission.ACCESS_WIFI_STATE 获取网络信息 广告监测、统计分析 开发者在调用需要该权限的SDK功能且用户已授权相应权限时。
    android.permission.ACCESS_COARSE_LOCATION<br/>android.permission.ACCESS_FINE_LOCATION 获取位置信息 广告主归因及投放 开发者在调用需要该权限的SDK功能且用户已授权相应权限时。
    android.permission.READ_PHONE_STATE 获取手机设备标识等信息 广告监测、统计分析、广告主投放 开发者在调用需要该权限的SDK功能且用户已授权相应权限时。
  5. 应在应用设置页面等位置提供“个性化广告”关闭按钮。
    uni-AD原生广告SDK提供设置“个性化广告”开关的API

    是否开启个性化广告 false为关闭个性化推荐,默认为true  
    
    DCloudAdManager.setPersonalAd(Context context, boolean isOpen);  
  6. 应在向用户展示广告时,提供“关闭(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<br/>com.android.gdt.qone </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>设备及使用信息:设备标识符(OAID)、设备信息(设备型号、设备硬件信息、操作系统、系统设置、设备使用信息)、应用基本信息、应用设置信息、应用使用信息、传感器信息(陀螺仪、加速度计、旋转矢量传感器、磁力计、气压计)、网络信息、运营商信息、IP地址、WLAN信息(WiFi状态、WiFi参数、WiFi列表、BSSID与SSID)。广告互动信息:
您与本服务投放的广告之间的交互行为,如曝光、点击、内容交互等信息。。广告主服务互动信息:
基于广告投放优化、广告归因和效果分析等目的,广告主可能会向我们提供其与用户交互时获得的转化记录。</td>
<td style="font-size:12px">
android.permission.INTERNET<br>
android.permission.ACCESS_NETWORK_STATE<br>
android.permission.ACCESS_WIFI_STATE<br>
android.permission.ACCESS_COARSE_LOCATION<br>
android.permission.ACCESS_FINE_LOCATION<br>
</td>
<td>单次请求的广告定向投放、程序化广告投放、广告监测归因与反作弊。</td>
<td><a href="https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/whale-hong-kinetic-energy-sdk-privacy-statement-0000001658283582">HUAWEI Ads 隐私声明</a><br><br>和<br><br><a href="https://legal.cloud.huawei.com/terms/scope/huawei/ads/privacy-statement.htm?&code=CN&language=zh-CN&branchid=0&contenttag=default">HUAWEI Ads SDK隐私安全说明</a></td>
</tr>
<tr>
<td>章鱼广告(Octopus SDK)</td>
<td>com.octopus.ad</td>
<td>增强广告 </td>
<td>设备信息:必选信息:设备品牌、型号、软件系统版本、屏幕密度、屏幕分辨率、设备语言、设备时区、CPU信息、可用存储空间大小等基础信息、AndroidID、OAID;可选信息:设备标识符(如OAID、GAID(仅GMS服务)。网络信息(必选):运营商信息、Wi-Fi状态、网络信号强度、IP地址。应用信息(必选):应用包名、运行中的进程信息、版本号。传感器信息(可选):线性加速度传感器、磁场传感器、旋转矢量传感器、加速度传感器、陀螺仪传感器。广告信息(必选):对广告的展示、点击及转化等交互数据。性能数据(必选):崩溃数据、性能数据</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>倍孜广告(AdScope SDK)</td>
<td>com.beizi.ad<br/>ms.bz.bd.c</td>
<td>增强广告 </td>
<td>设备信息(必选):设备品牌、设备型号、设备时区、设备语言、系统版本、UserAgent信息、屏幕高宽、屏幕方向、屏幕DPI信息、系统更新时间、磁盘空间、物理内存、sim卡状态、cpu。网络信息(必选):网络类型、运营商。应用信息(必选):开发者应用名、应用版本号、应用包名、运行状态。标识符(必选):OAID。位置信息(可选):精确位置信息、粗略位置信息。传感器信息(可选):重力传感器、加速度传感器、方向传感器、陀螺仪、压力传感器、线性加速度传感器。广告信息(必选):产品交互数据、广告数据(展示、点击、转化)。诊断数据(必选):崩溃数据、性能数据</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<br/>com.fl.saas</td>
<td>增强广告 </td>
<td>设备信息:必选信息:设备品牌、设备型号、设备名称、软件系统版本、屏幕密度、屏幕分辨率、设备语言、设备时区、手机系统重启时间;可选信息:IMEI、IMSI、设备的MAC地址、User Agent、AndroidID。标识符:可选信息:设备ID(国内用户OAID、海外用户GAID)。网络信息:必选信息:IP地址、运营商信息、Wi-Fi状态、网络信号强度。应用信息:必选信息:应用版本、应用包名、应用名称、应用前后台状态。可选信息:应用列表信息。传感器信息:可选信息:重力传感器、加速度传感器、方向传感器、陀螺仪、压力传感器、重力传感器、线性加速度传感器。广告信息:必选信息:当用户与我们在您应用上推广的广告发生了交互行为,我们会手机广告的展示、点击及转化等交互数据。位置信息::粗略位置信息(WI-FI列表、WALAN接入点(如SSID、BSSID))、基站。其他信息:必选信息:系统崩溃数据、性能数据
</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.alliance.ssp.ad</td>
<td>增强广告</td>
<td>设备信息:
必选信息:设备品牌、型号、软件系统版本、屏幕密度、屏幕分辨率、设备语言、设备时区等基础信息 【仅iOS】磁盘总空间、系统总内存空间;
可选信息:设备MAC地址、设备标识符(如IMEI、MEID,具体字段因软硬件版本不同而存在差异)如AndroidID、OAID、IMSI、IMEI、MEID 等。网络信息:
必选信息:运营商信息、网络状态(包括BSSID、SSID 等)、IP地址。应用信息 :必选信息:应用包名、版本号;可选信息:应用安装列表信息。传感器信息:必选信息:加速度传感器。广告信息:
必选信息:对广告的填充、展示、点击及转化等交互数据。位置信息:
可选信息:精确位置信息。性能数据:
必选信息:如崩溃数据、性能数据</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.ACCESS_FINE_LOCATION<br>
android.permission.ACCESS_COARSE_LOCATION<br>
android.permission.READ_EXTERNAL_STORAGE<br>
android.permission.WRITE_EXTERNAL_STORAGE<br>
android.permission.QUERY_ALL_PACKAGES<br>
</td>
<td>广告投放及广告反作弊。广告监测归因。保证网络服务有效性及稳定性。摇一摇、扭一扭功能。减少App崩溃、提供稳定可靠的服务</td>
<td><a href="https://lemon.gameley.com/flowdocs/%E4%BC%98%E6%8E%A8%E5%B9%BF%E5%91%8A%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%9A%90%E7%A7%81%E5%8D%8F%E8%AE%AE/%E4%BC%98%E6%8E%A8%E5%B9%BF%E5%91%8A%E5%B9%B3%E5%8F%B0SDK%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96.html">优推广告平台 SDK 隐私政策</a></td>
</tr>
<tr>
<td>微信开放平台</td>
<td>com.tencent.mm</td>
<td>快捷广告</td>
<td>网络信息、设备信息</td>
<td style="font-size:12px">
</td>
<td>打开小程序</td>
<td><a href="https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/RYiYJkLOrQwu0nb8">https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/RYiYJkLOrQwu0nb8</a></td>
</tr>
<tr>
<td>图灵盾风险识别SDK</td>
<td></td>
<td>腾讯优量汇必需功能</td>
<td>硬件序列号、网络状态、系统设置、系统属性、设备型号、操作系统、IP地址、运营商信息、标识符如OAID、IDFA、IDFV等
由第三方开发者根据实际情况决定是否采集并传输给SDK,SDK采取去标识、加密等方式进行处理</td>
<td style="font-size:12px">
</td>
<td>广告推荐、归因及反作弊场景统计,如虚假流量识别等。</td>
<td><a href="https://privacy.qq.com/document/preview/5331f064a91a47eb93993fdacb91c8f7">https://privacy.qq.com/document/preview/5331f064a91a47eb93993fdacb91c8f7</a></td>
</tr>

<tr>
<td>Qone SDK</td>
<td></td>
<td>腾讯优量汇必需功能</td>
<td>IP地址、设备型号、设备标识信息(OAID、Android ID、IDFA、IDFV等)</td>
<td style="font-size:12px">
</td>
<td>广告归因,识别黑产和虚假设备</td>
<td><a href="https://privacy.qq.com/document/preview/1a3015ecc0f240ebad548012fc64b157">https://privacy.qq.com/document/preview/1a3015ecc0f240ebad548012fc64b157</a></td>
</tr>
<tr>
<td>MSA移动安全联盟</td>
<td></td>
<td>获取OAID(可选)</td>
<td>品牌信息:设备制造商、设备型号、设备品牌。网络信息:设备网络运营商名称。应用软件信息:App包名及签名信息,或在对应应用商店的APPID。</td>
<td style="font-size:12px">
</td>
<td>判断终端品牌,调用接口。判断是否为虚拟机环境。生成VAID时判断是否为同一开发者。</td>
<td><a href="https://privacy.qq.com/document/preview/1a3015ecc0f240ebad548012fc64b157">https://privacy.qq.com/document/preview/1a3015ecc0f240ebad548012fc64b157</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>

收起阅读 »

【解决】IOS,苹果上传提示:Error: Unexpected CFBundleExecutable Key.

App 苹果 iOS打包

来源:来源地址

找到第三方插件,所有的info.plist文件内找出 key 是 CFBundleExecutable(或 Executable file)的配置行,删除即可
window系统可以用vscode下载扩展插件Binary Plist就可以编辑

↓↓↓ 各位大佬点点赞

继续阅读 »

来源:来源地址

找到第三方插件,所有的info.plist文件内找出 key 是 CFBundleExecutable(或 Executable file)的配置行,删除即可
window系统可以用vscode下载扩展插件Binary Plist就可以编辑

↓↓↓ 各位大佬点点赞

收起阅读 »

HBuilderX与Vue3:开启Uniapp开发的新路程(教程)

HBuilderX入门教程 入门教程 uniapp 教程 uniapp

HBuilderX与Vue3:开启Uniapp开发的新纪元

随着技术的不断发展,使用最新版本的Vue3语法在HBuilderX中进行Uniapp开发已经成为了一种趋势。在这篇文章中,我们将为您详细介绍如何使用HBuilderX和Vue3来提高您的Uniapp开发效率。
一、HBuilderX与Vue3的完美结合
HBuilderX是一款强大的集成开发环境(IDE),它为Vue3开发者提供了一站式的解决方案。通过使用HBuilderX,您可以轻松地创建Vue3项目、编写代码、调试应用程序,以及预览和发布您的项目。此外,HBuilderX还支持多种浏览器和移动设备模拟器,让您可以在开发过程中实时查看应用程序的效果。

二、使用Vue3语法开发Uniapp的优势
使用Vue3语法开发Uniapp具有以下优势:

  1. 更好的性能:Vue3相比Vue2在性能上有了显著的提升,而Uniapp则可以在多个平台上运行,因此使用Vue3可以大大提高Uniapp的性能。
  2. 更简单的语法:Vue3的语法更加简洁、易读,使得开发者可以更快速地编写代码,同时减少了出错的可能性。
  3. 更好的组件化:Vue3引入了Composition API,使得组件的开发更加灵活和可维护。在Uniapp中,您可以利用Vue3的组件化特性,提高代码的可重用性和可维护性。

三、课程优势
1.一站式学习:本课程将为您详细介绍如何使用HBuilderX和Vue3进行Uniapp开发的全过程,让您从零开始,逐步掌握核心技能。

  1. 实战案例:我们为您准备了多个实战案例,让您在实际操作中深入理解知识点的运用,达到融会贯通的效果。
  2. 高效学习:课程采用线上回答+录播的形式,让您随时随地学习,高效利用时间。同时,我们还将为您提供丰富的课后资料,助您巩固知识,拓展视野。
  3. 课程目录:大于180课时从基础组件开始,每日更新。
    课程地址(点击跳转)
    5.社群交流:加入我们的学习社群,与志同道合的朋友一起交流心得,互相学习,共同进步。同时,我们还将定期进行更多实战项目和源码线上分享,让您收获更多干货。
    V:ANKR6699

四、课程特色
1.学员们可以免费使用讲师开发的Uniapp插件市场内的全部插件。
点击跳转
2.后期讲师开发的项目模板全套免费使用。
3.学员实际项目开发中,答疑遇到的问题。
4.后期录制的其他方面的课程可享受折扣。
8.HBuilderX支持实时预览功能,可以实时查看应用在真机和模拟器上的运行效果,方便开发者进行调试和优化。
9.代码提示和自动补全:HBuilderX提供了智能代码提示和自动补全功能,可以帮助开发者快速编写代码,减少出错率。
10.集成调试器:HBuilderX集成了调试器,可以帮助开发者进行代码调试,快速定位和解决问题。

五、课程收获

  1. 掌握HBuilderX的使用技巧和Vue3的最新语法,提升您的开发效率。
  2. 学会如何利用Vue3的组件化特性来提高代码的可重用性和可维护性。
  3. 掌握如何调试和优化Uniapp应用程序的性能,使其在多个平台上达到最佳运行效果。
  4. 通过实战案例的练习,让您具备独立开发高质量Uniapp应用程序的能力。
  5. 学会前后端全端开发,一技在手全栈拿手。
    还在等什么?快来加入我们的课程吧!让我们一起开启HBuilderX与Vue3的Uniapp开发之旅,共创美好未来!

六、如何参与学习
想要参与学习,您可以按照以下步骤操作:
1.访问我们的课程网站。
课程地址(点击跳转)
2.在课程页面中,您会看到课程介绍、课程大纲、课程费用等相关信息。请仔细阅读,了解课程的基本情况。
(每日更新)

  1. 在课程期间,我们将为您提供必要的学习资料和指导,帮助您更好地掌握知识和技能。请积极参与课堂讨论和实操练习,与同学们互相学习、共同进步。

七、结语
通过我们的HBuilderX与Vue3教学课程,您将掌握最新的Uniapp开发技能,为未来的职业发展打下坚实基础。我们期待您的加入,与我们一起开启全新的技术之旅!

八、附加价值
除了核心的知识和技能,我们的课程还为您提供了以下附加价值:

  1. 案例分享:我们会定期邀请成功的开发者进行案例分享,让您了解最新的开发趋势和实践经验,拓宽您的视野。
  2. 职业规划建议:我们提供个性化的职业规划建议,帮助您更好地规划未来的职业发展路径,提升职业竞争力。

九、总结
通过我们的HBuilderX与Vue3教学课程,您将获得最新的Uniapp开发技能、实战经验和附加价值。我们的导师团队将为您提供全方位的学习支持,帮助您在短时间内快速提升开发能力。加入我们的课程,开启全新的技术之旅,为未来的职业发展打下坚实基础!
现在就来报名参加我们的课程吧!让我们一起学习、成长和进步!

继续阅读 »

HBuilderX与Vue3:开启Uniapp开发的新纪元

随着技术的不断发展,使用最新版本的Vue3语法在HBuilderX中进行Uniapp开发已经成为了一种趋势。在这篇文章中,我们将为您详细介绍如何使用HBuilderX和Vue3来提高您的Uniapp开发效率。
一、HBuilderX与Vue3的完美结合
HBuilderX是一款强大的集成开发环境(IDE),它为Vue3开发者提供了一站式的解决方案。通过使用HBuilderX,您可以轻松地创建Vue3项目、编写代码、调试应用程序,以及预览和发布您的项目。此外,HBuilderX还支持多种浏览器和移动设备模拟器,让您可以在开发过程中实时查看应用程序的效果。

二、使用Vue3语法开发Uniapp的优势
使用Vue3语法开发Uniapp具有以下优势:

  1. 更好的性能:Vue3相比Vue2在性能上有了显著的提升,而Uniapp则可以在多个平台上运行,因此使用Vue3可以大大提高Uniapp的性能。
  2. 更简单的语法:Vue3的语法更加简洁、易读,使得开发者可以更快速地编写代码,同时减少了出错的可能性。
  3. 更好的组件化:Vue3引入了Composition API,使得组件的开发更加灵活和可维护。在Uniapp中,您可以利用Vue3的组件化特性,提高代码的可重用性和可维护性。

三、课程优势
1.一站式学习:本课程将为您详细介绍如何使用HBuilderX和Vue3进行Uniapp开发的全过程,让您从零开始,逐步掌握核心技能。

  1. 实战案例:我们为您准备了多个实战案例,让您在实际操作中深入理解知识点的运用,达到融会贯通的效果。
  2. 高效学习:课程采用线上回答+录播的形式,让您随时随地学习,高效利用时间。同时,我们还将为您提供丰富的课后资料,助您巩固知识,拓展视野。
  3. 课程目录:大于180课时从基础组件开始,每日更新。
    课程地址(点击跳转)
    5.社群交流:加入我们的学习社群,与志同道合的朋友一起交流心得,互相学习,共同进步。同时,我们还将定期进行更多实战项目和源码线上分享,让您收获更多干货。
    V:ANKR6699

四、课程特色
1.学员们可以免费使用讲师开发的Uniapp插件市场内的全部插件。
点击跳转
2.后期讲师开发的项目模板全套免费使用。
3.学员实际项目开发中,答疑遇到的问题。
4.后期录制的其他方面的课程可享受折扣。
8.HBuilderX支持实时预览功能,可以实时查看应用在真机和模拟器上的运行效果,方便开发者进行调试和优化。
9.代码提示和自动补全:HBuilderX提供了智能代码提示和自动补全功能,可以帮助开发者快速编写代码,减少出错率。
10.集成调试器:HBuilderX集成了调试器,可以帮助开发者进行代码调试,快速定位和解决问题。

五、课程收获

  1. 掌握HBuilderX的使用技巧和Vue3的最新语法,提升您的开发效率。
  2. 学会如何利用Vue3的组件化特性来提高代码的可重用性和可维护性。
  3. 掌握如何调试和优化Uniapp应用程序的性能,使其在多个平台上达到最佳运行效果。
  4. 通过实战案例的练习,让您具备独立开发高质量Uniapp应用程序的能力。
  5. 学会前后端全端开发,一技在手全栈拿手。
    还在等什么?快来加入我们的课程吧!让我们一起开启HBuilderX与Vue3的Uniapp开发之旅,共创美好未来!

六、如何参与学习
想要参与学习,您可以按照以下步骤操作:
1.访问我们的课程网站。
课程地址(点击跳转)
2.在课程页面中,您会看到课程介绍、课程大纲、课程费用等相关信息。请仔细阅读,了解课程的基本情况。
(每日更新)

  1. 在课程期间,我们将为您提供必要的学习资料和指导,帮助您更好地掌握知识和技能。请积极参与课堂讨论和实操练习,与同学们互相学习、共同进步。

七、结语
通过我们的HBuilderX与Vue3教学课程,您将掌握最新的Uniapp开发技能,为未来的职业发展打下坚实基础。我们期待您的加入,与我们一起开启全新的技术之旅!

八、附加价值
除了核心的知识和技能,我们的课程还为您提供了以下附加价值:

  1. 案例分享:我们会定期邀请成功的开发者进行案例分享,让您了解最新的开发趋势和实践经验,拓宽您的视野。
  2. 职业规划建议:我们提供个性化的职业规划建议,帮助您更好地规划未来的职业发展路径,提升职业竞争力。

九、总结
通过我们的HBuilderX与Vue3教学课程,您将获得最新的Uniapp开发技能、实战经验和附加价值。我们的导师团队将为您提供全方位的学习支持,帮助您在短时间内快速提升开发能力。加入我们的课程,开启全新的技术之旅,为未来的职业发展打下坚实基础!
现在就来报名参加我们的课程吧!让我们一起学习、成长和进步!

收起阅读 »

web-view组件显示异常问题,可能为本地开发环境导致

uni_app

分享一次踩坑。
我习惯用本地环境调试,通过web-view url访问本地开发环境的一个前端页面,结果无论web浏览器还是app浏览器都可以正常显示,进入app就出问题。
最后,只要把代码打包部署到服务器上,url改为服务器上的页面,就可以正常显示了。因为本地开发环境的一些代码兼容性较差,打包之后就没有这个问题了

继续阅读 »

分享一次踩坑。
我习惯用本地环境调试,通过web-view url访问本地开发环境的一个前端页面,结果无论web浏览器还是app浏览器都可以正常显示,进入app就出问题。
最后,只要把代码打包部署到服务器上,url改为服务器上的页面,就可以正常显示了。因为本地开发环境的一些代码兼容性较差,打包之后就没有这个问题了

收起阅读 »

应用闪退分析与 uniapp 安卓原生插件开发

uniapp离线打包 uniapp uniapp原生插件

前言

公司使用 uniapp 开发的 App 端项目在红米 Note11T Pro 中出现了拍照后闪退的问题,也是折腾了挺久才研究出原因和解决方案,在这里记录和分享。

调试分析

首先可以肯定的是并非代码的问题,在调用拍摄 Api(uni.chooseImage)前、成功回调、失败回调中都打了断点,除了拍摄前的断点进入了,成功和失败回调是没有进入的,而且闪退只在少部分机型上出现,不是必现的行为。

在网上查了一些 uniapp 拍照闪退的相关资料,可以排除的原因有

  • 没有配置权限
  • 拍照像素过大,GPU 渲染崩溃
    • 按下拍摄键还没确认的时候应用其实就已经闪退了,也就不存在 GPU 渲染问题

既然前端代码没有问题,那我们就得往低一层去调试分析了,使用离线打包配置,在 as 中运行项目到真机并开启 logcat:

20231203154344

目前的日志有点多,包含了整个系统的日志输出,所以我们需要做个过滤:

20231203155600

过滤包名为 com.android.simple 且等级为 warnerror 的日志输出。完整的过滤语法看官网文档 使用 Logcat 查看日志

接下来我们需要在设备(真机、模拟器)上进行操作来复现闪退的行为,然后查找可疑的 crash 日志。

a51f4013-6f9a-4a80-a69e-10a88a34f338

这样操作了几次,虽然会复现闪退行为,但并没有找到相关的 crash 日志,得到的信息只有:按下拍摄键后应用进程被结束。

20231203173635

到这里信息基本算是断了,但是没有 crash 日志,闪退的可能性降低了,那是不是系统回收了应用资源呢?我们搜索对应的机型 + 关键词:

20231203174504

通过上面的两篇文章,我们可以发现一些共同点:

  • 调用系统相机进行拍摄
  • 拍摄时应用进入后台,此时可能会被系统回收资源

这两篇文章的问题与我们目前经历的很像,都是调用系统相机拍摄后应用被结束了进程,那么很大的可能是应用进入后台后被系统回收了资源。

如果是这样的话那我们需要降低应用进入后台后被系统回收资源的几率,也就是保活,为此找到了一篇 Android 保活相关的文章:

从这篇文章里知道了一个关键的信息:应用后台优先级 — oom_adj 值。

这个值是反映进程的优先级的,在系统内存不足时,会根据这个值去决定将哪些进程回收(kill),值越低表示优先级越高,越不可能被回收资源。常见的值有:

  • 0:前台进程,应用目前在前台运行
  • 1:可感知进程,比如播放音乐,通知栏有可交互的控件
  • 负数:属于系统级别的进程

这个值是根据你的应用状态实时变化的,可以通过以下命令查看你的应用 oom_adj 值:

- adb shell "ps|grep your package name"  

- adb shell  
- cat /proc/pid/oom_adj

前台

20231203181714

后台

20231203182001

可以发现什么也没做的话(如果开通了厂商提供的通知服务,如 MiPush,会开启一个专属的通知进程,可以提升应用的后台优先级,但是测试发现红米 Note11T Pro Android13 里这个通知进程也很容易被 kill)应用进入后台时的优先级是很低的,调用拍摄又是个消耗大量内存的行为,也就不奇怪会出现应用被回收资源的问题了。

uniapp Android 原生插件开发

既然知道了可能的原因,我们就需要有针对的去解决,这里我采用 Android实现进程保活方案解析 中的前台服务方案,开发一个 Android 原生插件,尝试提升应用的优先级。参考 uniapp 文档:

关于环境的配置就不过多介绍,需要的可以看下面这篇文章:

module 配置

我们先新建一个 module:

20231203184854

20231203185003

20231203185030

可能会出现报错,我们直接 cv uniapp Android SDK 中 richalert.gradle 配置并点击 Try Again

20231203185332

如果出现错误 package name not found,我们直接点击进入对应的文件:

20231203185630

添加自己的包名并再次尝试:

20231203185801

删除这两个文件:

20231203190230

新建一个 uniapp module 类供其调用:

20231203190442

20231203190548

根据文档,这个需要和 uniapp 打交道的类需要继承 UniModule:

20231203190821

我们可以定义在前端代码中调用的方法,这个方法需要加上 @UniJSMethod(uiThread = boolean) 注解,uiThread 标识是否运行在 ui 线程:

20231203191508

然后需要在 uniapp 的配置中配置这个类,并在主模块的 .gradle 配置中添加依赖,然后编译:

20231203191950

20231203192121

现在可以试试是否可以调用:

20231203192749

20231203193312

保活功能实现

新建一个类并继承自 Service:

20231203194231

在这个类中创建一个前台服务:

20231203202148

AndroidManifest.json 中注册服务并添加前台服务权限:

20231203202427

修改之前的 startForeground 方法,开启一个服务:

20231203202324

得到的效果如下:

edd3fa92-afe3-4c75-af14-39240c39e1d0

查看应用后台时的 oom_adj 值确实变小了,也没有再次测到拍照闪退的问题,现在可以肯定是系统回收资源导致的了:

20231203204159

可以使用手机的开发者选项,开启后台进程限制,选择最多不超过两个后台进程,然后开启你的应用和两个额外的应用,在这三个应用间切换,你会发现被杀死的总是另外两个应用,你的应用是一直存活的。

后话

本来到这里以为已经结束了,谁知道同事说以前做过保活功能,但是被应用商店给打回了,目前国内对后台运行、自启动、关联启动基本是 0 容忍。

也尝试过双进程守护等保活实现,但是现在的系统对于后台服务在后台运行超过一定时间后会直接杀死,可以说目前国内想实现保活基本是不可能了。

目前还没有更新发版,不确定这种轻量级的保活能不能审核通过;有大佬提供过一种思路:不调用系统相机,自定义拍照页面来完成拍照功能。这样应用还是在前台的,也就不会被系统杀死了。

最后附上另外一位热心大佬和我的沟通讨论:应用保活讨论

2023 年 12 月 4 日更新

尝试使用了插件市场中的 自定义相机 自动裁剪 自定义拍照 支持配置大小【更多自定义相机请联系作者】 插件,实测红米 Note11T Pro 未出现应用被系统资源回收的行为,且查看调用自定义相机时的应用 oom_adj 值为 0,即当前应用进程仍处于前台:

oom_adj

继续阅读 »

前言

公司使用 uniapp 开发的 App 端项目在红米 Note11T Pro 中出现了拍照后闪退的问题,也是折腾了挺久才研究出原因和解决方案,在这里记录和分享。

调试分析

首先可以肯定的是并非代码的问题,在调用拍摄 Api(uni.chooseImage)前、成功回调、失败回调中都打了断点,除了拍摄前的断点进入了,成功和失败回调是没有进入的,而且闪退只在少部分机型上出现,不是必现的行为。

在网上查了一些 uniapp 拍照闪退的相关资料,可以排除的原因有

  • 没有配置权限
  • 拍照像素过大,GPU 渲染崩溃
    • 按下拍摄键还没确认的时候应用其实就已经闪退了,也就不存在 GPU 渲染问题

既然前端代码没有问题,那我们就得往低一层去调试分析了,使用离线打包配置,在 as 中运行项目到真机并开启 logcat:

20231203154344

目前的日志有点多,包含了整个系统的日志输出,所以我们需要做个过滤:

20231203155600

过滤包名为 com.android.simple 且等级为 warnerror 的日志输出。完整的过滤语法看官网文档 使用 Logcat 查看日志

接下来我们需要在设备(真机、模拟器)上进行操作来复现闪退的行为,然后查找可疑的 crash 日志。

a51f4013-6f9a-4a80-a69e-10a88a34f338

这样操作了几次,虽然会复现闪退行为,但并没有找到相关的 crash 日志,得到的信息只有:按下拍摄键后应用进程被结束。

20231203173635

到这里信息基本算是断了,但是没有 crash 日志,闪退的可能性降低了,那是不是系统回收了应用资源呢?我们搜索对应的机型 + 关键词:

20231203174504

通过上面的两篇文章,我们可以发现一些共同点:

  • 调用系统相机进行拍摄
  • 拍摄时应用进入后台,此时可能会被系统回收资源

这两篇文章的问题与我们目前经历的很像,都是调用系统相机拍摄后应用被结束了进程,那么很大的可能是应用进入后台后被系统回收了资源。

如果是这样的话那我们需要降低应用进入后台后被系统回收资源的几率,也就是保活,为此找到了一篇 Android 保活相关的文章:

从这篇文章里知道了一个关键的信息:应用后台优先级 — oom_adj 值。

这个值是反映进程的优先级的,在系统内存不足时,会根据这个值去决定将哪些进程回收(kill),值越低表示优先级越高,越不可能被回收资源。常见的值有:

  • 0:前台进程,应用目前在前台运行
  • 1:可感知进程,比如播放音乐,通知栏有可交互的控件
  • 负数:属于系统级别的进程

这个值是根据你的应用状态实时变化的,可以通过以下命令查看你的应用 oom_adj 值:

- adb shell "ps|grep your package name"  

- adb shell  
- cat /proc/pid/oom_adj

前台

20231203181714

后台

20231203182001

可以发现什么也没做的话(如果开通了厂商提供的通知服务,如 MiPush,会开启一个专属的通知进程,可以提升应用的后台优先级,但是测试发现红米 Note11T Pro Android13 里这个通知进程也很容易被 kill)应用进入后台时的优先级是很低的,调用拍摄又是个消耗大量内存的行为,也就不奇怪会出现应用被回收资源的问题了。

uniapp Android 原生插件开发

既然知道了可能的原因,我们就需要有针对的去解决,这里我采用 Android实现进程保活方案解析 中的前台服务方案,开发一个 Android 原生插件,尝试提升应用的优先级。参考 uniapp 文档:

关于环境的配置就不过多介绍,需要的可以看下面这篇文章:

module 配置

我们先新建一个 module:

20231203184854

20231203185003

20231203185030

可能会出现报错,我们直接 cv uniapp Android SDK 中 richalert.gradle 配置并点击 Try Again

20231203185332

如果出现错误 package name not found,我们直接点击进入对应的文件:

20231203185630

添加自己的包名并再次尝试:

20231203185801

删除这两个文件:

20231203190230

新建一个 uniapp module 类供其调用:

20231203190442

20231203190548

根据文档,这个需要和 uniapp 打交道的类需要继承 UniModule:

20231203190821

我们可以定义在前端代码中调用的方法,这个方法需要加上 @UniJSMethod(uiThread = boolean) 注解,uiThread 标识是否运行在 ui 线程:

20231203191508

然后需要在 uniapp 的配置中配置这个类,并在主模块的 .gradle 配置中添加依赖,然后编译:

20231203191950

20231203192121

现在可以试试是否可以调用:

20231203192749

20231203193312

保活功能实现

新建一个类并继承自 Service:

20231203194231

在这个类中创建一个前台服务:

20231203202148

AndroidManifest.json 中注册服务并添加前台服务权限:

20231203202427

修改之前的 startForeground 方法,开启一个服务:

20231203202324

得到的效果如下:

edd3fa92-afe3-4c75-af14-39240c39e1d0

查看应用后台时的 oom_adj 值确实变小了,也没有再次测到拍照闪退的问题,现在可以肯定是系统回收资源导致的了:

20231203204159

可以使用手机的开发者选项,开启后台进程限制,选择最多不超过两个后台进程,然后开启你的应用和两个额外的应用,在这三个应用间切换,你会发现被杀死的总是另外两个应用,你的应用是一直存活的。

后话

本来到这里以为已经结束了,谁知道同事说以前做过保活功能,但是被应用商店给打回了,目前国内对后台运行、自启动、关联启动基本是 0 容忍。

也尝试过双进程守护等保活实现,但是现在的系统对于后台服务在后台运行超过一定时间后会直接杀死,可以说目前国内想实现保活基本是不可能了。

目前还没有更新发版,不确定这种轻量级的保活能不能审核通过;有大佬提供过一种思路:不调用系统相机,自定义拍照页面来完成拍照功能。这样应用还是在前台的,也就不会被系统杀死了。

最后附上另外一位热心大佬和我的沟通讨论:应用保活讨论

2023 年 12 月 4 日更新

尝试使用了插件市场中的 自定义相机 自动裁剪 自定义拍照 支持配置大小【更多自定义相机请联系作者】 插件,实测红米 Note11T Pro 未出现应用被系统资源回收的行为,且查看调用自定义相机时的应用 oom_adj 值为 0,即当前应用进程仍处于前台:

oom_adj

收起阅读 »

全套Uniapp组件、API,Vue3的API等等进行详细教学包含视频及课件示例源码

vue3 uniapp 教程

全套Uniapp组件、API,Vue3的API等等进行详细教学包含视频及课件示例源码

链接:https://edu.csdn.net/course/detail/39132

全套Uniapp组件、API,Vue3的API等等进行详细教学包含视频及课件示例源码

链接:https://edu.csdn.net/course/detail/39132

继续阅读 »

全套Uniapp组件、API,Vue3的API等等进行详细教学包含视频及课件示例源码

链接:https://edu.csdn.net/course/detail/39132

全套Uniapp组件、API,Vue3的API等等进行详细教学包含视频及课件示例源码

链接:https://edu.csdn.net/course/detail/39132

收起阅读 »