11/08/2024 16:35:54
Guest 渠道说明
二、Android 游客说明
2.1 游客原理
Android GuestId 是由 Android 的 UUID 生成的,跟 MSDK 的 openid 是一一对应的。所以 GuestId 的改变会导致 openid 改变。由于设备唯一 ID 是用户敏感数据,不符合 GDPR 和大部分国家的相关法律法规,因此无法用来做 GuestId。
2.2 游客生成规则
Andorid GuestId 具体生成逻辑如下图
2.3 游客ID -- UUID
UUID 全局唯一标识符,它保证在同一时空中的所有机器都是唯一的。
UUID.randomUUID().toString();
2.4 游客丢失情况说明
- 删除重装、清理应用数据,游客一定丢失。
- 用户重置、恢复出厂设置时,游客一定会丢失。
三、iOS 游客说明
3.1 游客原理
MSDK iOS 以应用 IDFV(identifierForVendor)作为 GuestID 来生成 OpenID,用以免登录进入游戏进行体验。 MSDK 提供业务可选服务,用以将 GuestID 写入 Keychain 存储,尽量保障用户卸载再安装应用后取到相同的 GuestID 来保留旧的游客账号。
3.2 IDFV
IDFV 是 Apple 提供给应用 Vendor(发行商)的唯一识别码,同一 Vender 下的应用 IDFV 相同。
Vendor 和 Bundle ID 的关系:
- 在 iOS 6 中,Bundle ID 的前两个组件用于生成 Vendor ID。如果 Bundle ID 只有一个组件,则使用整个 Bundle ID。
- 在 iOS 7 上,除了最后一个组件之外,Bundle ID 的所有组件都用于生成 Vendor ID。如果 Bundle ID 只有一个组件,则使用整个 Bundle ID。
[info] 如果应用不是从 App Store(如果企业应用和仍在开发中的应用),则会根据应用程序的 Bundle ID 计算 Vendor。
Bundle ID | iOS 6.x | iOS 7.x |
---|---|---|
com.tencent.app1 | com.tencent.app1 | com.tencent.app1 |
com.tencent.msdk.app1 | com.tencent.msdk.app1 | com.tencent.msdk.app1 |
example | example | example |
当应用保持在 iOS 设备上安装(或有同一发行商的其他应用)时,IDFV 的值保持不变。以下几种情况下 IDFV 会发生改变:
- 设备升级或降级系统后重新激活并设置为新的设备;
- 还原并抹掉设备数据;
- 当用户从设备中删除该发行商的所有应用程序并随后重新安装一个或多个应用程序时;
- 当使用 Xcode 安装测试版本或使用 AD-Hoc 发行版在设备上安装应用程序时。
3.3 Keychain 存储
Keychain 是 iOS 设备中的一个安全存储容器,可以为不同应用存储敏感信息比如用户名,密码,网络密码,认证令牌。Keychain 是一个系统级
SQLite 数据库,位于 /private/var/Keychains/keychain-3.db
,其保存的所有数据都是加密过的。
iOS 系统存储的 Keychain item 有一个属性 Keychain access group,每个应用仅能访问它有权限的这些 Keychain item,这个授权来自于对应用进行签名的描述文件,是根据当前 App ID 的前缀 Team ID
。
- 打开keychain sharing后,系统也会默认使用配置中的第一个accessGroup
- 第一个如果没有或者没有打开keychain sharing,则会使用Bundle ID作为默认accessGroup
- 使用举例:A未打开keychain共享,保存数据;B打开keychain共享,使用A的Bundle ID作为key,能获取到数A的据
- 建议添加Bundle ID作为第一个accessGroup,可以减少升级版本时非Bundle ID的accessGroup被删除导致数据丢失问题发生的可能性
3.4 应用转让
苹果开发者可以在采购、资产购置或类似情况下使用 iTunes Connect 将符合条件的应用转至其他帐户。当您转移应用时,该应用在 App Store 或 Mac App Store 中仍将处于可用状态,所有评级和评论都将保留,用户将继续有权访问将来的更新。
应用转让官网文档 iTunes Connect Developer Help About App Transfer
在应用被转让后,与其相关联的 App ID 也会转让给接收者的开发人员帐户,不同开发者账号 Team ID 不相同。被迁移的应用 App ID 拥有新的 Team ID 作为前缀,如果之前的版本向 Keychain 写入了数据,使用新开发账号向 App Store 更新应用时会收到 Potential Loss of Keychain Access 的警告,会导致旧版本写入 Keychain 数据丢失,新版本访问不了。
[info]注意:
1、转让后应用 Bundle ID 不会改变,如果转让的 App ID 过去为 Wildcard(通配符)App ID,则会转换为一个与该 App 的 Bundle ID 完全匹配的 Explicit(显式)App ID。
2、A one-time loss in keychain data will occur if you switch your App ID prefix and understand that it's not possible for a transferred app to maintain access to the prior keychain associated with the App ID prefix of the previous owner.
3、The keychain access will only be lost after an update to the app is released on the App Store.
1)应用转让对游客账号丢失影响
开启了 MSDK Keychain 存储游客 GuestID 的游戏如果进行了应用转让,存在很大的游客账号丢失风险。
[info]注意:如果没有使用任何 Keychain 存储功能,则不受应用迁移影响。
升级转让的应用后,存储于 Keychain 的 GuestID 必然丢失,游客登录会调用系统接口获取新的 IDFV 进行登录,如果 IDFV 和之前存储于 Keychain 中的 IDFV 相同,则保留之前的游客账户,否则游客账户丢失。 所以游客账户是否丢失取决于用户在旧版 App 游客登录后到进入新版 App 期间 IDFV 值是否发生改变。
下面以表格说明不同情况下应用迁移对游客账号的影响。
旧版是否卸载过 | 新版安装方式 | 游客是否丢失 | 备注 |
---|---|---|---|
卸载过 | 卸载安装 | 丢失 | IDFV 发生了改变 |
卸载过 | App Store 升级 | 丢失 | IDFV 发生了改变 |
未卸载过 | App Store 升级 | 保留 | IDFV 未发生改变 |
[info]注意:
1、对于系统升级或还原系统必然会导致游客账号丢失的情况,不特别说明;
2、上述表格不考虑设备上安装了同一发行商其它应用的情况。
All rights reserved.