Skip to main content

Android

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

前提条件​

1. 在 QQ Connect 平台上设置游戏
1. 创建 QQ 应用
  1. 登录 QQ Connect。

  2. 点击 创建应用。

    图片:创建应用

  3. 填写 应用信息。

    图片:资料填写

  4. 在 完善信息 下,输入 Android 应用程序信息。

    • Android 包名: 与 com.intlgame.demo 相似
    • Android 签名: 删除 MD5 签名中的冒号 (:) 并将所有字母改为小写。例如,对于 MD5=A1:B2...,输入 a1b2...。
note

Android 签名需要使用 QQ 提供的 AppManage 工具获取,实际填入的是签名文件的 MD5 值。
更多信息请参见 Android 常见问题。

QQ Connect 管理端 Android 配置多个包名和签名时,可通过新增一组配置添加。

图片:Mobile App Information

2. 获取应用程序信息
  1. 登录 QQ Connect。

  2. 点击 全部应用。

  3. 在相应应用程序的 操作 栏中点击 查看。

    图片:Edit Apps

  4. 在应用页面,确认 QQ 应用程序的 AppID 和 AppKey。

    图片:App Information

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

步骤1:为 QQ 登录配置 SDK​

  1. 打开项目的 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 = QQ
    [QQ]
    QQ_APP_ID = {INTL_QQ_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 中添加 QQ。有关更多信息,请参见 SDK 环境。
    • 将 {INTL_QQ_APP_ID} 替换为 QQ 分配的 AppID。
  2. 在 gradle 文件中定义 manifestPlaceholders,将 {INTL_QQ_APP_ID} 替换为 QQ AppID。

mainTemplate.gradle
android {
defaultConfig {
manifestPlaceholders = ["QQ_APPID":"{INTL_QQ_APP_ID}"]
}
}

步骤2:添加 QQ 登录​

在调用 INTLAPI.Login 的时候传入权限。建议传入 "all",表示具备已申请的平台侧所有权限。当未传入任何权限时,Android 默认使用 get_simple_userinfo 权限。

权限说明
get_simple_userinfoQQ 登录权限(移动端获取 QQ 用户信息)
  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.QQ, "all", "");
  1. 与游戏后台同步客户端身份验证状态,等待最终验证结果。

扫码登录​

Player Network SDK V1.26.00 开始支持 Android 和 iOS 平台的 QQ 扫码登录。

默认情况下手机如果安装了 QQ app,会直接拉起 QQ app 进行登录,如果手机未安装 QQ app,则自动切换为扫码登录。如需修改默认行为,可以在 extraJson 中指定 qrcode_mode 参数:

qrcode_mode说明
auto自动模式(默认):
优先使用 QQ app 登录,未安装 QQ app 时则使用扫码登录
force_app强制 QQ app 登录:
未安装 QQ app 时登录会报错
force_qrcode强制扫码登录:
无论是否安装 QQ app,都会使用扫码进行登录
string permissions = "";
string extraJson = "{\"qrcode_mode\" : \"force_qrcode\"}";
INTLAPI.Login(INTLChannel.QQ, permissions, extraJson);

步骤3:验收登录功能​

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

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