IM 应用隐私合规
更新时间: 2024/10/31 14:52:32
数据隐私保护已成为一个重要的社会议题,国家也出台了很多相关政策来保护个人隐私。因此,在应用上架到应用商店前,需确保应用采集用户隐私数据的合规性,从而保证应用能正常上线。
背景信息
根据《个人信息安全规范》的相关要求,在应用需要收集个人信息时,必须向个人信息主体明示个人信息处理目的、方式、范围等,并且形成单独成文的《隐私政策》。
您需确保《隐私政策》的独立性与易读性,并确保用户进入应用的主要功能界面后,能够通过 四 次以内的单击或滑动操作查看《隐私政策》。您还需确保应用只能用户同意《隐私政策》后收集用户的隐私信息。相关详情请参考 《信息安全技术-个人信息安全规范》。
第一步:完善隐私政策文件
建议在应用首次启动时,通过弹窗向客户展示隐私政策概要,并添加《隐私政策》的跳转链接。在用户选择 同意 后,应用才能进行获取用户个人信息的行为。
-
确保您的应用已出具《隐私政策》,并在《隐私政策》中添加如下声明。
网易云信的产品或服务可能包括第三方的产品或服务,后者也可能收集并使用您的个人信息。例如,网易云信为实现即时通讯服务,集成了网易云信 SDK。网易云信将作为数据处理者,按照本公司的指示以及《网易云信隐私政策》(https://yunxin.163.com/clauses?serviceType=3)收集、使用并保护您的个人信息。
-
如果您的应用有单独的《第三方共享清单》,建议把以下信息添加到该文档中。
网易云信即时通讯 第三方公司名称:杭州网易质云科技有限公司 共享类型:内嵌 SDK 共享信息:唯一设备识别码(APNS Token、设备序列号、AndroidID、OAID、GAID、IDFV、CID、MAC 地址)。设备运行状态(SIM 卡状态、USB 状态、充电状态、电池容量及电量、锁屏时间、启动时间)。设备信息(设备类型、设备品牌及型号、设备名称、设备厂商、设备所运行系统(版本信息、内核信息、CPU 型号、设备内存及存储大小)、屏幕亮度及分辨率、设备输入装置、设备架构、基带信息、字体 HASH、HOSTNAME、辅助功能列表、系统进程列表)。日志信息(设备运行状态(CPU、内存运行状态)、浏览器类型及版本信息(Web H5)、网络连接类型及状态、WIFISSID、WIFIBSSID、IP 地址、运营商信息、网络代理、网易云信通信服务运行日志信息)。 使用目的:提供消息投递、多端消息同步、消息漫游功能,同时为了预防安全风险,准确识别违反法律法规的情况 使用场景:提供即时通讯服务 共享方式:(外部)接口共享 第三方隐私链接:https://yunxin.163.com/clauses?serviceType=3
第一步:分步初始化
由于 NIM SDK 初始化时,部分 API 需在用户同意后才被允许调用,所以在用户首次启动应用时,应确保用户阅读您的《隐私政策》并取得用户授权之后,再调用 IM 的初始化函数。
为此网易云信特意提供了分步初始化的方案,Java 示例如下:
-
每次启动应用时,在 Application 的
onCreate
方法中获取客户是否同意《隐私声明》的信息。初始化完成后,网易云信会启动一个后台服务进程,该进程启动会触发 Applicaiton 的
onCreate
方法的调用,并且需要通过onCreate
方法把SDKOptions
设置给该进程。因此,初始化 IM SDK 时,需确保:- 在
onCreate
方法中调用NIMClient.config
或者NIMClient.init
。 - 在
onCreate
方法中 不要 进行其他第三方库的初始化,避免内存浪费或者其他意外的发生。
初始化示例代码如下:
Java
/** * 如果用户同意后,可以直接对 SDK 进行初始化操作 {@link NIMClient#init(Context, LoginInfo, SDKOptions)} * 包含分步初始化的 config 方法和 initSDK 方法。 * 如果用户未同意,需要先在 Applicaiton.onCreate 方法中调用 {@link NIMClient#config(Context, LoginInfo, SDKOptions)} * 在用户同意之后,再调用正真的初始化方法 {@link NIMClient#initSDK()} */ private void initIMSdk(){ if (hasAgree){ //如果用户同意后,直接对 SDK 初始化 NIMClient.init(this, getLoginInfo(), getSDKOptions()); }else { //如果用户未同意,先调用 config NIMClient.config(this, getLoginInfo(), getSDKOptions()); } }
- 在
-
在应用的启动界面检查用户是否同意《隐私声明》,如未同意则弹出选择框,在用户单击 同意 后调用
NIMClient#initV2
对 IM SDK 进行真正的初始化操作。Java
//注意这里需要调用无参的分步初始化的方法,必须要在主进程中调用。 NIMClient.initSDK();
NIMClient#initV2
方法必须在主进程中调用。- 在调用
NIMClient#initV2
方法进行初始化之前,请勿调用NIMClient#getService
方法,否则会出现异常SDK not initialized or invoked in wrong process
,导致程序崩溃。
第三步:去除自启动
随着市场监管越来越严格,部分市场会对频繁自启动和开机自启动的行为进行检测,并通知上架方进行整改。您可以根据检测结果,自主选择关闭频繁自启动或者开机自启动。
- 关闭频繁自启动:在初始化的时候通过将
SDKOptions.disableAwake
参数设置为true
关闭应用内自启动行为。 - 关闭开机自启动:共有两种方式来处理,在主工程的
AndroidManifest.xml
文件中,通过tools:node="remove
标签去掉NimReceiver
,可以根据具体要求自行选择。
XML<receiver
android:name="com.netease.nimlib.service.NimReceiver"
android:exported="false"
tools:node="remove"
android:process=":core">
</receiver>