iOS
警告
从 2024 年春季开始,对于需更新或上传至 Apple App Store Connect 的应用,开发者需明确 注明使用原因,以展示该应用如何使用 required reason API(需提交使用原因的 API)。更多信息,请参见 即将发布的第三方 SDK 要求。
由于 DMM 的隐私清单尚未公布,目前 Player Network SDK 隐私清单中不包含对应的内容,详见 iOS 17 隐私清单。
本文旨在介绍如何设置 DMM 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 DMM 渠道登录。
前提条件
1. 设置 DMM 应用
请联系 DMM 技术支持部门,获取具有相关权限和应用程序参数的开发人员账号。
所需应用程序参数:
- 应用程序 ID
- 密匙
- 用户密钥
- 消费者密钥
- 验证客户端 ID
- 验证客户端密钥
步骤1:为 DMM 登录配置 SDK
警告
DMM SDK 仅与 iOS SDK 11 及以上版本兼容。
说明
Unreal Engine 应首先在 Plugins/INTLSDK/Source/INTLCore/INTLCore.Build.cs
文件中找到捆绑资源路径:
AdditionalBundleResources.Add(new BundleResource(Path.Combine(ModuleDirectory, "Libs/iOS/INTLCore/INTLSDK.bundle"), bShouldLog: false));
打开项目的 INTLConfig.ini 文件:
[DMM Channel Configuration]
DMM_DEVELOP_MODE = {INTL_DMM_DEVELOP_MODE}
DMM_APP_ID = {INTL_DMM_APP_ID}
DMM_CONSUMER_KEY = {INTL_DMM_CONSUMER_KEY}
DMM_CONSUMER_SECRET = {INTL_DMM_CONSUMER_SECRET}
DMM_AUTHENTICATION_CLIENT_ID = NONE
DMM_AUTHENTICATION_CLIENT_SECRET = NONE
DMM_GET_VALIDATE_CODE_PATH = /v2/auth/get_dmm_verify_code
DMM_REDIRECT_URL = {INTL_DMM_REDIRECT_URL}
DMM_SECRET_KEY = NONE
- 将
{INTL_DMM_DEVELOP_MODE}
替换为 sandbox 和 production。Sandbox 是调试环境,production 是正式环境。 - 将
{INTL_DMM_APP_ID}
替换为游戏的 DMM 应用程序 ID。 - 将
{INTL_DMM_CONSUMER_KEY}
替换为游戏的 DMM 消费者密钥。 - 将
{INTL_DMM_CONSUMER_SECRET}
替换为游戏的 DMM 消费者密钥。 - {INTL_DMM_REDIRECT_URL}`值的设置规则如下:
- 删除软件包名称中的所有句点。例如,软件包名称
com.INTL.game
变为字符串comINTLgame
。 - 将上述规则得到的字符串从大写改为小写。例如,在上例中,字符串变为
comintlgame
。 - 然后在最后添加
://auth
,例如,comintlgame://auth
。
- 删除软件包名称中的所有句点。例如,软件包名称
步骤2:添加 DMM 登录
注册登录相关回调。
- 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.DMM);
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelDMM);
与游戏后台同步客户端身份验证状态,等待最终验证结果。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。