Android
本文旨在介绍如何设置 DMM 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 DMM 渠道登录。
前提条件
1. 设置 DMM 应用
请联系 DMM 技术支持部门,获取具有相关权限和应用程序参数的开发人员账号。
所需应用程序参数:
- 应用程序 ID
- 密匙
- 用户密钥
- 消费者密钥
- 验证客户端 ID
- 验证客户端密钥
步骤1:为 DMM 登录配置 SDK
警告
由于 DMM SDK 仅与 minSdkVersion >=23 或更高版本兼容,因此在 Android 6.0 或更早版本上运行时可能会出现问题。为游戏设置 minSdkVersion >= 23。
打开项目的 INTLConfig.ini 文件:
[Android LifeCycle]
LIFECYCLE=DMM
[DMM]
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
- 将 DMM 添加到
LIFECYCLE
。有关更多信息,请参见 SDK 环境。 - 将
{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
。
- 删除软件包名称中的所有句点。例如,软件包名称
- 完成 Gradle 配置。
- Unity
- Unreal Engine
在 mainTemplate.gradle
中,添加 DMM_LOGIN_ACTIVITY_DATA_SCHEME
。
android {
defaultConfig {
manifestPlaceholders = [
"DMM_LOGIN_ACTIVITY_DATA_SCHEME":"{INTL_DMM_LOGIN_ACTIVITY_DATA_SCHEME}"
]
}
}
在 INTLCore_UPL.xml
中,添加 DMM_LOGIN_ACTIVITY_DATA_SCHEME
。
<buildGradleAdditions>
<insert>
<![CDATA[
android{
defaultConfig {
manifestPlaceholders = [
"DMM_LOGIN_ACTIVITY_DATA_SCHEME":"{INTL_DMM_LOGIN_ACTIVITY_DATA_SCHEME}"
]
}
}
]]>
</insert>
</buildGradleAdditions>
{INTL_DMM_LOGIN_ACTIVITY_DATA_SCHEME}
值的设置规则如下:
- 删除软件包名称中的所有句点。例如,软件包名称
com.INTL.game
变为字符串comINTLgame
。 - 将上述规则得到的字符串从大写改为小写。例如,在上例中,字符串变为
comintlgame
。
步骤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 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。