Skip to main content

iOS

本文旨在介绍如何设置 Game Center 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Game Center 渠道登录。

前提条件​

1. 在 Apple Developer 上配置 iOS 应用
1. 创建 App ID
  1. 在 Apple 开发者平台 上注册并登录 Apple 开发者账号。

  2. 在顶部导航栏中点击 Account,并选择 Certificates, IDs & Profiles 下的 Identifiers。

    图片:Apple Account

  3. 点击蓝色添加图标(+)。

    图片:Apple 标识符

  4. 选择 App IDs 后,点击 Continue。

    图片:Apple App ID

  5. 选择 App 后,点击Continue。

    图片:Apple App ID

  6. 输入 Description 和 Bundle ID。

    • Description:游戏应用的名称或描述。
    • Bundle ID:游戏应用的唯一标识符,包含在 App ID 中。

    图片:Apple bundle description

  7. 在 Capabilities 下选择 Sign in with Apple 后,点击 Continue。

  8. 点击 Register 创建 App ID。

2. 设置 App Store Connect
  1. 登录 App Store Connect。

  2. 选择 App。

    图片:GameCenter ChooseApp

  3. 点击App(+),选择添加 App。

    图片:GameCenter AddApp

  4. 根据在步骤1中获得的 Bundle ID,创建 App Store Connect App。

    图片:GameCenter iTunes Connect 1

  5. 选择 Feature > Game Center,进入 Game Center 配置页面。

  6. 启用 Game Center 功能。

更多信息,可参见:https://developer.apple.com/help/app-store-connect/

排行榜
  1. 在左侧导航栏选择 Game Center ,在右侧选择 Add leaderboards 创建新的排行榜或者 Add an achievement 添加成就设置。

图片:GameCenter iTunes Connect

  1. 根据需要输入详细信息。
info

点击每个字段输入框旁边的问号(?)图标,将给出详细解释。

  1. 点击 Storage 保存已配置的排行榜。

图片:GameCenter Leaderboard

info

用户可根据需要添加多个排行榜。排行榜支持多种语言,每种语言都必须单独添加。成就设置与排行榜设置类似。

  1. 获取 Player Network 控制台登录账号。
  2. 为游戏创建新项目,或加入已有项目。
  3. 下载 SDK。
  4. 接入 SDK。
  5. 在 Player Network 控制台添加 Game Center 为业务的登录鉴权方式。

步骤1:为 Game Center 登录配置 SDK​

  1. 在目标项目的 Signing & Capabilities 页面,Bundle Identifier 必须是在 App Store Connect 中已注册的 iOS App 应用。
    否则,当用户登录 Game Center 时,会收到提示不支持 Game Center 的错误信息。

  2. 在目标项目的 Signing & Capabilities 页面,添加 + Capability 添加 Game Center。

info

系统库依赖项 GameKit.framework 将自动添加到 Xcode 中的项目依赖项中。

图片:Game Center Xcode

步骤2:添加 Game Center 登录​

在 iOS 10 之后的版本中,Game Center 将继续作为一项服务存在,但用户设备上将不再出现单独的 Game Center 应用程序。用户可以进入 设置 > Game Center 登录并继续使用相关功能。

用户在游戏内登录 Game Center 主要有两种情况:

  • 已经通过 设置 > Game Center 登录:执行后台登录,并显示 Welcome back, xxxx 横幅。整个登录过程不会中断游戏。

    图片:Game Center login 1

  • 未通过 设置 > Game Center 登录:游戏内会弹出 Game Center 登录框。如果用户取消登录三次,将无法访问游戏内的 Game Center 登录框,需要返回到 设置 > Game Center 手动登录 Game Center。

    图片:Game Center login 2

  1. 注册登录相关回调。
// Add callbacks
public void AddAuthObserver()
{
INTLAPI.AddAuthResultObserver(OnAuthResultEvent);
}

// Remove callbacks
public void RemoveAuthObserver()
{
INTLAPI.RemoveAuthResultObserver(OnAuthResultEvent);
}

// Process the INTLAuthResult callback
public void OnAuthResultEvent(INTLAuthResult AuthResult)
{
Debug.Log($"MethodID: {AuthResult.MethodId}");

string methodTag = "";
switch (AuthResult.MethodId)
{
case (int)INTLMethodID.INTL_AUTH_LOGIN:
methodTag = "Login";
break;
case (int)INTLMethodID.INTL_AUTH_BIND:
methodTag = "Bind";
break;
case (int)INTLMethodID.INTL_AUTH_AUTOLOGIN:
methodTag = "AutoLogin";
break;
case (int)INTLMethodID.INTL_AUTH_QUERY_USER_INFO:
methodTag = "QueryUserInfo";
break;
case (int)INTLMethodID.INTL_AUTH_GET_AUTH_RESULT:
methodTag = "GetAuthResult";
break;
}
}
  1. 调用 AutoLogin 接口自动登录。
INTLAPI.AutoLogin();
  1. 在自动登录失败时调用 Login 接口使玩家手动登录。
INTLAPI.Login(INTLChannel.GameCenter);
  1. 与游戏后台同步客户端身份验证状态,等待最终验证结果。

步骤3:验收登录功能​

在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。

如果接入过程中遇到问题,请参见 常见问题。

玩家限制​

在成功登录 Game Center 后,GKLocalPlayer 对象会提供限制状态信息,游戏可以根据这些信息对功能进行限制:

  • isUnderage:判断玩家是否为未成年人。
  • isMultiplayerGamingRestricted:判断玩家是否可以加入多人游戏。
  • isPersonalizedCommunicationRestricted:判断玩家是否可以在设备上使用个性化通信功能。

Game Center 成就系统​

Player Network SDK 提供了成就模块,在 iOS 上集成了 Game Center 成就功能。游戏可以通过此模块解锁成就、增加进度以及展示原生成就界面。

关于 Game Center 成就的设计与运营,可参见苹果官方文档。

前提条件​

  1. 已完成本文 前提条件 中的 Game Center 配置,并在 App Store Connect 的 Game Center 中配置好成就。
  2. 调用成就接口前,玩家需已登录 Game Center,否则接口会通过回调返回 NEED_LOGIN 错误。
    • 玩家可通过 Game Center 渠道直接登录;若游戏以其他渠道作为主登录方式,可开启 GAMECENTER_ENABLE_GC 配置(默认关闭),SDK 会在主渠道登录成功后自动完成 Game Center 授权。

注册成就回调​

注册回调以接收成就操作结果。

// 添加成就回调
INTLAPI.AddAchievementResultObserver(OnAchievementResult);

// 移除成就回调
INTLAPI.RemoveAchievementResultObserver(OnAchievementResult);

// 处理成就结果
public void OnAchievementResult(INTLAchievementResult ret)
{
Debug.Log($"Achievement MethodID: {ret.MethodId}, RetCode: {ret.RetCode}, Platform: {ret.Platform}");
}

解锁成就​

通过成就 ID 解锁一个标准成就。

INTLAPI.UnlockAchievement("GameCenter", "achievement_id_here");

增加成就进度​

对于增量成就,按指定值增加进度。

note

progress 为百分比增量(0–100),累加到当前进度上并以 100% 封顶。例如进度 30% 时传入 20,更新为 50%。

// 将成就进度增加 20%
INTLAPI.IncrementAchievement("GameCenter", "achievement_id_here", 20);

展示成就界面​

展示 Game Center 原生成就界面。玩家关闭界面后会通过回调返回结果。

INTLAPI.ShowAchievementsUI("GameCenter");

Game Center 排行榜​

Player Network SDK 提供了排行榜模块,在 iOS 上集成了 Game Center 排行榜功能。游戏可以通过此模块提交分数以及展示原生排行榜界面。

关于 Game Center 排行榜的设计与运营,可参见苹果官方文档。

note

在 iOS 上,SubmitScore 与 ShowLeaderboardUI 依赖 GKLeaderboard 新接口,要求 iOS 14.0 及以上。在低于 iOS 14 的设备上调用,接口会通过回调返回 NOT_SUPPORT 错误。

前提条件​

  1. 已完成本文 前提条件 中的 Game Center 配置,并在 App Store Connect 的 Game Center 中创建好排行榜,记录排行榜 ID(Leaderboard ID)。
  2. 调用排行榜接口前,玩家需已登录 Game Center(同 成就前提条件),否则接口会通过回调返回 NEED_LOGIN 错误。

注册排行榜回调​

注册回调以接收排行榜操作结果。

// 添加排行榜回调
INTLAPI.AddLeaderboardResultObserver(OnLeaderboardResult);

// 移除排行榜回调
INTLAPI.RemoveLeaderboardResultObserver(OnLeaderboardResult);

// 处理排行榜结果
public void OnLeaderboardResult(INTLLeaderboardResult ret)
{
Debug.Log($"Leaderboard MethodID: {ret.MethodId}, RetCode: {ret.RetCode}, Platform: {ret.Platform}");
}

提交分数​

向指定排行榜提交一个分数。

INTLAPI.SubmitScore("GameCenter", "leaderboard_id_here", 1000);

展示排行榜界面​

展示 Game Center 原生排行榜界面。玩家关闭界面后会通过回调返回结果。

note

leaderboardId 传入具体的排行榜 ID 时,仅展示该排行榜;传入空字符串("")时,展示全部排行榜列表。

// 展示指定排行榜
INTLAPI.ShowLeaderboardUI("GameCenter", "leaderboard_id_here");

// 展示全部排行榜
INTLAPI.ShowLeaderboardUI("GameCenter", "");