WWDC Quick Look 💓 By SwiftGGTeam
Reach new players with Game Center dashboard

Reach new players with Game Center dashboard

观看原视频

Highlight

Game Center 在 2022 年把好友成就、排行榜跃升和分数超越汇总进新版 Dashboard Activity,已接入排行榜和成就的游戏无需新增代码就能出现在玩家好友的信息流里。


核心内容

很多游戏已经有排行榜和成就。问题是,这些事件常常只停留在游戏内部。玩家拿到新成就,好友不一定知道;玩家冲到排行榜前列,也很难变成一次回流机会。

Game Center 2022 的改动从这个痛点切入。新版 Dashboard 加入 Activity,把好友在你的游戏里发生的事件放到同一个信息流里。事件包括新成就、排行榜名次大幅上升、好友之间分数被超过等。

更关键的是,已经使用 Game Center 排行榜和成就的游戏不需要为 Activity 额外写代码。系统会把这些事件自动展示到 Dashboard 和好友资料页里。好友超过玩家分数时,Game Center 还会发送通知,游戏本身不需要向用户请求推送权限。

这场 session 还给 Unity 开发者补上了同一条路径。Apple 发布了 GameKit 的 Unity plug-in,提供 C# API。Unity 项目可以认证本地玩家、显示 Access Point,并接入 Game Center 的社交分发能力。


详细内容

Activity:把游戏事件放进 Game Center Dashboard(02:42

新版 Dashboard 会显示玩家好友在你的游戏内和跨游戏的近期 Activity。演讲中列出的事件很具体:获得成就、排行榜大幅跃升、一个好友超过另一个玩家的最高分。

如果游戏已经配置了排行榜和成就,Activity 会自动出现。开发者需要做的第一步,是确认游戏启用了 Game Center,并在启动早期完成本地玩家认证。

// Authenticate the local player
import GameKit

class TitleScreenViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Authenticate the local player
        GKLocalPlayer.local.authenticateHandler = { viewController, error in
            if let viewController = viewController {
                // Present the view controller from Game Center.
                return
            }
        }
    }
}

关键点:

  • import GameKit 引入 Game Center 所需的 GameKit 框架。
  • TitleScreenViewController 把认证放在标题画面,对应演讲中“尽早放置,甚至可以在 title screen”的建议。
  • GKLocalPlayer.local.authenticateHandler 注册认证回调,系统会在需要时返回 Game Center 的登录界面。
  • if let viewController = viewController 判断系统是否要求展示认证界面。
  • return 之后应由你的界面层呈现这个 viewController,示例注释把这一点留给具体游戏实现。

Unity:用 C# 调用 GameKit(04:30

Unity 项目不需要放弃 Game Center。新的 GameKit Unity plug-in 提供完整的 C# API。演讲中的认证代码把本地玩家对象保存在游戏管理组件里。

// Authenticate the local player
using Apple.GameKit;

public class MyGameManager : MonoBehaviour
{
    private GKLocalPlayer _localPlayer;

    private async Task Start()
    {
        try
        {
            _localPlayer = await GKLocalPlayer.Authenticate();
        }
        catch (Exception exception)
        {
            // Handle exception...
        }
    }
}

关键点:

  • using Apple.GameKit; 使用 Unity plug-in 暴露的 GameKit 命名空间。
  • MyGameManager : MonoBehaviour 说明这段代码放在 Unity 组件里,由 Unity 生命周期驱动。
  • _localPlayer 保存认证后的 GKLocalPlayer,后续可以继续使用 GameKit 能力。
  • Start() 标记为 async Task,因为认证流程需要等待系统结果。
  • await GKLocalPlayer.Authenticate() 调用 plug-in 的静态认证方法,成功后返回本地玩家对象。
  • catch (Exception exception) 留出认证失败处理位置,例如网络错误或玩家取消登录。

Access Point:给玩家一个打开 Dashboard 的入口(05:25

认证完成后,玩家还需要一个自然的入口进入 Game Center Dashboard。Apple 推荐使用 Access Point。它是游戏内的系统入口,玩家点击后会打开 Dashboard,查看成就、排行榜和 Activity。

演讲建议在游戏菜单页显示 Access Point。不要把它放在会干扰操作的实时游玩画面里。

// Show the Access Point
import GameKit

class MenuScreenViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        GKAccessPoint.shared.location = .topLeading
        GKAccessPoint.shared.isActive = true
    }
}

关键点:

  • MenuScreenViewController 表示 Access Point 放在菜单页,而不是标题认证页或游玩中界面。
  • GKAccessPoint.shared.location = .topLeading 设置入口显示位置。
  • .topLeading 让入口出现在界面左上方,具体位置仍应结合游戏 UI 调整。
  • GKAccessPoint.shared.isActive = true 激活 Access Point,系统会在游戏内显示入口。

Unity 侧代码同样只需要设置位置并激活:

// Show the Access Point
GKAccessPoint.Shared.Location = 
    GKAcessPoint.GKAccessPointLocation.TopLeading;

GKAccessPoint.Shared.IsActive = true;

关键点:

  • GKAccessPoint.Shared 访问 Unity plug-in 暴露的共享 Access Point 实例。
  • Location 设置入口位置,与 Swift 示例中的 location 对应。
  • TopLeading 选择左上角位置。
  • IsActive = true 显示入口,玩家点击后由系统打开 Dashboard。

Leaderboards:排行榜事件会自动生成 Activity(06:24

排行榜是 Activity 的主要来源之一。玩家好友进入排行榜前 25%,或者好友超过了玩家的分数,都会出现在 Activity 中。

其中“好友超过你的分数”还会触发 Game Center 通知。演讲明确说明,这个通知由 Game Center 发送,游戏不需要处理用户是否允许游戏推送通知的问题。

这给排行榜设计提出了一个实用方向:不要只做一个永久榜。循环排行榜会按周或按月重置,给玩家一个持续回来的理由。

App Store Connect
└─ Game Center
   ├─ Leaderboards
   │  ├─ permanent leaderboard
   │  └─ recurring leaderboard
   └─ Achievements

关键点:

  • App Store Connect 是配置 Game Center 功能的位置,演讲在 03:56 提到需要在 app record 中启用 Game Center。
  • Leaderboards 用于配置排行榜,Activity 会根据好友排行榜事件展示动态。
  • permanent leaderboard 适合记录长期最高分。
  • recurring leaderboard 对应演讲中提到的循环排行榜,用时间窗口制造新的竞争时刻。
  • Achievements 与排行榜一起构成 Activity 的主要事件来源。

Achievements:成就会变成好友可见的进度(07:42

成就的作用不只是给玩家一个徽章。Game Center Activity 会把成就完成事件展示给好友。玩家完成游戏内所有成就时,系统还会生成一个庆祝性质的 Activity。

这让成就设计承担了新的职责。它可以记录进度,也可以提示玩家去探索隐藏内容。成就名称和描述如果写得清楚,就能把一次达成变成好友之间的回访线索。

Achievement design
├─ early achievement: teach the first meaningful action
├─ progress achievement: mark a chapter, level, or mode milestone
├─ skill achievement: reward a difficult challenge
└─ completion achievement: recognize finishing every achievement

关键点:

  • early achievement 适合低门槛事件,让新玩家尽早出现在 Activity 中。
  • progress achievement 对应玩家的游戏进度,好友看到后能理解玩家玩到了哪里。
  • skill achievement 奖励高难挑战,适合引发好友之间的比较。
  • completion achievement 对应演讲中的“完成所有成就”庆祝动态。

核心启发

  • 做什么:给游戏加入每周重置的好友排行榜。
    为什么值得做:Activity 会展示好友在排行榜上的表现,循环榜还能提供持续回流理由。
    怎么开始:在 App Store Connect 的 Game Center 区域配置 recurring leaderboard,再在游戏内提交分数。

  • 做什么:把新手教学拆成几个早期成就。
    为什么值得做:成就完成会出现在玩家和好友的 Activity 里,新玩家完成第一组动作时就能产生可见进度。
    怎么开始:挑选首次完成关卡、首次使用核心技能、首次击败敌人等节点,配置为 Game Center achievements。

  • 做什么:在菜单页显示 Game Center Access Point。
    为什么值得做:玩家可以从熟悉的位置打开 Dashboard,查看好友动态、成就和排行榜。
    怎么开始:在菜单页面设置 GKAccessPoint.shared.location,再把 GKAccessPoint.shared.isActive 设为 true

  • 做什么:为 Unity 游戏添加 Game Center 登录。
    为什么值得做:GameKit Unity plug-in 提供 C# API,Unity 项目也能进入 Game Center Activity 生态。
    怎么开始:安装 Apple Unity plug-in,在游戏管理组件里调用 GKLocalPlayer.Authenticate()


关联 Session

评论

GitHub Issues · utterances