隐私政策合规指引

一、引言

为保障终端用户的个人信息权益,确保您的应用程序符合《中华人民共和国网络安全法》、《中华人民共和国数据安全法》、《中华人民共和国个人信息保护法》、《信息安全技术 个人信息安全规范》以及相关法律法规和平台规 则(如苹果App Store、国内各大应用商店的隐私合规要求),请您在集成和使用本广告SDK前,务必仔细阅读并遵守本说明。

本说明旨在明确我司SDK处理个人信息的行为,并指导您如何履行作为App开发者的合规义务。

二、SDK功能与获取的个人信息

1. SDK功能描述

本SDK为您的App提供广告展示与变现能力,包括但不限于:开屏广告、横幅广告、插屏广告、信息流广告、激励视频广告的请求、展示、点击监测以及收益管理。

2. SDK可能收集的个人信息类型

为提供上述服务、优化广告效果及反作弊,SDK在获得用户同意后可能会收集以下信息:

SDK名称 主体公司 涉及个人信息 收集方式 收集用户信息的用途说明 隐私政策链接
RichMob SDK 杭州互裕科技有限公司

必选信息:设备品牌、名称、型号、系统版本、网络类型、IP、UA

可选信息:设备标识符OAID、IMEI、IMSI,Android ID、MAC地址、WIFI SSID/BSSID、硬件序列号、IDFA、IDFV、CAID

必选信息:屏幕方向、高宽、分辨率、磁盘空间、系统更新时间、开机时间、物理内存、运营商

可选信息:传感器信息

必选信息:开发者应用名、应用版本号、应用包名

【可选】第三方开发者可以选择是否授权本SDK收集如下信息:应用安装列表

可选信息:地理位置信息

必选信息:崩溃日志、性能数据

SDK 自行采集

基于用户设备信息进行广告投放与监测归因

通过崩溃信息,以此来优化代码缺陷,最大程度减少App崩溃

通过收集SDK运行过程中性能数据,以优化SDK的性能

统计广告数据,以用于广告主统计投放结果。包括不限于:请求、展示 、点击 、转化等,用于广告主统计投放结果

https://file.ssp.richmob.cn/privacy/privacy-prorules.html

我们严格遵守“最小必要”原则(1)实际收集的个人信息类型不得超出隐私政策所述范围;

(2)App不应收集与业务功能无任何关系的个人信息;(3)在用户明确拒绝后不得继续频繁索要权限、打扰用户;(4)App更新升级后,不应更改原有的系统权限设置。

三、App开发者合规要求

1、隐私政策披露

隐私政策制定与展示:APP必须制定一份独立的《隐私政策》,并确保在产品界面中显著展示。隐私政策应单独成文,不应与用户协议或用户说明等文件合并。政策中需明确收集使用个人信息的目的、方式和范围,且链接应正常有效,便于用户访问和阅读。

信息收集和使用明示:APP应清晰列举每项业务功能及其所收集的个人信息类型,避免使用“等”或“例如”等模糊表述,特别是对敏感信息应加以显著标识。若APP通过第三方代码或插件收集信息,需通过弹窗等方式告知用户,并明确说明信息的传输至第三方。

用户自主同意:APP在收集个人信息前,必须获得用户的自主选择同意。用户应能自主选择同意或拒绝授权,不同意的情况下,仅会影响相关的功能或服务。APP不得将多个功能捆绑在一起,要求用户一并同意。

信息处理与用户权益保障:APP在隐私政策中需公开个人信息的处理规则,包括运营者信息、数据存储和超期处理方式、使用规则、信息出境情况、数据安全保护措施、外部共享规则、用户权益保障机制、申诉渠道等。同时,APP不得在协议中使用免除自身责任或加重用户责任的条款。

2、SDK 相关系统权限申请

为实现本SDK产品的相应功能,我们可能通过第三方开发者的应用申请开启终端用户设备操作系统的特定权限。具体的使用场景和申请目的如下:

系统平台

权限

功能说明

使用场景和目的

申请时机

Android

READ_PHONE_STATE

【可选】获取设备标识,如IMEI

广告投放策略、广告归因、反作弊

开发者在调用需要该权限的SDK功能时进行调用。例如初始化、进行广告请求、监测归因。

INTERNET

【必选】网络权限,用于SDK实现和服务器通信

网络通信,如广告请求、数据上报等

网络通信

ACCESS_COARSE_LOCATION

【可选】获取粗略地理位置信息

广告投放策略及广告归因

开发者在调用需要该权限的SDK功能时进行调用。例如进行广告请求、监测归因。

ACCESS_FINE_LOCATION

【可选】获取精确地理位置信息

广告投放策略及广告归因

开发者在调用需要该权限的SDK功能时进行调用。例如进行广告请求、监测归因。

ACCESS_NETWORK_STATE

【可选】获取网络状态

检查网络状态,确保广告请求链路连通

开发者在调用需要该权限的SDK功能时进行调用,例如进行广告请求。

ACCESS_WIFI_STATE

【可选】获取 Wi-Fi 网络的连接信息及其状态

检查网络状态,确保广告请求链路连通

开发者在调用需要该权限的SDK功能时进行调用,例如进行广告请求。

READ_EXTERNAL_STORAGE

【可选】读取应用程序外部存储

应用下载、广告投放及广告素材存储

开发者在调用需要该权限的SDK功能时进行调用。例如下载App包体等功能。

WRITE_EXTERNAL_STORAGE

【可选】写入应用程序外部存储

应用下载、广告投放及广告素材存储

开发者在调用需要该权限的SDK功能时进行调用。例如下载App包体等功能。

VIBRATE

【可选】允许应用控制马达振动

触发振动。为广告交互提供反馈

开发者在调用需要该权限的SDK功能时进行调用,例如请求广告、监测归因与反作弊。

QUERY_ALL_PACKAGES

【可选】获取应用软件列表

广告投放及反作弊

开发者在调用需要该权限的SDK功能且用户已授权相应权限时。例如根据应用软件列表情况进行广告投放、广告反作弊。

REQUEST_INSTALL_PACKAGES

【可选】允许应用程序安装弹窗申请

下载类广告下载apk后安装

开发者在调用需要该权限的SDK功能时进行调用。例如下载安装App包体等功能。

iOS

NSLocationWhenInUseUsageDescription

【可选】仅App被使用时获取地理位置

广告投放及反作弊

开发者在调用需要该权限的SDK功能时进行调用,例如进行广告请求、监测归因与反作弊。

NSUserTrackingUsageDescription

【可选】获取设备标识,以识别设备信息

广告投放及反作弊

开发者在调用需要该权限的SDK功能时进行调用,例如进行广告请求、监测归因与反作弊。

网络权限

【必选】网络权限,用于SDK实现和服务器通信

网络通信,如广告请求、数据上报等

网络通信

NSAppTransportSecurity

【可选】添加http权限

http网络请求

开发者在调用需要该权限的SDK功能时进行调用,例如进行广告请求、图片加载。

3、APP使用RichMob SDK时的合规要求

SDK初始化及业务功能调用时机:APP必须确保在用户登录注册页面或首次启动时,通过明显且易于访问的方式(如弹窗、文本链接等)提示用户阅读《隐私政策》,告知个人信息处理规则,包括处理主体、目的、方式、类型及保存期限等内容。在用户同意《隐私政策》后方可初始化 RichMob 广告 SDK 进行个人信息的收集与处理。如果用户不同意《隐私政策》,则不能初始化 SDK,也无法使用相关功能。

SDK隐私政策披露要求:在 APP 的《隐私政策》中,必须在“第三方信息共享清单”或类似章节中披露 RichMob 广告 SDK 的名称、公司名称、处理的个人信息种类及目的、收集方式及范围,并提供隐私政策链接,确保透明的信息披露。

SDK可选个人信息的配置说明:开发者可以根据需求配置 RichMob 广告 SDK 中可选收集的个人信息。由于不收集某些信息可能影响相关功能的正常使用,因此开发者应根据业务需要合理配置,具体配置请参考 SDK 对接文档。

RichMob Android SDK 隐私设置

				
				RichMobSdk.init(this, getCustomController());
				
			
				
				private static AdCustomController getCustomController() {
				    return new AdCustomController() {
				
				        /**
				         * 是否允许SDK主动获取地理位置信息
				         */
				        @Override
				        public boolean isCanUseLocation() {
				            return super.isCanUseLocation();
				        }
				
				        /**
				         * isCanUseLocation未false时,可传入地理位置信息
				         */
				        @Nullable
				        @Override
				        public AdLocationProvider getLocation() {
				            return super.getLocation();
				        }
				
				        /**
				         * 是否允许SDK查询已安装应用列表
				         */
				        @Override
				        public boolean isCanUseAppList() {
				            return super.isCanUseAppList();
				        }
				
				        /**
				         * 开发者可以传入app列表
				         */
				        @Nullable
				        @Override
				        public List getCustomAppList() {
				            return super.getCustomAppList();
				        }
				
				        /**
				         * 是否允许SDK主动获取IMEI
				         */
				        @Override
				        public boolean isCanUsePhoneState() {
				            return super.isCanUsePhoneState();
				        }
				
				        /**
				         * 当isCanUsePhoneState=false时,可传入IME信息
				         */
				        @Nullable
				        @Override
				        public String getDevImei() {
				            return super.getDevImei();
				        }
				
				        /**
				         * 是否允许SDK主动获取MAC地址
				         */
				        @Override
				        public boolean isCanUseWifiState() {
				            return super.isCanUseWifiState();
				        }
				
				        /**
				         * 当isCanUseWifiState=false时,可传入Mac地址信息
				         */
				        @Nullable
				        @Override
				        public String getMacAddress() {
				            return super.getMacAddress();
				        }
				
				        /**
				         * 是否可以使用oaid
				         */
				        @Override
				        public boolean isCanUseOaid() {
				            return super.isCanUseOaid();
				        }
				
				        /**
				         * 开发者可以传入OAID
				         */
				        @Nullable
				        @Override
				        public String getDevOaid() {
				            return super.getDevOaid();
				        }
				
				        /**
				         * 是否允许SDK主动获取AndroidId
				         */
				        @Override
				        public boolean isCanUseAndroidId() {
				            return super.isCanUseAndroidId();
				        }
				
				        /**
				         * 开发者可以传入android ID
				         */
				        @Nullable
				        @Override
				        public String getAndroidId() {
				            return super.getAndroidId();
				        }
				
				        /**
				         * 是否允许SDK主动获取 WIFI SSID/BSSID
				         */
				        @Override
				        public boolean isCanUseWifiSsid() {
				            return super.isCanUseWifiSsid();
				        }
				        
				        /**
				         * 开发者可以传入WIFI SSID
				         */
				        @Override
				        public String getWifiSsid() {
				            return super.getWifiSsid();
				        }
				        
				        /**
				         * 是否允许SDK主动获取IMSI
				         */
				        @Override
				        public boolean isCanUseImsi() {
				            return super.isCanUseImsi();
				        }
				        
				        /**
				         * 开发者可以传入IMSI
				         */
				        @Override
				        public String getImsi() {
				            return super.getImsi();
				        }
				        
				        /**
				         * 是否允许SDK主动获取硬件序列号
				         */
				        @Override
				        public boolean isCanUseSerial() {
				            return super.isCanUseSerial();
				        }
				        
				        /**
				         * 开发者可以传入硬件序列号
				         */
				        @Override
				        public String getSerial() {
				            return super.getSerial();
				        }
				        
				        /**
				         * 是否允许SDK主动获取传感器信息
				         */
				        @Override
				        public boolean isCanUseSensor() {
				            return super.isCanUseSensor();
				        }
				
				        /**
				         * 是否限制个性化推荐接口
				         */
				        @Override
				        public boolean isLimitPersonalAds() {
				            return super.isLimitPersonalAds();
				        }
				    };
				}
				
			

RichMob iOS SDK 隐私设置

				
				let config = HYApiSDKConfiguration.shared
				config.isDisabledLocation = true
				config.isDisabledIDFA = true
				config.isDisabledIDFV = true
				config.isDisabledCA_ID = true
				config.isDisabledSSID = true
				
				config.IDFA = "xxxxx"
				config.IDFV = "xxxxxx"
				config.location = location
				config.CA_ID = [
				            [
				                "id": "xxxx",
				                "version": "20230330"
				            ],
				            [
				                "id": "xxxx",
				                "version": "20250325"
				            ]
				        ]
				
			
				
				@objc public class HYApiSDKConfiguration : NSObject {
				
				    @objc public static let shared: HYApiSDK.HYApiSDKConfiguration
				
				    /// 是否禁用IDFA,默认不禁用
				    @objc public var isDisabledIDFA: Bool
				
				    /// 是否禁用IDFV,默认不禁用
				    @objc public var isDisabledIDFV: Bool
				
				    /// 是否禁用CA_ID,默认不禁用
				    @objc public var isDisabledCA_ID: Bool
				
				    /// 是否禁用定位,默认不禁用
				    @objc public var isDisabledLocation: Bool
				    
				    /// 是否禁用个性化,默认不禁用
				    @objc public var isDisabledPersonalized: Bool
				
				    /// 是否禁用SSID,默认不禁用
				    @objc public var isDisabledSSID = false
				
				
				    /// 传入参数
				    @objc public var IDFA: String?
				
				    @objc public var IDFV: String?
				
				    @objc public var CA_ID: [[String : String]]?
				
				    @objc public var location: CLLocation?
				    
				    @objc public var SSID: String?
				
				    @objc deinit
				}