Google Play 游戏服务 C++ SDK 提供了一个 C++ API,可用于 Google Play 游戏服务,旨在面向已经拥有游戏 C++ 实现的开发者。
目前,SDK 实现以下服务:
- 授权
- 成就
- 排行榜
- 事件
- 已保存的游戏
- 附近连接(仅限 Android)
- 玩家数据
概念
高级别上,您可以按照以下步骤使用 SDK:
- 为 Android 设置平台配置。
- 使用
GameServices::Builder
配置和构建GameServices
对象。GameServices
对象会自动尝试登录,并通过OnAuthActionFinished()
回调返回结果。请注意回调返回的结果。如果自动登录尝试失败,您可以显示一个按钮让用户登录。 收到
OnAuthActionFinished()
结果后,您可以使用GameServices
对象及其子管理器来进行 Play 游戏服务调用,包括:- 登录(授权失败后):
StartAuthorizationUI()
- 解锁成就:
Achievements().Unlock()
- 使用内置 UI 显示成就:
Achievements().ShowAllUI()
- 提交高分:
Leaderboards().SubmitScore()
- 退出登录:
SignOut()
- 登录(授权失败后):
完成
GameServices
对象的用后,请重置或销毁它。
更详细的级别:
初始化平台配置:这是一个包含平台特定初始化信息的對象。在 Android 上,平台配置包含 Java VM 和指向当前
Activity
的指针。// In android_main(), create a platform configuration // and bind the object activity. // Alternately, attach the activity in JNI_Onload(). gpg::AndroidPlatformConfiguration platform_configuration; platform_configuration.SetActivity(state->activity->clazz);
构建
GameServices
对象:此对象是 Google Play 游戏服务功能的主要入口点。GameServices
实例是使用GameServices::Builder
创建的。在大多数实现中,给定的
GameServices
对象会在您的 C 环境持续存在的时间内持续存在;当您的 AndroidActivity
暂停和恢复时,您无需重新初始化它。// Creates a GameServices object that has lambda callbacks. game_services_ = gpg::GameServices::Builder() .SetDefaultOnLog(gpg::LogLevel::VERBOSE) .SetOnAuthActionStarted([started_callback](gpg::AuthOperation op) { is_auth_in_progress_ = true; started_callback(op); }) .SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op, gpg::AuthStatus status) { LOGI("Sign in finished with a result of %d", status); is_auth_in_progress_ = false; finished_callback(op, status); }) .Create(pc);
使用管理器类来管理您的
GameServices
对象。管理器可从GameServices
实例访问,并将相关功能组合在一起。示例包括成就和排行榜管理器。它们本身不包含对用户可见的状态。管理器通过引用返回,包含的GameServices
实例控制其生命周期。您的客户端不应保留管理器引用。相反,您的客户端应保留GameServices
实例。管理器通过不可变值类型对象返回数据。这些值反映了查询时底层数据的统一视图。
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();
完成
GameServices
对象的用后,通过调用拥有它的unique_ptr
上的reset()
进行清理,或者在超出范围时让unique_ptr
自动销毁它。
线程模型
除非另有说明,否则所有GameServices
和管理器方法都具有线程安全、异步的实现。它们可以在任何线程上调用,无需外部锁定,并且将按照其调用顺序执行。
访问器方法(读取状态的那些方法)有两种主要变体。第一种方法(名称类似于FetchProperty()
)异步地向提供的回调提供其结果;第二种(名称类似于FetchPropertyBlocking()
)同步地将结果返回到调用线程。
// Blocking callback
gpg::AchievementManager::FetchAllResponse fetchResponse =
game_services_->Achievements().FetchAllBlocking(std::chrono::milliseconds(1000));
// Non-blocking callback
game_services_->Achievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,
[] (gpg::AchievementManager::FetchAllResponse response) {
LogI("Achievement response status: %d", response.status);});
所有用户回调都在专用回调线程上调用。此线程可能与任何平台概念的“主线程”或“UI 线程”不同。您还应尝试确保用户回调快速执行;阻塞的回调线程可能会导致用户可见的问题(例如,退出登录请求完成延迟)。
平台特定信息
要开始在 Android 上使用 Play 游戏 C++ SDK,请继续阅读快速入门指南。
进一步阅读
请务必阅读 Google Play 游戏服务 C++ SDK 中提供的类文档以了解更多详细信息,并查看示例,这些示例演示了如何使用 SDK。
如果您的游戏使用后端服务器,请参阅启用对 Google Play 游戏服务的服务器端访问。