手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());
样例
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 -->
(2) 将游戏申请到的qqAppId填入到项目assets目录下的ysdkconf.ini文件中,如果不填写,将无法使用qq登录功能
(3) 如果需要接入防沉迷功能,需要将ysdkconf.ini中的防沉迷开关打开。更多防沉迷功能的介绍和使用,详见防沉迷接入
(4) 手Q添加协作者账号如果游戏没有上线,需要添加协作者账号,协作者账号的添加方法如下:
进入游戏在open平台的注册界面,点击下图中的QQ登录
(5) 在跳转后的界面里选择应用调试者,并输入调试者QQ号,注意,添加的调试者必须与开发账号是好友关系,点击保存
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">
(3) 将游戏申请到的wxAppId填入到项目assets目录下的ysdkconf.ini文件中,如果不填写,将无法使用qq登录功能
(4) 如果需要接入防沉迷功能,需要将ysdkconf.ini中的防沉迷开关打开。更多防沉迷功能的介绍和使用,防沉迷接入
3. 常用Api接口
3.1 登录
接口声明
/** * 用户登录 * @param platform 登录平台 */ void login(ePlatform platform);
接口调用
YSDKApi.login(ePlatform.QQ);
样例
更多细节,请查看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;
样例
3.3 用户注销
接口声明
/** * 用户注销 */ void logout();
接口调用
YSDKApi.logout();
样例
3.4 获取用户信息
接口声明
/** * 查询个人信息 */ void queryUserInfo(ePlatform platform, UserRelationListener listener);
·接口调用
YSDKApi.queryUserInfo(ePlatform.QQ, new UserRelationListener() { @Override public void OnRelationNotify(UserRelationRet ret) { Logger.d(ret.toString()); } });
样例
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,在输入框中输入游戏的包名,并点击读取游戏包签名,工具会自动获取游戏安装的签名,并与后台上传的安装包的签名进行匹配。
(3) 检查签名、包名、appId等信息
i.检查ysdkconf.ini文件中配置的appId是否正确
ii.检查AndroidManifest中手Q的配置是否正确,配置内容参照前面手Q的接入文档
iii.检查游戏的activity的launchmode是否是singleTop
iv.检查是否有正确调用setUserListener设置监听器,并在回调方法里正确处理登录等事件
另外,应用开发者也可以下载自检脚本,对ysdk的配置进行检查。自检脚本的使用详见:YSDK自检脚本使用指南
6.2 微信登录异常
请按照步骤进行问题排查:
(1) 检查log中是否有
lauchWXPlatForm wx SendReqRet: true
如果有,但是微信客户端没有被拉起,请看步骤2和步骤3,否则,请看步骤4
(2) 检查游戏安装包签名与上传到平台的安装包签名是否一致。可以通过扫码安装校验apk,在输入框中输入游戏的包名,并点击读取游戏包签名,工具会自动获取游戏安装的签名,并与后台上传的安装包的签名进行匹配。
(3) 检查签名、包名、appId等信息
i.检查ysdkconf.ini文件中配置的appId是否正确
ii.检查AndroidManifest中微信的配置是否正确,配置内容参照前面微信的接入文档
iii.检查游戏的activity的launchmode是否是singleTop
iv.检查是否有正确调用setUserListener设置监听器,并在回调方法里正确处理登录等事件
另外,应用开发者也可以下载自检脚本,对ysdk的配置进行检查。自检脚本的使用详见:YSDK自检脚本使用指南
(4)检查是否有按照ysdk标准接入的指引,正确的在游戏的activity中调用ysdk的生命周期方法
(5)检查是否有正确调用setUserListener设置监听器,并在回调方法里正确处理登录等事件
以上信息是否解决您的问题?