跳到主要内容

Android

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

前提条件

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

  2. 在侧边栏中,点击 应用管理

  3. 点击 创建应用

    图片:创建应用

  4. 移动应用信息 下,输入 Android 应用程序信息。

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

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

    QQ Connect 管理端 Android 配置多个包名和签名时中间用英文分号(;)隔开来配置即可。

    图片:Mobile App Information

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

  2. 在侧边栏中,点击 应用管理

  3. 在相应应用程序的 操作 栏中点击 编辑

    图片:Edit Apps

  4. 在应用编辑页面,确认 QQ 应用程序的 AppIDAppKey

    图片:App Information

3. 申请 QQ Connect OpenAPI 能力 is_login 权限

如果申请未通过,即使 QQ app 授权登录成功,Player Network SDK 后台将返回错误 app has no privilege to use this api
请根据以下模板发送电子邮件申请权限:

  • Tocollinxu@tencent.com; ricesong@tencent.com
  • Ccchuanhe@tencent.com; vissong@tencent.com; gavinyao@tencent.com; maytang@tencent.com; ricesong@tencent.com; (业务产品领导); (技术领导); (业务相关同学)
  • Subject:【QQ Connect 申请能力】is_login 接口 —— XXX 业务
  • 邮件内容
    - QQ Connect appid:
    - 应用名称:
    - 公司名:(如公司不是腾讯或全资子公司的话,需要附上发行和研发的关系授权书)
    - 调用入口/场景:(如必要可附上交互)
    - 调用时机:
    - 调用原因:
    - accesstoken/openkey 获取方式:
    - 调用量(单位:分钟):
    - 负责人:(产品负责人的企微名;开发负责人的企微名)

更多信息,请参见 is_login

  1. 获取 Player Network 控制台登录账号
  2. 为游戏创建新项目,或加入已有项目
  3. 下载 SDK
  4. 接入 SDK
  5. 在 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_IDSDK_KEY 的值。
    • 设置 LOG_LEVEL = 1LOG_CONSOLE_OUTPUT_ENABLE = 1LOG_FILE_OUTPUT_ENABLE = 1LOG_ENCRYPT_ENABLE = 0LOG_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}"]
    }
    }
  3. 按照以下代码在 AndroidManifest.xml 文件中声明权限和活动。

    AndroidManifest.xml
    <manifest ... >
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    ...
    <application ... >
    <activity android:name="com.example.myapp.MainActivity" ... >
    ...
    </activity>
    ...
    <activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="behind"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

    <activity
    android:name="com.tencent.tauth.AuthActivity"
    android:launchMode="singleTask"
    android:noHistory="true" >
    <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="tencent{INTL_QQ_APP_ID}" />
    </intent-filter>
    </activity>
    ...
    </application>
    ...
    </manifest>

    {INTL_QQ_APP_ID} 替换为 QQ 分配的 AppID。

步骤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 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";
    }
    }
  2. 调用 AutoLogin 接口自动登录。

    INTLAPI.AutoLogin();
  3. 在自动登录失败时调用 Login 接口使玩家手动登录。

    INTLAPI.Login(INTLChannel.QQ, "all", "");
  4. 与游戏后台同步客户端身份验证状态,等待最终验证结果。

步骤3:验收登录功能

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

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