手Q和微信登录接入

目录


1. 概述

(1)接入YSDK手Q/微信模块后,当用户触发登录后,会拉起手Q/微信客户端授权,授权通过后应用开发者可以通过设置的全局的UserListener的onLoginNotify通知里到openID、accessToken、payToken和pf等登录信息。
(2)为了保证提供给游戏的票据的有效性,YSDK会在三种情况下——每次游戏启动、后台运行一分钟以上切换回前台以及在前台运行30分钟以上——触发自动验证票据有效性的逻辑,并通过UserListener的loginNotify回调将验证结果返回给应用开发者。游戏接入时,应用开发者不需要关心票据的刷新逻辑,只需要在收到相应的回调时按照错误码推荐的处理方式来处理即可。
(3)对于需要使用手Q和微信登录功能的游戏,需要接入实名认证和防沉迷系统,并在游戏内进行相应配置。防沉迷模块的接入详见防沉迷接入

2. 接入指引

(1)接入前提:
(2)YSDK模块的标准接入,详见YSDK标准接入
(3)游戏已经申请到微信和手Q的appid,怎么查看游戏的appid
(4)游戏已经开通YSDK对应环境的权限,怎么开通游戏YSDK环境的权限

2.1 接入步骤

置全局监听游戏开发者需要调用setUserListener、setBuglyListener方法,实现全局监听,如果没有设置回调会导致游戏无法接收到YSDK的各种回调通知,从而导致无法登录等问题
接口说明

/**
 * 设置用户登录相关回调
 */
void setUserListener(YSDKUserListener* pListener);

java回调

YSDKApi.setUserListener(new YSDKUserListener());

样例
shouQheweixindenglujieru_01.png

2.1.1 手Q接入步骤

(1)修改manifest
注意,需要将scheme里配置修改为游戏申请的手q的appId

<!-- TODO GAME SDK QQ接入配置 START -->
<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="tencent1104936059" />
        <!-- TODO GAME 这里为游戏QQ登录的配置,游戏需要修改为自己手Q的appid -->
    </intent-filter>
</activity>
<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:configChanges="orientation|screenSize|keyboardHidden"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- TODO GAME SDK QQ接入配置 END -->

shouQheweixindenglujieru_02.png

(2) 将游戏申请到的qqAppId填入到项目assets目录下的ysdkconf.ini文件中,如果不填写,将无法使用qq登录功能
shouQheweixindenglujieru_03.png

(3) 如果需要接入防沉迷功能,需要将ysdkconf.ini中的防沉迷开关打开。更多防沉迷功能的介绍和使用,详见防沉迷接入 shouQheweixindenglujieru_04.png

(4) 手Q添加协作者账号如果游戏没有上线,需要添加协作者账号,协作者账号的添加方法如下:
进入游戏在open平台的注册界面,点击下图中的QQ登录
shouQheweixindenglujieru_05.png

(5) 在跳转后的界面里选择应用调试者,并输入调试者QQ号,注意,添加的调试者必须与开发账号是好友关系,点击保存
shouQheweixindenglujieru_06.png

2.1.2 微信接入步骤

(1) 修改AndroidManifest
(2) 注意,需要将scheme里配置修改为游戏申请的微信的appId

<!-- TODO GAME SDK 微信接入配置 START -->
        <activity
            android:name="com.tencent.tmgp.yybtestsdk.wxapi.WXEntryActivity"
            android:configChanges="orientation|screenSize|keyboardHidden"
            android:excludeFromRecents="true"
            android:exported="true"
            android:label="WXEntryActivity"
            android:launchMode="singleTop"
            android:taskAffinity="com.tencent.tmgp.yybtestsdk.diff"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <!-- TODO GAME 这里为游戏微信登录的配置,游戏需要修改为自己的包名加.diff -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="wxfcefed3f366fa606" />
                <!-- TODO GAME 这里为游戏微信登录的配置,游戏需要修改为自己的微信appid -->
            </intent-filter>
        </activity>
        <!-- TODO GAME 1.4.1之后版本支持微信扫码登录,低于此版本升级的YSDK务必增加此处Activity用于二维码展示 -->
        <activity android:name="com.tencent.ysdk.module.user.impl.wx.qrcode.QRActivity">

shouQheweixindenglujieru_07.png

(3) 将游戏申请到的wxAppId填入到项目assets目录下的ysdkconf.ini文件中,如果不填写,将无法使用qq登录功能
shouQheweixindenglujieru_08.png

(4) 如果需要接入防沉迷功能,需要将ysdkconf.ini中的防沉迷开关打开。更多防沉迷功能的介绍和使用,防沉迷接入 shouQheweixindenglujieru_09.png

3. 常用Api接口

3.1 登录
接口声明

/**
   * 用户登录
   * @param platform 登录平台
   */
   void login(ePlatform platform);

接口调用

YSDKApi.login(ePlatform.QQ);

样例
shouQheweixindenglujieru_10.png
更多细节,请查看demo代码。

3.2 获取登录信息
接口声明

 
/**
     * 获取用户登录的基本信息
     * @param userLoginRet 用户登录信息
     * @return 登录的平台
     */
     int getLoginRecord(UserLoginRet& userLoginRet);

UserLoginRet的字段含义:

类型 含义
platform ePlatform枚举 登录的平台类型
openId 字符串 用户授权后平台返回的唯一标示
nick_name 字符串 返回用户在登录平台对应的用户昵称
accessToken 字符串 用户授权票据,使用分享/支付等功能时,需要此票据;另外,手Q的token有效时间为90天,微信的token的有效时间为2小时
flag eFlag枚举 当flag为0时,表示登录信息可用;当flag不为1时,表示登录失败,请根据flag的值进行相应操作
errorCode eFlag枚举 当flag不为0时,flag的值即为errorCode
payToken 字符串 支付票据,此票据用于手Q支付,手Q授权会返回此票据。微信授权不会返回此票据。有效时间为6天
pf 字符串 支付需要使用到的字段,用于数据分析使用,pf的组成为:唤起平台-账号体系-注册渠道-操作系统-安装渠道-账号体系-appid-openid。例如:desktop_m_qq-73213123-android-73213123-qq-100703379-A65A1614A2F930A0CD4C2FB2C4C5DBE1
pf_key 字符串 支付时使用
refreshToken 字符串 微信平台特有票据,有效期为30天,用于微信accessToken过期之后刷新accessToken

接口调用

UserLoginRet ret = new UserLoginRet();
int platform = YSDKApi.getLoginRecord(ret);
String accessToken = ret.getAccessToken();
String payToken = ret.getPayToken();
String openid = ret.open_id;
int flag = ret.flag;
String msg = ret.msg;
String pf = ret.pf;
String pf_key = ret.pf_key;

样例
shouQheweixindenglujieru_11.png

3.3 用户注销
接口声明

/**
 * 用户注销
 */
void logout();

接口调用

YSDKApi.logout();

样例
shouQheweixindenglujieru_12.png

3.4 获取用户信息
接口声明

/**
 * 查询个人信息
 */
void queryUserInfo(ePlatform platform, UserRelationListener listener);

·接口调用

YSDKApi.queryUserInfo(ePlatform.QQ, new UserRelationListener() {
            @Override
            public void OnRelationNotify(UserRelationRet ret) {
                Logger.d(ret.toString());
            }
});

样例
shouQheweixindenglujieru_13.png

4. 注册无法获取验证码

4.1 因为微信和手Q各自的bug,会导致游戏在多个场景下收不到回调。游戏在调用login后可以开始一个倒计时, 倒计时完毕如果没有收到回调则算作超时, 让用户回到登录界面。倒计时推荐时间为30s,游戏也可以自己设置其中收不到回调的场景包括但不限于:
(1) 在微信未登录的情况下, 游戏拉起微信输入用户名密码以后登录, 可能会没有登录回调, 这是微信客户端已知BUG
(2) 微信授权过程中, 点击左上角的 返回 按钮, 可能会导致没有授权回调

4.2 手Q相关
(1) 游戏在正式上线前,手Q只能使用协作者账号登录,否则会在登录时,在手Q的界面报110406或者110404错误。可以点击查看如何添加协作者账号
(2) 部分游戏在未装手Q时使用手Q登录,跳转到提示下载手Q的界面返回游戏时可能会引起Crash。出现此问题时,使用Unity直接打出Apk包的游戏把YSDK的jar包中的assets中的内容解压放入Android/assets中。如果使用其他方式打包,需要注意打包脚本中适当处理YSDK的jar包中的so文件和资源文件,如果还有问题可尝试把YSDK的jar包中的assets中的内容解压放入游戏工程中的assets目录。

4.3 微信相关
(1) 拉起微信时候, 微信会检查应用程序的签名和微信后台配置的签名是否匹配(此签名在申请微信appId时提交过), 如果不匹配则无法唤起已经授权过的微信客户端
(2) WXEntryActivity.java 位置不正确(必须在包名/wxapi 目录下)则不能收到回调

5. 错误码

登录

错误码 含义
1001 手Q返回用户取消 引导用户重新授权或者分享
1002 手Q返回登录失败 引导用户重新授权
1003 手Q提示登录时网路异常 引导用户检查网络后重试
1004 用户手机没有安装手Q 引导用户安装手Q后重试
1005 用户手机手Q版本太低 引导用户升级手Q后重试
2000 用户手机没有安装微信 引导用户安装微信后重试
2001 用户手机微信版本太低 引导用户升级微信后重试
2002 用户取消授权 引导用户重新授权或者分享
2003 用户拒绝授权 引导用户重新授权
2004 微信返回登录失败 引导用户重新授权
3000 游客登录失败 引导用户再次尝试
3100 本地票据不可用 引导用户重新授权
3101 用户账号没有实名认证 引导用户重新授权并认证权
3102 YSDK 自动登录中 无需关注,可以按照成功处理
3103 用户需要实名认证,游戏方取消超时验证逻辑,无需通知用户
3104 YSDK 免登录信息校验失败
10005 微信参数没有登录功能,需要到微信开放平台开发者资质做认证,请认证后重试
100044 游戏当前安装包签名与平台上传的安装包签名不一致,请检查打包用的keystone
110406 未正式上线的游戏,需要使用调试者账号测试,非调试者账号登录则报错110406。添加的调试者账号必须与开发者账号是好友
110407 腾讯开放平台应用须和QQ互联平台关联,QQ互联平台该应用必须已上线,且保持签名包名一致

实名认证

错误码 含义
3201 没有查询到信息 再次调用接口重试

拉起

错误码 含义
3301 应用被拉起时无登录态 显示登录按钮,引导用户授权
3302 YSDK自动登录中 游戏无需关注(登录结束结果会通过LoginNotify回调
3303 拉起游戏时存在异账号 游戏需要弹框让用户选择登入游戏的账号

支付

错误码 含义
4001 用户取消支付 引导用户重试
4002 支付参数错误 检查参数以后.引导用户重试
5001 没有获取到应用宝登录状态
5002 暂不支持的登录类

6.常见问题

6.1 手Q登录异常

请按照步骤进行问题排查:
(1) 首先确定游戏是否上线,如果游戏没有上线,请检查登录的账号是否为协作者账号,如果不是,请按照上面章节”手Q添加协作者账号“指引添加协作者;
(2) 检查游戏安装包签名与上传到平台的安装包签名是否一致。可以通过扫码安装校验apk,在输入框中输入游戏的包名,并点击读取游戏包签名,工具会自动获取游戏安装的签名,并与后台上传的安装包的签名进行匹配。
shouQheweixindenglujieru_14.png
(3) 检查签名、包名、appId等信息
i.检查ysdkconf.ini文件中配置的appId是否正确
ii.检查AndroidManifest中手Q的配置是否正确,配置内容参照前面手Q的接入文档
iii.检查游戏的activity的launchmode是否是singleTop
iv.检查是否有按照ysdk标准接入的指引,正确的在游戏的activity中调用ysdk的生命周期方法
v.检查是否有正确调用setUserListener设置监听器,并在回调方法里正确处理登录等事件
另外,应用开发者也可以下载自检脚本,对ysdk的配置进行检查。自检脚本的使用详见:YSDK自检脚本使用指南

6.2 微信登录异常

请按照步骤进行问题排查:
(1) 检查log中是否有

lauchWXPlatForm wx SendReqRet: true

如果有,但是微信客户端没有被拉起,请看步骤2和步骤3,否则,请看步骤4
(2) 检查游戏安装包签名与上传到平台的安装包签名是否一致。可以通过扫码安装校验apk,在输入框中输入游戏的包名,并点击读取游戏包签名,工具会自动获取游戏安装的签名,并与后台上传的安装包的签名进行匹配。
shouQheweixindenglujieru_15.png

(3) 检查签名、包名、appId等信息
i.检查ysdkconf.ini文件中配置的appId是否正确
ii.检查AndroidManifest中微信的配置是否正确,配置内容参照前面微信的接入文档
iii.检查游戏的activity的launchmode是否是singleTop
iv.检查是否有按照ysdk标准接入的指引,正确的在游戏的activity中调用ysdk的生命周期方法
v.检查是否有正确调用setUserListener设置监听器,并在回调方法里正确处理登录等事件
另外,应用开发者也可以下载自检脚本,对ysdk的配置进行检查。自检脚本的使用详见:YSDK自检脚本使用指南
(4) 检查WXEntryActivity.java放置的位置WXEntryActivity.java必须要放在游戏 + .wxapi下面,例如,游戏的包名为:com.tencent.ysdkdemo,则该activity应该放在com.tencent.ysdkdemo.wxapi。另外,需要确定WXEntryActivity里面的内容是否与下面的一致。

 
/**
 * !!此文件的代码逻辑部分使用者不要修改
 */
public class WXEntryActivity extends com.tencent.ysdk.module.user.impl.wx.YSDKWXEntryActivity { }

(5) 检查是否有按照ysdk标准接入的指引,正确的在游戏的activity中调用ysdk的生命周期方法
(6) 检查是否有正确调用setUserListener设置监听器,并在回调方法里正确处理登录等事件

以上信息是否解决您的问题?

Copyright © 1998 - 2020 Tencent. All Rights Reserved.

腾讯公司 版权所有

返回顶部