iOS
本文旨在介绍如何设置 Game Center 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Game Center 渠道登录。
前提条件
1. 在 Apple Developer Center 上配置 iOS 应用
1. 创建 App ID
在 Apple Developer Center 上注册 Apple 开发者账号并创建应用程序。
在侧边栏中,点击 Certificates, IDs & Profiles。
在侧边栏中,点击 Identifiers,然后单击蓝色添加图标 (+)。
选择 App IDs,然后按照指南创建 App ID。
保存Bundle ID 以备后用。
2. 设置 iTunes Connect
登录 iTunes Connect。
根据在步骤1中获得的Bundle ID,创建 iTunes Connect App。
选择 Feature > Game Center,进入 Game Center 配置页面。
启用 Game Center 功能。
设置 Leaderboard 和 Achievement。
成就设置与排行榜设置类似。
排行榜
- 在 Game Center 配置页面的 "排行榜" 右侧,单击加号 (+) 创建新的排行榜。
- 根据需要输入详细信息。
点击每个字段输入框旁边的问号(?)图标,将给出详细解释。
- Sort Order:设置排行榜中的内容是按升序还是降序排序。
- Score Format Type:设置分数类型。
- 点击 Save 保存已配置的排行榜设置。
用户可根据需要添加多个排行榜。排行榜支持多种语言,每种语言都必须单独添加。成就设置与排行榜设置类似。
- 获取 Player Network 控制台登录账号。
- 为游戏创建新项目,或加入已有项目。
- 下载 SDK。
- 接入 SDK。
- 在 Player Network 控制台添加 Game Center 为业务的登录鉴权方式。
步骤1:为 Game Center 登录配置 SDK
在目标项目的 Signing & Capabilities 页面,Bundle Identifier 必须是在 App Store Connect 中已注册的 iOS App 应用。
否则,当用户登录 Game Center 时,会收到提示不支持 Game Center 的销误信息。在目标项目的 Signing & Capabilities 页面,添加 + Capability 添加Game Center
系统库依赖项 GameKit.framework
将自动添加到 Xcode 中的项目依赖项中。
步骤2:添加 Game Center 登录
在 iOS 10 之后的版本中,Game Center 将继续作为一项服务存在,但用户设备上将不再出现单独的 Game Center 应用程序。用户可以进入设置 > Game Center 登录并继续使用相关功能。
用户在游戏内登录 Game Center 主要有两种情况:
已经通过设置 > Game Center 登录:执行后台登录,并显示 Welcome back,xxxx 横幅。整个登录过程不会中断游戏。
未通过 设置 > Game Center 登录:游戏内会弹出 Game Center 登录框。如果用户取消登录三次,将无法访问游戏内的 Game Center 登录框,需要返回到设置 > Game Center 手动登录 Game Center。
注册登录相关回调。
- Unity
- Unreal Engine
// Add callbacks
public void AddAuthObserver()
{
INTLAPI.AddAuthResultObserver(OnAuthResultEvent);
}
// Remove callbacks
public void RemoveAuthObserver()
{
INTLAPI.RemoveAuthResultObserver(OnAuthResultEvent);
}
// Process the INTLAuthResult callback
public void OnAuthResultEvent(INTLAuthResult ret)
{
Debug.Log($"MethodID: {ret.MethodId}");
string methodTag = "";
if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_LOGIN)
{
methodTag = "Login";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_BIND)
{
methodTag = "Bind";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_AUTOLOGIN)
{
methodTag = "AutoLogin";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_QUERY_USER_INFO)
{
methodTag = "QueryUserInfo";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_GET_AUTH_RESULT)
{
methodTag = "GetAuthResult";
}
}C++ Event Handling (above v1.15)
//configure callback
FINTLAuthEvent authEvent;
authEvent.AddUObject(this, &OnAuthResult_Implementation);
UINTLSDKAPI::SetAuthResultObserver(authEvent);
// Remove callbacks
UINTLSDKAPI::GetAuthResultObserver().Clear();void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
}Unreal Event Handling
void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
}调用
AutoLogin
接口自动登录。- Unity
- Unreal Engine
INTLAPI.AutoLogin();
UINTLSDKAPI::AutoLogin();
在自动登录失败时调用
Login
接口使玩家手动登录。- Unity
- Unreal Engine
INTLAPI.Login(INTLChannel.GameCenter);
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelGameCenter);
与游戏后台同步客户端身份验证状态,等待最终验证结果。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。