IM 即时通讯
Android
新手接入指南
产品介绍
简介
主要功能
产品优势
海外数据中心
接口及业务限制
功能介绍
帐号集成与登录
群组功能
聊天室功能
聊天室标签功能
圈组功能
多端登录与互踢策略
质量数据监控台
更新日志
IM UIKit 更新日志
NIM SDK 开发版更新日志
NIM SDK 稳定版更新日志
体验 Demo
下载 SDK 与 Demo 源码
快速开始
跑通 IM Demo 源码
实现单聊消息收发(不含 UI)
实现圈组消息收发(不含 UI)
含 UI 集成
什么是 IM UIKit
IM UIKit 功能列表
快速集成 IM UIKit
组件导入
初始化
界面跳转
自定义用户信息
全局配置
IM UIKit API 概览
会话列表相关
集成会话列表界面
会话列表事件监听
自定义会话列表界面 UI
会话列表 API 概览
会话消息相关
集成会话界面
会话界面事件监听
实现自定义消息发送(含 UI)
自定义会话界面 UI
会话消息 API 概览
通讯录相关
集成通讯录界面
自定义通讯录界面 UI
通讯录界面事件监听
通讯录 API 概览
不含 UI 集成
使用说明
集成与初始化
登录管理
消息相关
消息概述
消息收发
自定义消息收发
消息配置选项
多媒体资源存储场景
广播消息收发
消息已读回执
消息撤回
消息重发与转发
消息更新
消息过滤
语音消息处理
插入本地消息
历史消息
最近会话
服务端会话服务
用户资料
用户关系
在线状态订阅
系统通知
离线推送与消息提醒
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
聊天室
圈组功能
登录管理
服务器相关
服务器概述
服务器管理
服务器成员管理
服务器未读数管理
频道相关
频道概述
频道管理
频道黑白名单
频道未读数管理
实时互动频道
频道分组
频道分组黑白名单
搜索服务器和频道
身份组相关
身份组概述
身份组应用场景
服务器身份组
频道身份组
用户定制权限
频道分组身份组
自定义权限
成员权限查询与判定
身份组相关查询
圈组订阅机制
消息相关
图解圈组消息流转
圈组消息收发
圈组消息撤回
圈组消息更新
圈组消息删除
会话消息回复(Thread)
圈组快捷评论
消息正在输入
获取频道最后一条消息
查询历史消息
圈组消息缓存
圈组消息搜索
系统通知
圈组离线推送
圈组内容审核
圈组相关抄送
圈组第三方回调
反垃圾
聊天扩展
其他
最佳实践
IM 应用隐私合规
聊天室重要消息投递
API 参考
Android API 参考
Android 端状态码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
开通聊天室功能
常见问题
FAQ
错题集
Android 端推送问题排查
服务协议

IM应用隐私合规

更新时间: 2022/11/21 10:26:50

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

什么是隐私合规

根据《个人信息安全规范》的相关要求,在应用需要收集个人信息时,必须向个人信息主体明示个人信息处理目的、方式、范围等,并且形成单独成文的《隐私政策》。您需确保《隐私政策》的独立性与易读性,并确保用户进入应用的主要功能界面后,能够通过 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
    

分步初始化

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

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

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

    示例代码如下:

    /**
    * 如果用户同意后,可以直接对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,导致程序崩溃。

初始化注意事项

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

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

去除自启动

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

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

示例代码如下:

方式一:去掉 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>
此文档是否对你有帮助?
有帮助
我要吐槽
  • 什么是隐私合规
  • 如何实现隐私合规
  • 完善《隐私政策》
  • 分步初始化
  • 初始化注意事项
  • 去除自启动