uni-app 最近在问答社区发布公告,
可以看到关于 App Store 提交的隐私更新,上架必须包含隐私清单
Apple 公告 :
需要合理的理由列举你要使用的 API 和第三方 SDK 权限说明
什么情况需要隐私清单
DCloud 这边通常内置的 SDK 情况,你无需额外配置隐私清单,uni-app/uni-app x 框架中涉及隐私清单的功能模块 DCloud 会根据应用配置自动生成,更新到 HBuilderX 到最新版本重新提交云端打包即可
在以下情况可能需要你补充隐私清单:
- 应用代码中包含并非三方 SDK 提供的收集用户信息相关的功能,比如:获取用户联系方式,信用卡信息,敏感信息、健康信息、浏览历史记录等等
- 使用的
原生语言插件
包括三方的或uts插件
未支持隐私清单,且提交审核时因隐私清单相关问题被拒
加入隐私清单
需要在项目根目录中,在nativeResources/ios
目录下搞个文件PrivacyInfo.xcprivacy
初始化成下面这样,不用担心看不懂,接下里会介绍这些分别是什么
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
</array>
</dict>
</plist>
|
隐私清单文件中键值对说明
参数名 | 说明 |
---|
NSPrivacyTracking | 布尔值,指示您的应用程序或第三方 SDK 是否使用应用程序跟踪透明度框架下定义的数据进行跟踪 |
NSPrivacyTrackingDomains | 一组字符串,列出您的应用程序或第三方 SDK 连接到的参与跟踪的互联网域。如果用户未通过应用程序跟踪透明度框架授予跟踪权限,则对这些域的网络请求将失败,您的应用程序将收到错误. 如果将 NSPrivacyTracking 设置为 true,则需要在 NSPrivaceTrackingDomains 中至少提供一个 internet 域 |
NSPrivacyCollectedDataTypes | 隐私数据使用描述,用于描述应用程序或第三方 SDK 隐私数据采集的数据类型。有关要在字典中使用的键和值的信息,请参阅 data use in privacy manifests |
NSPrivacyAccessedAPITypes | 必要理由 API,使用了苹果需要说明原因的 API 时需要填写,具体 API 的列表和原因请参阅 use of required reason API |
NSPrivacyTracking
和 NSPrivacyTrackingDomains
有需要再更改,一般是不用动的
重点是 NSPrivacyAccessedAPITypes
和 NSPrivacyCollectedDataTypes
,如果你看过 ios 官方的文档,官方的数据是定死的,你只需要填写对应参数和使用原因
NSPrivacyCollectedDataTypes
NSPrivacyCollectedDataTypes
属性是数组你需要在相邻的<array></array>
中填写应用或 SDK 收集的数据类型,详细可填写的内容可以看参考 4,需要填写官方声明的数据类型,举个例子,注意复制的时候请把注释删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<!-- 数据类型 -->
<key>NSPrivacyCollectedDataType</key>
<!-- 数据类型是手机号码,更多详见官方枚举的内容填写 -->
<string>NSPrivacyCollectedDataTypePhoneNumber</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<!-- 收集数据的原因 -->
<key>NSPrivacyCollectedDataTypePurposes</key>
<!-- 理由,详见官方枚举的内容填写 -->
<array>
<!-- 理由是应用程序内功能 -->
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
<dict>
<!-- 数据类型 -->
<key>NSPrivacyCollectedDataType</key>
<!-- 数据类型是图片和视频,更多详见官方枚举的内容填写 -->
<string>NSPrivacyCollectedDataTypePhotosorVideos</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<!-- 收集数据的原因 -->
<key>NSPrivacyCollectedDataTypePurposes</key>
<!-- 理由,详见官方枚举的内容填写 -->
<array>
<!-- 理由是个性化推荐 -->
<string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string>
<!-- 理由是应用程序内功能 -->
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
</array>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
</array>
</dict>
</plist>
|
NSPrivacyCollectedDataTypes
不止举例那两项,根据自己的应用程序添加对应权限数据类型说明
NSPrivacyAccessedAPITypes
同理NSPrivacyAccessedAPITypes
也是一样的,详细可填写的内容可以看参考 5,举个例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
<!-- 为了更清楚查NSPrivacyAccessedAPITypes,看此处省略... -->
</array>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<!-- API类型 -->
<key>NSPrivacyAccessedAPIType</key>
<!-- API类型是 用户默认信息 -->
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<!-- 使用原因 -->
<key>NSPrivacyAccessedAPITypeReasons</key>
<!-- 列举 -->
<array>
<!-- 使用原因 CA92.1理由 -->
<string>CA92.1</string>
<!-- 使用原因 1C8F.1理由 -->
<string>1C8F.1</string>
</array>
</dict>
<dict>
<!-- API类型 -->
<key>NSPrivacyAccessedAPIType</key>
<!-- API类型是 监听键盘 -->
<string>NSPrivacyAccessedAPICategoryActiveKeyboards</string>
<!-- 使用原因 -->
<key>NSPrivacyAccessedAPITypeReasons</key>
<!-- 列举 -->
<array>
<!-- 使用原因 CA92.1理由 -->
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>
|
Dcloud 插件市场三方插件适配隐私清单
我司使用的 Dcloud 插件市场很多三方 SDK 其实是没有隐私清单的
三方作者情况
我也联系了多个插件市场三方插件作者他们基本都是差不多的情况,没有优先适配,部分公司开发的插件市场 SDK 也是一样,并不是小作者才有
解决办法
怎么找出他们隐私清单呢,怎么找到合适的 api 和描述呢
- 直接问作者
- 让作者适配
- 如果作者适配的是三方的 sdk 转接过来的(如某厂的活体认证、一键登录、消息推送这些),可以问作者要原生 ios SDK 出处,里面解包出来搜索找到
PrivacyInfo.xcprivacy
上面的方法都不行的话,只能看着插件预估需要使用的 api 试试审核,最笨方法不一定有效果,最好的还是让作者给你一份隐私清单
总结
由此可见 Dcloud 插件市场很多三方 SDK 没有隐私清单的
多去尝试和作者沟通适配,找到合适的 api 描述,然后提交审核
祝大家 Ios 应用商城 App 早日通过
参考