大多数浏览器和
Developer App 均支持流媒体播放。
-
Game Center 玩家标识符
Game Center 现在支持界定于个别游戏或开发团队 ID 的永久玩家标识符。了解限定范围的标识符如何提高玩家隐私的保护,看看如何将您的 app 和游戏迁移到推荐的 API。
资源
相关视频
WWDC19
-
下载
大家好 我叫 Ben Harry 来自 Game Center 工程团队 在这个展示中 我将谈一谈 Game Center 的 玩家身份标识符
首先 我将给你们简单介绍一下 Game Center 为你的游戏玩家 提供了什么
Game Center 是一个社交游戏网络 它可以让玩家 在排行榜上看到自己的最高分 看到他们在你的游戏中 获得的成就 挑战他们的朋友 来完成一个成就 或者打败一个排行榜分数 和他们的朋友们 玩实时或回合制游戏
Game Center 游戏的核心 就是玩家
玩家是由 饱含区分不同玩家 独特信息的 对象所表示
代表 Game Center 玩家的 对象就是 GKPlayer
每个 GKPlayer 通过 alias 属性都有一个 独特的昵称
玩家也可以选择一个 在 Game Center UI 中 可以用到的头像 另外 每个 Game Center 用户 都有一个独特的 静态身份标识符 这个标识符在玩家玩的所有游戏中都会保持一致
你可以使用这个标识符来 存储每个玩家的信息
现在我要谈一谈 一个玩家的静态标识符 现在是如何在 Game Center 中运行的
你可能对此已经有所了解 不过我们还是来看一下 这个例子 来巩固一下你的记忆
这里我们有两个团队 团队 A 和团队 B
在这个展示中 我会使用团队来代表 使用 App Store Connect 在 App Store 中 发布游戏的开发团队
我在玩团队 A 的两个游戏 同时 我也非常喜欢
正如我们看到的 我的静态 Game Center 标识符是 P123
每个游戏都会看到 相同的值 我的标识符 P123 不论我玩的什么游戏 静态标识符都是相同的
下一步 我们想要 增加隐私性 于是我们新增 仅用于团队或游戏的 新的玩家标识符
所以让我们先来 第一个新标识 teamPlayerID
请记住 团队指的是 将游戏发布到 App Store 的 开发团队
我们再次以团队 A 和团队 B 之前提到的游戏为例
请注意我现在有 两个不同的标识符 当我玩团队 A 的游戏时 我的 teamPlayerID 数值是 T11 当我玩团队 B 的游戏时 我的 teamPlayerID 数值是 T22
这意味着我的 teamPlayerID 数值只局限于发布我玩的 游戏的团队
这是一个对玩家隐私的改进 因为团队 A 只会知道 我的 teamPlayerID 是 T11 团队 B 只会知道 我的 teamPlayerID 是 T22
这就是 teamPlayerID
我现在想要给你们介绍 我们其他的新的玩家标识符 gamePlayerID
gamePlayerID 是每个游戏中 每个玩家都独有的标识符
这意味着我的 gamePlayerID 在我玩的每个游戏中 都是独一无二的
它的数值也 不受发布游戏的团队约束 让我们回到熟悉的两个团队 团队 A 和团队 B 正如你所见 不管是哪个团队发布的游戏 我的 gamePlayerID 在每个游戏中都不一样
为了进一步展示 gamePlayerID 是如何不受团队约束的 我们来考虑一个 游戏从一个团队转移到 另一个团队的例子 我将为你们展示 当游戏 2 从 团队 A 转移到团队 B 时 我的范围标识符会发生什么
比如说团队 A 将游戏 2 的所有权 交给了团队 B
现在 我想玩游戏 2
我游戏 2 的 gamePlayerID 还是一样的
我游戏 2 的 gamePlayerID 与游戏相连 不受团队的约束
现在 你可能会注意到 关于我的游戏 2 的 teamPlayerID 中的一些变化
我的游戏 2 的 teamPlayerID 呈现了团队 B 的数值 因为它现在由 B 团队 发布至 App Store
我们已经讲述了 新的 Game Center 标识符的范围 以及当游戏 所有权转变时 这些标识符会发生什么
现在 我将谈一谈 你如何在 你开发的游戏中 使用这些标识符
正如你所见 我们为 GKPlayer 增加了两个 新的范围标识符 那就是 teamPlayerID 和 gamePlayerID teamPlayerID 和 gamePlayerID 引入的目的就是 增强玩家的隐私 这与 Apple 承诺
新的标识符会替换 现有的静态标识符 也就是 GKPlayer 的 playerID
playerID 属性 现在被弃用了 所以我鼓励你们 使用这些新的范围标识符
正如我之前提到的 teamPlayerID 和 gamePlayerID 是引入来代替 静态 playerID 的
如果你不在你的游戏中 查询 playerID 那你不需要做出任何改变
如果你查询 playerID 你可能需要转换到 新的范围标识符
在大多数情况下你会使用 teamPlayerID
同样地 如果你现在使用静态 playerID 存储游戏数据 你应该使用团队范围的 ID
这样做可以处理 多名 Game Center 玩家 共享设备的情况
如果你们有人 坚持在自己的后端系统中 使用静态 playerID 你也应该更新至新的 范围标识符
在成功认证后 你可以随时这样做
接下来 让我来为你们展示一下 范围标识符寻找本地玩家 和寻找非本地玩家的不同
你可能知道 GKLocalPlayer 是代表了 在一个设备上验证过的 Game Center 玩家的对象 在任何特定的时间 只有一个玩家能被认证 GKLocalPlayer 有一个 持久化的 teamPlayerID 和 GamePlayerID 那 GKPlayer 又是怎样的呢 00:07:00.436 --> 00:07:02.206 A:middle GKPlayer 对象
提供关于其他玩家的信息
这些是非本地玩家 他们可能会在排行榜中 在最近玩过的名单 多人模式以及其他情况中出现
GKPlayer 的范围标识符 会根据使用的 环境进行实例化
比如说根据 每个排行榜实例 多人模式 这意味着 你不能依靠它们来 在后续的游戏中持久化
如果你们有自己的 玩家账号系统 在这种情况下 你们会加载相应的 GKPlayer 对象 为了实现这个 使用在 GKPlayer 上的 loadPlayersForIdentifiers: withCompletionHandler 方法
你可以使用 teamPlayerID 或者 gamePlayerID 作为标识符
当你使用新的标识时 在很罕见的情况下 范围标识符 可能会不可用
如果范围标识符不可用的话 应该怎么做呢
一般来说 当一个玩家启动你的游戏 本地玩家的 范围标识符 会在成功认证后启用
然而 也有很小的概率 范围标识符可能会不可用 针对这种情况 我们为 GKPlayer 增加了新的 API scopedIDsArePersistent
如果它们不可用的话 这个属性就为假
这意味着你需要 在为本地玩家使用 teamPlayerID 或者 gamePlayerID 之前 就检查这个属性
我们来通过一个 在成功认证后 使用范围标识符的 例子来整合所有信息
正如你们所知 当认证处理器返回时 你需要检查 Game Center 是否返回了一个 视图控制器 如果是的话 你需要在 合适的时候展示视图控制器
如果没有视图控制器 而且本地玩家也成功认证了 那你就可以 在第一次检测到 范围 ID 是一个持久化数值时 就使用范围标识符
如果你在自己的后端系统中 持久化 PlayerID 现在你应该把 旧的静态标识符 转换为新的范围标识符 接下来我要总结一下 我今天介绍的内容
Game Center 为了 增加玩家的隐私性 引入了新的范围标识符 一个玩家的 teamPlayerID 仅限于你的开发团队 一个玩家的 gamePlayerID 限于游戏 如果这个游戏的开发者变了 gamePlayerID 依然属于游戏
使用这些 Game Center API 中 新的范围标识符 正如你使用 playerID 一样 这些标识符现在都是可用的 所以今天就开始使用吧
了解关于这个演示的 更多信息 请关注 屏幕上的链接
谢谢收看
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。