IM应用隐私合规

更新时间: 2024/03/14 16:36:30

数据隐私保护已成为一个重要的社会议题,国家也出台了很多相关政策来保护个人隐私。因此,在应用上架到应用商店前,需确保应用采集用户隐私数据的合规性,从而保证应用能正常上线。

什么是隐私合规

根据《个人信息安全规范》的相关要求,在应用需要收集个人信息时,必须向个人信息主体明示个人信息处理目的、方式、范围等,并且形成单独成文的《隐私政策》。您需确保《隐私政策》的独立性与易读性,并确保用户进入应用的主要功能界面后,能够通过 4 次以内的点击或滑动操作查看《隐私政策》。您还需确保应用只能用户同意《隐私政策》后收集用户的隐私信息。相关详情请参见《信息安全技术-个人信息安全规范》

实现隐私合规

建议在应用首次启动时,通过弹窗向客户展示隐私政策概要,并添加《隐私政策》的跳转链接。在用户选择同意后,应用才能进行获取用户个人信息的行为。

完善《隐私政策》

  1. 确保您的应用已出具《隐私政策》,并在《隐私政策》中添加如下声明。

    我们的产品或服务可能包括第三方的产品或服务,后者也可能收集并使用您的个人信息。例如,我们为实现即时通讯服务,集成了网易云信 SDK。网易云信将作为数据处理者,按照本公司的指示以及《网易云信隐私政策》(https://yunxin.163.com/clauses?serviceType=3)收集、使用并保护您的个人信息。
    
  2. 如果您的应用有单独的《第三方共享清单》,建议把以下信息添加到该文档中。

    云信即时通讯
    第三方公司名称:杭州网易质云科技有限公司
    共享类型:内嵌SDK
    共享信息:唯一设备识别码(APNS Token、设备序列号、AndroidID、OAID、GAID、IDFV、CID、MAC地址);设备运行状态(SIM卡状态、USB状态、充电状态、电池容量及电量、锁屏时间、启动时间);设备信息(设备类型、设备品牌及型号、设备厂商、设备所运行系统版本、名称、编辑版本信息、系统内核信息、CPU型号、设备内存及存储大小、屏幕亮度及分辨率、设备输入装置、设备架构、基带信息、字体HASH、HOSTNAME、辅助功能列表、系统进程列表);日志信息(设备运行状态(CPU、内存运行状态)、浏览器类型及版本信息、网络连接类型及状态、WIFISSID、WIFIBSSID、IP地址、运营商信息、网络代理、云信通信服务运行日志信息)。
    使用目的:提供消息投递、多端消息同步、消息漫游功能,同时为了预防安全风险,准确识别违反法律法规的情况
    使用场景:提供即时通讯服务
    共享方式:(外部)接口共享
    第三方隐私链接:https://yunxin.163.com/clauses?serviceType=3
    

分步初始化

由于 NIM SDK 初始化时,部分 API 需在用户同意后才被允许调用,所以在用户首次启动应用时,应确保用户阅读您的《隐私政策》并取得用户授权之后,再调用 IM 的初始化函数。为此我们特意提供了分步初始化的方案,详细步骤如下:

  1. 每次启动应用时,在 Application 的onCreate方法中获取客户是否同意《隐私声明》的信息。

    • 如同意,则可直接调用init方法进行初始化。
    • 如不同意,则调用config方法进行 SDK 相关配置,不会涉及隐私相关 API 的调用。

    初始化完成后,云信会启动一个后台服务进程,该进程启动会触发 Applicaiton 的onCreate方法的调用,并且需要通过onCreate方法把SDKOptions设置给该进程。因此,初始化 IM SDK 时,需确保

    • onCreate方法中调用NIMClient.config或者NIMClient.init
    • onCreate方法中 不要 进行其他第三方库的初始化,避免内存浪费或者其他意外的发生。

    初始化示例代码如下:

    /**
    * 如果用户同意后,可以直接对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());
        }
    }
    
  2. 在应用的启动界面检查用户是否同意《隐私声明》,如未同意则弹出选择框,在用户点击同意后调用NIMClient#initSDK对 IM SDK 进行真正的初始化操作。

    //注意这里需要调用无参的分步初始化的方法,必须要在主进程中调用。
    NIMClient.initSDK();
    
    • NIMClient#initSDK方法必须在主进程中调用。
    • 在调用NIMClient#initSDK方法进行初始化之前,请勿调用NIMClient#getService方法,否则会出现异常SDK not initialized or invoked in wrong process,导致程序崩溃。

去除自启动

随着市场监管越来越严格,部分市场会对频繁自启动和开机自启动的行为进行检测,并通知上架方进行整改。您可以根据检测结果,自主选择关闭频繁自启动或者开机自启动。

  • 关闭频繁自启动:需要您使用的 NIM SDK 版本在 稳定版 v8.9.100 及以上 或者 开发版 v9.3.0 及以上,然后在初始化的时候通过将SDKOptions.disableAwake参数设置为 true 关闭应用内自启动行为。
  • 关闭开机自启动:共有两种方式来处理,在主工程的AndroidManifest.xml文件中,通过tools:node="remove标签去掉NimReceiver或者BOOT_COMPLETED,可以根据具体要求自行选择。

自启动仅对 Android 8.0 之前的版本有作用,可以使消息接收更加及时。对于Android 8.0 之后版本来说,自启动几乎无意义。建议 Android 8.0 之后的版本,主动关闭自启动


方式一:去掉 NimReceiver
<receiver
    android:name="com.netease.nimlib.service.NimReceiver"
    android:exported="false"
    tools:node="remove"
    android:process=":core">
</receiver>
方式二:只去掉 BOOT_COMPLETED

如果您使用的 NIM SDK版本在 稳定版 v8.9.100 及以上 或者 开发版 v9.3.0 及以上,NIM SDK 内部已经在 NimReceiver 中去除了BOOT_COMPLETED,不需要再单独处理。

<receiver
    android:name="com.netease.nimlib.service.NimReceiver"
    android:exported="false"
    android:process=":core">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"
            tools:node="remove"/>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>
此文档是否对你有帮助?
有帮助
去反馈
  • 什么是隐私合规
  • 实现隐私合规
  • 完善《隐私政策》
  • 分步初始化
  • 去除自启动