Android
本文旨在介绍如何设置微信身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过微信渠道登录。
前提条件
1. 在微信开放平台上设置您的游戏
1. 创建微信应用
在 微信开放平台 上注册账号,并根据提示在 管理中心 创建手机应用。
2. 获取应用程序信息
登录 微信开放平台。
在顶部导航栏,点击 管理中心。
在 移动应用 选项卡中,点击相应应用的 操作 栏中的 查看。
在应用程序详细信息页面,检查 AppID 和 AppSecret。
3. 申请业务权限以获得 AppName
配置单个 WeChat 渠道时,AppName 为选填信息。如果计划添加多个 WeChat 渠道,AppName 为必填,需完成以下申请流程获得 AppName:
申请需要腾讯内部权限,如您的团队中没有腾讯内部同学可联系 Player Network 接口人协助申请。
登录 微信开放平台内部接口管理系统。
参照 申请指引 填写申请表,确保信息准确无误。
提交申请并耐心等待审核通过。
审核通过后,请将申请表中的 业务名称 准确无误地填写到 Player Network 控制台的 AppName 字段中,以完成配置。
步骤1:为微信登录配置 SDK
打开项目的 INTLConfig.ini 文件:
INTLConfig.ini[INTL environment]
# WARNING: You should change this URL to the production environment when you release your game.
INTL_URL = https://test.intlgame.com
GAME_ID = {INTL_GAME_ID}
SDK_KEY = {INTL_SDK_KEY}
[INTL Log]
LOG_LEVEL = 1
LOG_CONSOLE_OUTPUT_ENABLE = 1
LOG_FILE_OUTPUT_ENABLE = 1
LOG_ENCRYPT_ENABLE = 0
LOG_COMPRESS_ENABLE = 0
[Android LifeCycle]
LIFECYCLE = WeChat
[WeChat]
WECHAT_APP_ID = {INTL_WECHAT_APP_ID}- 将 SDK 后端环境设置为
INTL_URL = https://test.intlgame.com
。 - 将
{INTL_GAME_ID}
和{INTL_SDK_KEY}
替换为 Player Network 控制台 分配的GAME_ID
和SDK_KEY
的值。 - 设置
LOG_LEVEL = 1
、LOG_CONSOLE_OUTPUT_ENABLE = 1
、LOG_FILE_OUTPUT_ENABLE = 1
、LOG_ENCRYPT_ENABLE = 0
和LOG_COMPRESS_ENABLE = 0
,以便在不加密或压缩输出的情况下输出控制台日志和日志文件。 - 在
LIFECYCLE
中添加 WeChat。有关更多信息,请参见 SDK 环境。 - 将
{INTL_WECHAT_APP_ID}
替换为微信分配的 AppID。
- 将 SDK 后端环境设置为
步骤2:添加微信登录
在调用 INTLAPI.Login
的时候传入权限。微信 iOS/Android 已知的权限列表如下(官方文档没有明确的权限说明):
权限 | 说明 |
---|---|
snsapi_userinfo | 获取用户信息(Player Network SDK 的默认权限) |
snsapi_friend | 获取好友列表 |
snsapi_message | 发送消息 |
注册登录相关回调。
- 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.WeChat, "", "");
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelWeChat, "", "");
与游戏后台同步客户端身份验证状态,等待最终验证结果。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。