游客账号
Android
由于 Android 唯一标识符一般与敏感数据相关,建议遵循 使用 Android 标识符的最佳做法 来辨识您的玩家。
Android 通用唯一标识符(UUID),是在同一时空中被认为是唯一的一个128位值。Player Network 以 OpenID 识别玩家,而 OpenID 则对应由 Android UUID 生成的 Android GuestID。因此,GuestID 上任何的变动也将造成 OpenID 相应的变化。
通过以下生成逻辑,Android GuestID 的生成代码为:UUID.randomUUID().toString();
。
游客丢失情况说明
如果玩家卸载并重新安装游戏或将应用数据删除,他们的 GuestID 将会丢失。此外,如果玩家重置设备或恢复出厂设置,GuestID 也会丢失。
为了避免上述情况的发生,游戏应建议玩家为游客账号与 LEVEL INFINITE PASS 或其他第三方渠道账号进行绑定。
iOS
供应商标识符(IDFV)属供应商的唯一标识符。在同一设备上,同一供应商所开发的所有应用将共用相同的 IDFV。然而,对于在同一设备上由不同供应商开发的应用,或对于在不同设备上由相同供应商开发的应用,IDFV 将不相同。
Player Network 使用 IDFV 作为 iOS GuestID 来生成 OpenID,以便玩家可在不创建账号的情况下体验游戏。有关 Apple 生成 IDFV 的更多信息,请参见 identifierForVendor。
Keychain 存储
虽然 IDFV 在应用(或同一供应商的其他应用)被安装到设备上时不会有变动,在以下几种情况下可能会有所变化:
- 设备在系统升级或降级后作为新的设备重新激活。
- 设备恢复出厂设置后重置设备数据。
- 用户在删除供应商的所有应用后重新安装一个或多个应用。
- 在设备上使用 Xcode 安装测试版本,或使用 ad-hoc 分发来安装应用。
将 iOS GuestID 保存到 keychain 可确保玩家在上述场景中也能继续保留相同的 GuestID。Keychain 是一个 系统级 SQLite 数据库,位于 /private/var/Keychains/keychain-3.db
,用于存储敏感信息,如用户名、密码、网络密码、和不同应用的认证 token。每个 keychain 项包含一条信息及其属性,例如密码与其属性。
权限组用于在应用间安全地共享 keychain 项而无需额外的用户权限。只需在 Xcode 内打开 keychain 共享功能,来自相同 keychain 权限组的应用间便可共享 keychain 项。虽然应用至少持有一个以其 App ID(以 Apple 生成的 Team ID 为前缀的 Bundle ID)命名的私有权限组,和任意数量的 keychain 权限组,但 keychain 项只有一个权限组。Keychain 权限组的名称是 Apple 生成的 Team ID 后跟一个通用字符串组成,通常采用与 Bundle ID 类似的反向DNS域的形式。
如果应用没有指定 keychain 项的权限组,并开启了 keychain 共享功能,将默认使用应用配置列表中的第一个权限组。然而,如果 keychain 共享功能 没被启用,或应用不存在任何 keychain 权限组,则默认使用以 App ID 命名的私有权限组。
因此,如果 app A 在未开启 keychain 共享功能的情况下保存数据,而 app B 开启了keychain 共享功能,app B 可将 app A 的 App ID 添加到自己的权限组中,以获取由 app A 保存的数据。
建议将以 App ID 命名的私有权限组设置为第一个访问组。这可避免在版本升级过程中权限组被删除而导致的数据丢失。
应用转让
开发者可在出售应用、被调派到其他组织、或其他类似事件时,将其拥有的应用转让到另一个 App Store Connect 账号。在应用被转让后,应用仍可在 App Store 或 Mac App Store 中找到,不影响之前累积的评分与评论,而且用户仍可继续获得日后的更新。
有关更多信息,请参见 App 转让概述。
应用被转让后,关联的 App ID 也会有所变化。由于不同的开发者账号有不同的 Team ID,转让后的 App ID 将会以新的 Team ID 作为前缀。如果应用在转让前已将数据存储在于 keychain 中,开发者在使用新的开发者账号在 App Store 上发布更新时,会收到关于 Potential Loss of Keychain Access 的警示。这意味着在更新过后,应用将无法访问与之前的 Team ID 为前缀的 App ID 关联的 keychain 中的数据。
- 转让后应用的 Bundle ID 不会改变。如果转让前的 App ID 为通配 App ID,在转让后则会变换成与 Bundle ID 完全匹配的 显示 App ID。
- 被转让的应用无法继续访问与前开发者的 App ID 前缀关联的 keychain,详情请参见 A one-time loss in keychain data will occur if you switch your App ID prefix。
- keychain 的权限只有在 App Store 发布应用更新后才会失去。
应用转让对游客账号丢失的影响
如果应用未开启 keychain 共享功能,应用转让对游客账号则不会有影响。然而,如果应用开启了 keychain 共享功能,GuestID 丢失的可能性非常大。
开发者如果在应用转让后更新已将 GuestIDs 存储到 keychain 内的应用,其中的 GuestID 将会丢失。然而,由于 Player Network 以 IDFV 作为 GuestID 来生成 OpenID,如果新的 IDFV 与之前的相同,GuestID 将保持与之前存储在 keychain 内的相同。因此,游客账号的丢失与保留取决于用作游客登录的 IDFV 值是否会因版本的不同而产生变化。
以下表格说明应用转让对游客账号的不同影响:
否卸载过旧版 | 新版安装方式 | 游客账号是否丢失 | 备注 |
---|---|---|---|
卸载过 | 卸载安装 | 丢失 | IDFV 将改变 |
卸载过 | App Store 升级 | 丢失 | IDFV 将改变 |
未卸载 | App Store 升级 | 保留 | IDFV 不改变 |
- 对于系统升级或系统还原可能导致游客账号丢失的情况,表格内并无注明。
- 上述表格不考虑设备上是否安装了同一供应商发行的其它应用。