MSDK(海外)开发者合规指引
生效日期:2024-09-09
更新日期:2024-10-14
更新内容:更新示例图片
尊敬的开发者:
非常感谢您选择在您所开发的产品中集成 MSDK(以下简称“本产品”)的产品和服务!
请您按照以下合规指引做好海外合规的保障工作。
请前往 GCloud 官网查看和下载最新版本 MSDK。
根据全球各国家法律规定及数据隐私监管(GDPR/COPPA等)要求,未成年人体验游戏时需要先获取家长授权同意(各国家具体标准,请参见 2.1.3相关文档-《国际年龄阀门及家长同意标准》)。
为满足法定要求,MSDK&中控团队联合GRP、海外数据合规与隐私保护中心、法务等团队为业务提供标准化的未成年认证以及保护方案。MSDK 对接游戏建立通道,中控负责未成年数据判断和策略下发。
主要能力包括:
1. 用户年龄认证
使用场景:
存在未保要求的国家中,不同国家地区有不同的成年人年龄阀门要求,对未成年人的要求也不一致,我们通过用户年龄认证能力,要求用户选择自己的国家地区(会根据用户ip有默认国家地区)以及填写用户自己的实际年龄,以此作为后续我们未保实施相关措施的依据。
用户选择年龄方式支持:自行填写年龄,自行填写出生年月日,自行勾选是否成年,自行填写证件信息。
2. 未成年人家长授权
使用场景:
存在未保要求的国家中,未成年人如果想要玩我们的游戏,必须首先征得家长的授权同意,而不同的国家,对家长授权的方式有不同的要求,当前主要有三种授权方式:用户自我勾选家长是否同意,家长邮箱授权,家长信用卡授权。
3. 实名认证(韩国PC)
使用场景:
韩国对本国发行的端游游戏,有着比较严格的合规要求,用户注册过程中,必须接入韩国本地身份验证服务,验证用户真实年龄,并于未成年人用户,家长授权过程中,还需要验证家长相关身份。
当前与韩国服务商合作,提供了韩国当前最常用的pass及toss两种认证方式供用户选择。
除上述基础能力外,中控额外提供了可选的游戏内社交许可(语音、文本聊天)授权、游戏18禁模式、家长管控平台以及对游戏时长&充值限制的灵活配置能力,以满足业务灵活应对发行地区的不同要求、选择接入对应的未成年保护服务。
详细能力介绍,请参见 2.1.3 相关文档-《海外未成年保护功能介绍》
业务在用户登录环节,结合上述年龄认证和未成年家长授权能力,即可完成用户的年龄认证及家长授权操作。
您可以按照下述步骤接入实现海外未成年保护能力。
在 MSDK 侧,您需按以下步骤进行配置和接口调用:
1. 前往飞鹰管理端,在所接入的渠道中开启海外未成年保护认证的开关:
2. 在登录前调用以下客户端接口设置好语言和地区,后续登录过程拉起的海外未保页面会根据设置的语言、地区及策略进行展示:
l 设置语言
填写规范为 BCP 47 Code 字符串,例如:zh-CN
// C# 接口
MSDKTools.SetLanguage(lang);
// C++ 接口
MSDKConfig::SetLanguage(lang);
l 设置地区
第一个参数必填,第二、三参数选填 填写规范为首个元素固定为 ISO_3166-1 规范地区编码,示例:"region":["US","NY","NYC"] 代表 美国->纽约州->纽约
// C# 接口
MSDKTools.SetRegion(country, province, city);
// C++ 接口
MSDKConfig::SetRegion(country, province, city);
在中控侧,您需按如下步骤进行项目创建和配置规则:
1. 前往未保平台管理端,创建项目(需审核)
未保平台管理端:
国内测试环境-未成年保护管理系统
新加坡测试环境-未成年保护管理系统
新加坡正式环境-未成年保护管理系统
硅谷正式环境-未成年保护管理系统
2. 配置规则
项目创建并审核通过后,最重要的一步就是进行规则配置,平台提供的基础能力会根据这里的配置信息,来决定具体的认证或限制操作如何实施。
l 选择项目发行的国家/地区,如,中国(支持选择多个国家/地区)
l 对选定发行的国家/地区分别配置规则
l 可以随时根据需求,新增或修改国家/地区、新增或修改对应配置。
详细未保平台管理端操作指引,参见 2.1.3 相关文档-《中控未保平台管理端使用手册》
国际上多国推出的数据隐私法中明确规定数据主体拥有数据删除的权利、此外自 2022 年 6 月 30 日起苹果要求上架App Store的应用必须支持允许用户在App中发起帐户删除,否则游戏可能会面临通报,整改,下架等多种不利后果。
根据上述背景提供通用的海外游戏账号注销服务,该服务适用于发行海外的游戏业务,用于此类业务对用户做账号级别的注销操作。
l 具备功能:
¡ 通用注销流程、标准注销协议&用户须知模板(经由国际隐私法务评审)
¡ 支持多语种切换:英语/法语/印尼语/土耳其语/德语/简中/西班牙语/繁中/意大利语/葡萄牙语(如需新增语种可联系MSDK助手添加)
¡ 冷静期15天(可配置)后,进行帐号注销操作,注销为帐号级别,不区分平台、小区等
¡ 提供用户立即注销的选项,支持无冷静期立即进行账号注销操作(注:游戏需充分做好用户身份验证和风险提示,推荐引导客服对接,不建议在线调用)
¡ 用户帐号注销状态查询
¡ 用户冷静期登录时游戏内弹窗提醒、取消账号注销时邮件通知
¡ 通知周边业务进行用户数据删除
¡ 通知游戏业务已经注销的账号信息
l 账号注销流程:
1. 客户端做注销前置条件检查,检查通过之后客户端拉起H5
2. 服务端提供3个IDIP指令,通用方案会在合适的时候调用,具体调用时机及原因详见流程图
1. 接入账号注销申请H5页面
-游戏侧自己需要判断注销的一些前置条件,例如是否有工会、组织等需要退出
-前置条件满足后,使用 MSDK WebView 功能,打开账号注销 H5 页面,并携带加密登录态及其他必要参数(WebView功能及加密登录态获取参考)
-注销申请提交成功后,H5 会返回一个回调,业务可根据回调来进行其他操作
注意:
账号注销不需要分享,接入 H5 时,建议禁用分享功能
测试时一定使用测试号,如果使用自己的账号,务必在沉默期登录游戏,解除注销流程,防止账号被注销
l 通过 OpenDeleteAccountUrl 接口打开账号注销页面
// C# 接口
public static void OpenDeleteAccountUrl(string url,
MSDKWebViewOrientation screenType = MSDKWebViewOrientation.Auto,
bool isFullScreen = false,
string extraJson = "")
// C++ 接口
static void OpenDeleteAccountUrl(const String &url,
int screenType = 1,
bool isFullScreen = false,
const String &extraJson = "")
l 页面地址(请对应使用的 MSDK 环境选择)
测试环境:
https://cdn.itopsdk.com/accas/test/writeoff.html
新加坡正式环境:
https://cdn.itopsdk.com/accas/sg/writeoff.html
硅谷正式环境:
https://cdn.itopsdk.com/accas/us/writeoff.html
温馨提示:
测试环境的页面引入 vConsole 组件,方便用于检查传参错误等调试阶段有可能出现的问题( vConsole 默认出现在页面右下角,表现为一个绿色按钮,点击可查看网络请求,页面控制台输出的信息等等);正式环境则没有。
l 请求GET参数
参数 |
必填 |
类型 |
说明 |
ADTAG |
是 |
string |
固定传值为:client |
itopencodeparam |
是 |
string |
MSDK V5 版本加密登录态,参考2.1中 V5 版本描述获取(msdkEncodeParam/itopencodeparam 参数根据MSDK版本,二选一即可) |
os |
是 |
string |
终端操作系统标示 1 - Android, 2 - iOS, 3 - Web,4 - Linux, 5 - windows, 6 - switch(nintendo) .. |
gameid |
是 |
string |
V5版本业务传MSDK分配的游戏id,V3版本传平台侧的appid(如手Q微信的appid) |
channelid |
是 |
int |
登录渠道id 1 - 微信(WeChat), 2 - 手Q(mqq),3 - 游客(Guest),4 - Facebook,5 - GameCenter, 6 - GooglePlay, 7 - 自建账号体系(selfAccount),9 - Twitter, 10 - garena, 11 - email, 12 - phone, 13 - switch(nintendo), 14 - Line, 15 - Signin with Apple,17 - 快手(Kwai) |
webview |
否 |
string |
根据客户端使用的webview内核传递,可取枚举值:"ue"或者"msdk”,默认为msdk,例如: webview=msdk |
完整请求示例:
https://cdn.itopsdk.com/accas/test/writeoff.html?ADTAG=client&os=1&gameid=11&channelid=1&itopencodeparam=d9b48147c3b809a2bebbd8b2e96c26f1&outerIp=127.0.0.1
l 在WebView回调中接收处理注销流程回调的操作结果
注销操作执行后,页面会调用msdk的jsapi,执行jsCallNative方法,建议在收到注销申请成功回调后,踢用户下线
注意:请确保已经按照 设置监听回调处的指引设置监听回调,返回 webviewRet 的 msgJsonData 即注销操作的具体结果。
// 注销成功 - 参考,具体数据以页面回调为准
'{"MsdkMethod":"jsCallNative","type":"gacc:write_off_success","value":"注销游戏账号申请提交成功"}'
// 备注:通过type等于"gacc:write_off_success"可以判断注销操作成功,此时value是一个固定的字符串
// 注销失败 - 参考,具体数据以页面回调为准
'{"MsdkMethod":"jsCallNative","type":"gacc:write_off_fail","value":"$code|$datamore_seq_id|$message"}'
//备注:通过type等于"gacc:write_off_fail"可以判断注销操作失败,此时value为中包含三个信息(用|隔开),分别是:$code错误码(一个数字)、$datamore_seq_id本次请求序列号(用于后台接口定位错误)、$message错误信息。
关于jsCallNative请参考官方文档:WebView模块 · MSDK Developer Reference
1. 业务侧实现 IDIP 接口
下列接口均需保持幂等,网络问题或系统故障恢复等情况下会产生重复请求。
l 注销回调协议【必须实现】
PS:接入MSDK V5的业务,且账号类型为gopenid时,当用户经过冷静期后(冷静期统一账号侧会进行判断处理),统一账号侧会在底层更换用户gopenid,因此游戏收到此回调时,仅需清理游戏内保存的一些数据,如果gopenid更换后,所有用户数据均不可见,则游戏内接到本回调后可不做任何动作,比如有些游戏存在昵称搜索的功能,则需要处理一下匿名化,gopenid更换无法阻止昵称搜索到旧账号信息;对于游戏内的“各类关系”,例如师徒,情侣,工会等,需要游戏根据产品特性,在收到此回调时自动帮用户解除
回调协议用于将已注销账号回传给游戏业务,供业务做游戏内的逻辑处理,游戏实现回调协议后,需联系 leiyzhang 进行接入,并提供所有area,platid参数枚举值
统一帐号侧会在用户经过冷静期,且帐号被真正注销后(注销操作统一账号会在账号底层操作),遍历所有platid回调该IDIP指令,确保回调至游戏server,如有特殊情况联系 leiyzhang 评估
PS:务必严格按照回调协议的输入和返回提供协议
回调协议对接IDIP,实现回调指令
请求串: cmd=xxxx&gameid=11&area=1&platid=0&gopenid=123456&channelid=1&deltime=1582103465
参数 |
必填 |
类型 |
说明 |
cmd |
是 |
string |
对接IDIP生成cmd指令 |
gameid |
是 |
string |
MSDK分配的游戏id |
area |
是 |
int |
服务器【idip接入需要】 |
platid |
是 |
int |
平台【idip接入需要】 |
gopenid |
是 |
string |
注销的gopenid |
deltime |
是 |
uint32 |
实际注销的时间,Unix时间戳 |
返回串: result=0&error_info=ok
PS: result=-600表示终止注销:业务收到该回调时,由于一些原因需要终止本次注销操作,例如检测到用户账号新产生了一些不满足注销条件的情况
参数 |
必填 |
类型 |
说明 |
result |
是 |
int |
响应码,0表示成功,-600表示终止注销,其余非0为失败,响应码参考IDIP响应码规范 |
error_info |
是 |
string |
返回信息,成功返回ok,失败返回失败信息 |
l 查询玩家最近登陆时间协议【必须实现】
查询玩家最近登陆时间协议用于查询玩家gopenid级别最近一次的登陆时间,统一账号侧每天离线调用,由游戏侧实现具体查询的IDIP指令,并联系leiyzhang进行接入
统一帐号侧会每天针对已经过了冷静期的用户,进行登录时间确认,做二次check校验,如有特殊情况联系leiyzhang评估
PS:务必严格按照查询协议的输入和返回提供指令
查询玩家最近登陆时间协议对接IDIP,实现查询指令
请求串: cmd=xxxx&gameid=wx123456&area=1&platid=xxx&gopenid=123456
参数 |
必填 |
类型 |
说明 |
cmd |
是 |
string |
对接IDIP生成cmd指令 |
gameid |
是 |
string |
MSDK分配的游戏id |
area |
是 |
int |
服务器【idip接入需要】 |
platid |
是 |
int |
平台【idip接入需要】 |
gopenid |
是 |
string |
用户的gopenid |
返回串: result=0&error_info=ok&logintime=1600137371
参数 |
必填 |
类型 |
说明 |
result |
是 |
int |
响应码,0表示成功,非0为失败,响应码参考IDIP响应码规范 |
error_info |
是 |
string |
返回信息,成功返回ok,失败返回失败信息 |
logintime |
是 |
uint64 |
玩家最近一次的登录时间,格式为uninx时间戳 |
l 发送邮件协议【可选实现,若已接入弹窗提示用户处于冷静期,则建议不必实现】
发送邮件协议用于用户取消注销申请后,发送邮件给到用户,游戏实现发送协议后,需联系leiyzhang进行接入,并提供所有area,platid参数枚举值
统一帐号侧会在用户取消注销后,遍历所有platid回调该IDIP指令发送邮件通知用户,确保回调至游戏server,如有特殊情况联系leiyzhang评估
PS:务必严格按照回调协议的输入和返回提供协议,邮件发送需要为gopenid级别,统一账号侧无法拿到小区信息,因此需游戏侧按照gopenid将邮件发送至用户所有小区,告知已取消注销
发送邮件协议对接IDIP,实现回调指令
请求串: cmd=xxxx&gameid=11&area=1&platid=0&gopenid=123456&channelid=1&cancel_time=1582103465&mail_title=xxx&mail_content=xxx
参数 |
必填 |
类型 |
说明 |
cmd |
是 |
string |
对接IDIP生成cmd指令 |
gameid |
是 |
string |
MSDK分配的游戏id |
area |
是 |
int |
服务器【idip接入需要】 |
platid |
是 |
int |
平台【idip接入需要】 |
gopenid |
是 |
string |
取消注销的gopenid |
cancel_time |
是 |
uint32 |
取消注销的时间,Unix时间戳 |
mail_title |
是 |
string |
邮件标题 |
mail_content |
是 |
string |
邮件内容 |
返回串: result=0&error_info=ok
参数 |
必填 |
类型 |
说明 |
result |
是 |
int |
响应码,0表示成功,非0为失败,响应码参考IDIP响应码规范 |
error_info |
是 |
string |
返回信息,成功返回ok,失败返回失败信息 |
l 状态变更回调协议【可选实现,需要获取用户注销状态做一些其他逻辑时可选择接入】
状态变更回调协议用于在每次用户注销状态发生变更时,将最新的注销状态回传给业务,供业务做游戏内的一些特殊逻辑处理,游戏状态变更回调协议后,需联系leiyzhang进行接入,并提供所有area,platid参数枚举值
注销状态枚举值: 1-处于注销冷静期中, 2-已取消注销,注销流程终止, 3-冷静期结束,已正常注销
PS:务必严格按照状态变更回调协议的输入和返回提供协议
回调协议对接IDIP,实现回调指令
请求串: cmd=xxxx&gameid=11&area=1&platid=0&gopenid=123456&channelid=1&state=1&updatetime=1582103465
参数 |
必填 |
类型 |
说明 |
cmd |
是 |
string |
对接IDIP生成cmd指令 |
gameid |
是 |
string |
MSDK分配的游戏id |
area |
是 |
int |
服务器【idip接入需要】 |
platid |
是 |
int |
平台【idip接入需要】 |
gopenid |
是 |
string |
用户的gopenid |
state |
是 |
uint32 |
注销状态,1-处于注销冷静期中, 2-取消注销,注销流程终止 3-冷静期结束,已正常注销 |
updatetime |
是 |
uint32 |
状态变更的时间,Unix时间戳 |
返回串: result=0&error_info=ok
参数 |
必填 |
类型 |
说明 |
result |
是 |
int |
响应码,0表示成功,非0为失败,响应码参考IDIP响应码规范 |
error_info |
是 |
string |
返回信息,成功返回ok,失败返回失败信息 |
2. 申请注销后登录弹窗提示
该功能要求MSDK版本大于等于【5.35.000】,业务接入MSDK弹窗能力后可联系MSDK助手配置启用
MSDK 新版本已经支持个人信息开关以及设置,业务可自由控制合规采集的时机。请您在征得用户有效同意后且在调用 MSDK 初始化接口之前,按以下步骤依次进行:
l 【可选】设备信息场景设置,可以控制 MSDK 功能场景下的数据采集。
l 【必须】开启设备信息采集,用于开启 MSDK 内置隐私合规相关逻辑。不开启将导致内部逻辑无法完全正常进行。
l 【可选】设备信息独立开关设置,可独立控制 MSDK 内部特定字段的采集情况。
l 【可选】设备信息设置,开发者可以自行传入特定字段,以替代 MSDK 内部数据采集。
同时,您需注意,您的产品应仅在满足业务功能所需要的最小必要范围内采集个人信息。对于超出最小必要范围的个人信息,应关闭相应的采集开关或接口,以避免超范围采集个人信息。
MSDK 新版本对上报的设备信息进行了场景区分。如果您接入的是 MSDKV5 版本,您还可以根据自身需求在 MSDKConfig.ini 配置文件中,通过以下开关配置控制具体场景下的设备信息字段上报:
场景 |
开关配置 |
说明 |
基础功能 |
MSDK_DEVICE_INFO_CONFIG |
默认打开,设置为0表示关闭,即在基础功能场景下不上报设备信息字段 |
公告 |
MSDK_DEVICE_INFO_NOTICE |
默认打开,设置为0表示关闭,即在公告场景下不上报设备信息字段 |
其他 |
MSDK_DEVICE_INFO |
默认打开,设置为0表示关闭,即在除基础信息和公告的其他场景下不上报设备信息字段 |
请您在征得用户有效同意后,调用开启设备信息采集开启设备信息采集。MSDK 支持通过函数调用的方式来开启 MSDK 设备信息采集。
l 接口调用
MSDK 提供了以下接口以满足开发者需要,用于设置允许 MSDK 开启设备信息采集。
// Java 位于 MSDKSensitive.java 类中
public static void setCouldCollectSensitiveInfo(boolean couldCollect);
// C++
static void GCloud::MSDK::MSDKSensitive::SetCouldCollectSensitiveInfo(bool couldCollect);
// C#
// 位于 MSDKSensitive.cs 类中
public static void SetCouldCollectSensitiveInfo (bool couldCollect);
以下代码片段展示了在 Android 场景下,用户同意隐私政策后,开启 MSDK 设备信息采集的功能:
void onPolicyConfirmedByUser() {
...
MSDKSensitive.setCouldCollectSensitiveInfo(true);
...
}
注意(重要):AndroidID、OAID 等数据信息为高敏字段,不允许采集
您有两种方式详细控制 MSDK 采集的特定字段:
1. 配置开关,可以通过配置文件进行开关控制
2. 接口调用,在完成开启设备信息采集(setCouldCollectSensitiveInfo = true)之后调用配置接口接口。
目前支持字段情况如下:
字段 |
字段说明 |
关闭方式 |
备注 |
Apn |
网络类型 |
配置,接口 |
网络类型 |
l 配置开关
在 MSDKConfig.ini 中,增加或修改配置项 MSDK_DENIED_COLLECT_LIST,该配置项为不允许采集的特定字段列表。例如不采集 Apn 和 AndroidID,参考配置示例如下:
// 配置项位于 msdkconfig.ini,多个字段使用英文逗号连接,如:
MSDK_DENIED_COLLECT_LIST = Apn,AndroidID
l 接口调用
开发者也可以通过代码调用的方式来进行特定字段的采集开启或关闭,目前支持以下接口:
// 参数示例:{"AndroidID":true,"Apn":true} 说明:true 表示允许采集;false 表示不允许采集;
// Java 位于 MSDKSensitive.java 类中
public static void setCollectSensitiveInfo(String jsonInfo);
// C++
static void GCloud::MSDK::MSDKSensitive::SetCollectSensitiveInfo(const String &jsonInfo);
// C#
// 位于 MSDKSensitive.cs 类中
public static void SetCollectSensitiveInfo (string jsonInfo);
以下代码展示了 Android 场景下不采集 Apn 的调用示例:
void onShowPolicyResult() {
...
String jsonInfo = "{\"Apn\":false}";
MSDKSensitive.setCollectSensitiveInfo(jsonInfo);
...
}
优先级说明:
一般地,在未进行配置设置或代码调用的情况下,MSDK 将按默认值(开启)进行内部逻辑处理;
特别地,在开发者做了配置设置且进行了代码调用的情况下,MSDK 将按按照 代码接口 > 配置文件 > 默认值(开启)的优先级顺序来决定是否开启采集特定字段。
其他字段
MSDK V5 其他字段通过 TDM 获取,开发者如需关闭,请联系 TDM 咨询;
MSDK 新版本已经支持设备信息的设置功能。如您自身已经采集了对应数据,则可以通过 2. 设备信息独立开关 关闭 MSDK 内置设备信息采集,并传入设备信息,MSDK 则会以传入的设备信息进行功能逻辑处理。
字段 |
字段说明 |
备注 |
WiFiMacAddress |
Wifi Mac 地址 |
Wifi Mac 地址 |
Model |
设备型号 |
https://developer.android.com/reference/android/os/Build#MODEL |
Imsi |
IMSI |
International Mobile Subscriber Identity(国际移动用户识别码) |
Cid |
基站编号 |
Cell Identity(基站编号) |
l 接口调用
// 参数示例:
// {"WiFiMacAddress":"xxx", "Model":"xxx", "Imsi":"xxx", "Cid":"xxx"}
// Java 位于 MSDKSensitive.java 类中
public static void setSensitiveInfo(String jsonInfo);
// C++
static void GCloud::MSDK::MSDKSensitive::SetSensitiveInfo(const String &jsonInfo);
// C#
// 位于 MSDKSensitive.cs 类中
public static void SetSensitiveInfo (string jsonInfo);
以下代码片段演示了 Android 场景下,如何传递您采集的 Model 给 MSDK 使用:
void onShowPolicyResult() {
String jsonInfo ="{\"Model\":\"xxxxxxxxxx\"}";
MSDKSensitive.setSensitiveInfo(jsonInfo);
}
MSDK 通过插件化的方式(MSDKLBS)提供了位置功能模块,如您的应用没有定位相关的功能场景,可以不接入 MSDKLBS 组件。
MSDKLBS 组件提供以下接口能力:
l GetLocation
此接口用于获取经纬度信息。
注意(重要):
¡ 此接口涉及 GPS 信息的获取,海外 GPS 数据为高敏设备信息,如无必要场景不建议使用。如需使用请联系您的接口法务进行确认。
¡ 调用前,宿主 App 需要声明位置权限及用途,在得到用户对于位置权限的授权才可使用。详情可以参考 MSDK 位置功能模块的接入文档。
l ClearLocation
此接口用于清除位置信息。
l GetNearby
此接口用于获取用户附近的好友。
l GetIPInfo
此接口用于查询 IP 所在的粗略位置信息(国家、地区、城市)
MSDK 基于第三方 SDK(AppsFlyer、Adjust、Firebase、Facebook等) 提供了第三方平台数据上报能力,MSDK 本身不会通过这些第三方 SDK 采集及上报信息。
按照法务要求,如您接入了 MSDKAppsFlyer、MSDKAdjust、MSDKFirebase、MSDKFacebook 等组件并使用了其上报功能,请您务必做好自身的数据信息采集和上报披露,及相应的第三方平台数据信息采集及上报的披露。
根据合规要求,在征得用户同意后才可上报数据,才可进行数据事件上报。您可以根据以下指引,对 Facebook、Firebase、AppsFlyer、Adjust 等渠道进行上报开关控制:
l Facebook 渠道:Facebook 数据上报支持动态开关能力
l Firebase、AppsFlyer、Adjust 渠道:Firebase/AppsFlyer/Adjust 数据上报支持动态开关能力
根据《GDPR》和其他欧盟数据保护法规的要求,您需要先取得最终用户的同意,方可通过我们的 SDK 发送数据。因此,您需要确保 SDK 实现满足这些同意要求。
如果您接入了 MSDKFacebook、MSDKFirebase、MSDKAppsFlyer 等组件能力,请按照要求在用户同意后,调用 MSDK 的扩展接口进行三方 SDK 的 User Consent 数据字段设置。
MSDK 支持通过 MSDKExtend.Invoke 接口设置 Facebook 渠道的 user consent。
支持的字段:
字段名称 |
说明 |
advertiser-id |
用于开启或关闭广告ID的采集:true - 开启广告ID采集;false - 关闭广告ID采集; 如未通过接口设置传值,则默认值取决于业务是否按照官方文档禁用了广告 ID 采集。 |
示例代码:
以下代码示例展示了如何对相关字段进行设置,具体值请按实际场景需求传入
string userConsent = "{\"advertiser-id\":true}";
MSDKExtend::Invoke("Facebook", "setUserConsent", userConsent);
具体请参照 Facebook User Consent 官方说明:
Android:https://developers.facebook.com/docs/app-events/getting-started-app-events-android
iOS:https://developers.facebook.com/docs/app-events/getting-started-app-events-ios
MSDK 支持通过 MSDKExtend.Invoke 接口设置 Firebase 渠道的 user consent。
支持的字段:
字段名称 |
说明 |
ad_storage |
开启用于广告目的的数据存储:true - 开启;false - 关闭; 如未通过接口设置传值,则默认值取决于业务是否按照官方文档关闭了用于广告目的的数据存储。 |
analytics_storage |
开启用于分析目的的数据存储:true - 开启;false - 关闭; 如未通过接口设置传值,则默认值取决于业务是否按照官方文档关闭了用于分析目的的数据存储。 |
ad_user_data |
开启将用于广告目的的用户数据发送至 Google:true - 开启;false - 关闭; 如未通过接口设置传值,则默认值取决于业务是否按照官方文档关闭了将用于广告目的的用户数据发送至 Google。 |
ad_personalization |
开启个性化广告:true - 开启; false - 关闭; 如未通过接口设置传值,则默认值取决于业务是否按照官方文档关闭了个性化广告。 |
示例代码:
以下代码示例展示了如何对相关字段进行设置,具体值请按实际场景需求传入
string userConsent = "{\"ad_storage\":true,\"analytics_storage\":true,\"ad_user_data\":false,\"ad_personalization\":false}";
MSDKExtend::Invoke("Firebase", "setUserConsent", userConsent);
其中,扩展 JSON 参数的键值为 Consent Type
具体请参照 Firebase User Consent 官方说明:
iOS:https://developers.google.com/tag-platform/security/guides/app-consent?platform=ios#initial_setup
MSDK 支持通过 MSDKExtend.Invoke 接口设置 AppsFlyer 渠道的 user consent。
支持的字段:
字段名称 |
说明 |
gdpr_applies |
是否欧盟用户:true - 是;false - 否; |
ad_user_data |
是否用于广告目的:true - 是;false - 否; |
ad_personalization |
开启个性化广告:true - 是;false - 否; |
示例代码:
以下代码示例展示了如何对相关字段进行设置,具体值请按实际场景需求传入
// gdpr_applies: 欧盟用户,ad_user_data: 用于广告目的,ad_personalization: 个性化广告
string userConsent = "{\"gdpr_applies\":true,\"ad_user_data\":true,\"ad_personalization\":true}";
MSDKExtend.Invoke("AppsFlyer", "setUserConsent", userConsent);
具体请参照 AppsFlyer User Consent 官方说明:
Android:https://dev.appsflyer.com/hc/docs/ios-send-consent-for-dma-compliance
iOS:https://dev.appsflyer.com/hc/docs/ios-send-consent-for-dma-compliance
请您务必确保终端用户首次启动 App 时,通过弹窗等明显方式提示用户阅读您 App 的《隐私政策》并获得终端用户有效同意之后再初始化 MSDK。
如果没有初始化 MSDK,将无法使用 MSDK 提供的服务。如果您接入了 GCloudSDK,请参考 GCloud 文档完成 MSDK 初始化。
以下是 MSDK V5 初始化接口:
// Android
MSDKPlatform.initialize(this);
// iOS
GCloud::MSDK::MSDK::GetInstance()->Initialize(NULL);
// Unity
MSDK.Init();
// UE4
// 如果您接入了 GCloudSDK,请参考 GCloud 文档完成 MSDK 初始化
MSDK 提供了开放平台接入能力,通过开放平台,业务方可以通过实现 MSDK 的开放平台接口协议,开发自己的组件功能满足自身需求。
如果您通过开放平台接口协议实现开发了自己的组件功能,请做好以下信息的披露:
l 组件所采集的设备信息
l 组件所使用的开源软件信息
建议联系您的接口法务对您的组件进行审核评估。
根据苹果 AppStore 商店要求,在 2024 年开始,App 和 SDK 需要提供隐私清单,以满足审核要求。详情可参考:Upcoming third-party SDK requirements - Support - Apple Developer
如果不处理,则在苹果 AppConnect 审核时,会出现如下图所示的问题:
如果您接入了 MSDK 的组件,可以参考MSDK 关于 AppStore SDK 隐私清单处理方案 2024-05文档进行相应组件的处理。
MSDK 披露了在各个功能中所采集的数据信息,数据使用目的,以及数据处理方式等信息。MSDK 版本对应的 ROP 文件可以联系我们进行获取。下载好对应的 ROP 文件后,再需要根据自身接入情况摘取所需的行进行披露。业务请先阅读以下注意事项:
(1)不用把带有 【Note: No need to be included in Game-specific ROP】标注所在那一行的内容写到游戏的ROP
(2)带有 【Note to Game Developer】的标注 = 游戏项目需要看&确定的内容。
您可以联系我们获取 MSDK 的 PIA 问卷表。
您可以联系我们获取 MSDK 目前所使用的开源软件信息,请注意校对所接入的三方 SDK 版本。
联系方式 |
MSDK 助手 |
MSDK 产品接口人 |
@happyjchen(陈捷) |
MSDK 开发接口人 |
@xiaoxuzheng(郑晓旭) |
|
|