10/28/2024 17:13:24
QQ 渠道说明
一、Android工程配置
1.1 权限配置
在 AndroidManifest.xml 中新增权限
<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" />
1.2 入口 Activity 配置
在 Application 节点中添加如下 activity 配置
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
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{YOUR_QQ_APP_ID}" />
</intent-filter>
</activity>
[info] 替换
{YOUR_QQ_APP_ID}
为业务申请的QQ APPID
1.3 App Id 配置
在工程的 assets/MSDKConfig.ini 文件中添加以下配置
[QQ渠道配置]
QQ_APP_ID={YOUR_QQ_APP_ID}
[info] 替换
{YOUR_QQ_APP_ID}
为业务申请的QQ APPID
二、iOS工程配置
2.1 MSDKConfig 配置文件
在工程中找到 MSDKAppSetting.bundle/MSDKConfig.ini 文件,增加如下配置
QQ_APP_ID = {YOUR_QQ_APP_ID}
[info] 替换
{YOUR_QQ_APP_ID}
为业务申请的QQ APPID
2.2 Xcode 工程配置文件 info.plist
找到或新建如下节点:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>tencent{your qq app id}</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>tim</string>
<string>mqq</string>
<string>mqqapi</string>
<string>mqqwpa</string>
<string>mqqbrowser</string>
<string>mttbrowser</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqopensdkapiV2</string>
<string>mqqopensdkapiV3</string>
<string>mqqopensdkapiV4</string>
<string>wtloginmqq2</string>
<string>mqzone</string>
<string>mqzoneopensdk</string>
<string>mqzoneopensdkapi</string>
<string>mqzoneopensdkapi19</string>
<string>mqzoneopensdkapiV2</string>
<string>mqqapiwallet</string>
<string>mqqopensdkfriend</string>
<string>mqqopensdkavatar</string>
<string>mqqopensdkminiapp</string>
<string>mqqopensdkdataline</string>
<string>mqqgamebindinggroup</string>
<string>mqqopensdkgrouptribeshare</string>
<string>tencentapi.qq.reqContent</string>
<string>tencentapi.qzone.reqContent</string>
<string>mqqthirdappgroup</string>
<string>mqqopensdklaunchminiapp</string>
<string>mqqopensdkproxylogin</string>
<string>mqqopensdknopasteboard</string>
<string>mqqopensdkcheckauth</string>
<string>mqqguild</string>
<string>mqqopensdknopasteboardios16</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
[info] 替换
{your qq app id}
为业务申请的QQ APPID,另外上述 LSApplicationQueriesSchemes 建议配置在前 50 以内,详情可参考 iOS开发者文档说明
2.3 Unity XUPoter 的 xx.projmods 文件的配置
Unity 导出 XCode 工程时,需要配置 projmods 文件,使得导出的 XCode 工程能得到 3.2 的配置
{
"group": "MSDKQQ",
"libs": [],
"frameworks": [],
"files": [],
"folders": [],
"excludes": [],
"headerpaths":[],
"build_settings":
{},
"system_capabilities": {},
"Info.plist":{
"LSApplicationQueriesSchemes":
[
"tim",
"mqq",
"mqqapi",
"mqqwpa",
"mqqbrowser",
"mttbrowser",
"mqqOpensdkSSoLogin",
"mqqopensdkapiV2",
"mqqopensdkapiV3",
"mqqopensdkapiV4",
"wtloginmqq2",
"mqzone",
"mqzoneopensdk",
"mqzoneopensdkapi",
"mqzoneopensdkapi19",
"mqzoneopensdkapiV2",
"mqqapiwallet",
"mqqopensdkfriend",
"mqqopensdkdataline",
"mqqgamebindinggroup",
"mqqopensdkgrouptribeshare",
"tencentapi.qq.reqContent",
"tencentapi.qzone.reqContent",
],
"CFBundleURLTypes" :
[
{
"CFBundleTypeRole":"Editor",
"CFBundleURLSchemes":["tencent{QQ_APPID}"]
}
]
},
}
[info] 替换
{QQ_APPID}
为业务申请的QQ APPID
2.4 MSDK V5.7 及以后的版本需要配置 Universal Link
详情请参考 Universal Link 说明
三、功能说明
QQ 平台侧逻辑,当未安装 QQ 客户端登录时,iOS 会拉起 QQ Web 登录页,Android 会拉起 QQ 下载页,无需业务额外处理。详情需要联系 qqconnecthelper(QQ互联及登录咨询)。
3.1 登录功能
使用 QQ 的授权登录,详情见 登录模块。
调用 MSDKLogin.Login 时需传入权限,传入"all",表示具备已申请的平台侧所有权限。
已知的权限列表如下(当未传入任何权限时,Android 默认使用 get_simple_userinfo 权限):
权限 | 说明 |
---|---|
get_user_info | 获取用户信息 |
get_app_friends | 获取 QQ 好友关系 |
get_simple_userinfo | 获取 QQ 基本信息 |
get_vip_info | 获取你的 VIP 信息 |
get_vip_rich_info | 获取 QQ 会员详细信息 |
get_friends_info | 获取 QQ 同玩陌生好友列表 |
add_share | 发表分享到 QQ 空间 |
使用 QQ 二维码登录
判断手Q App 是否安装 ,未安装时使用二维码登录,调用 MSDKLogin.Login 在 extraJson 中增加 QRCode 配置,打开二维码登录界面。注意 extraJson 是 json 格式。
示例代码
MSDKLogin.Login (channel, "", "", "{\"QRCode\":true}");
GCloud::MSDK::MSDKLogin::Login(channel, "", "", "{\"QRCode\":true}");
3.2 好友功能
发送信息给QQ好友,分享图片、视频等到QQ空间,详情见 好友模块
1)发送功能支持类型
序号 | 功能 | 必填字段 |
---|---|---|
1 | 发送文本-弹框(IOS) | type(类型)、desc(描述) |
2 | 发送链接-弹框 | type(类型)、link(链接) |
3 | 发送图片-弹框 | type(类型)、imagePath(图片地址) |
4 | 发送音乐-弹框 | type(类型)、link(链接) |
5 | 应用邀请-弹框 | type(类型) |
6 | 应用邀请-静默 | user(好友openid)、link(链接)、imagePath(图片地址) |
7 | 发送 Ark 消息 | user(好友openid)、link(链接)、imagePath(图片地址) |
8 | 发送小程序消息 | type(类型)、desc(摘要描述,不填部分机型报参数错误)、extraJson(小程序参数) |
9 | 拉起小程序(从 5.30.000 版本开始支持) | type(类型)、extraJson(小程序参数) |
[warning] 注意
- 发送文本功能,仅 iOS 支持,Android 不支持
- QQ 的静默邀请需要用户关注 QQ手游 服务号,邀请也通过该服务号来发送
- 图片地址 imagePath 可以是网络图片,也可以是本地图片,网络图片会下载保存到本地后再发送/分享
- 小程序分享extraJson参数包括mini_appid、mini_path、mini_webpage_url、mini_program_type
应用邀请-静默,在扩展字段可添加game_tag用作平台分享类型统计,
reqInfo.ExtraJson = "{\"game_tag\":\"MSDKGameTag-Unity\"}";
扩展参数,在extraJson中添加game_message_ext、game_tag_name来添加扩展参数,发送应用邀请、发送图片、发送 Ark 消息支持该扩展参数功能
reqInfo.ExtraJson = "{\"game_message_ext\":\"MSDKGameTag-Unity\",\"game_tag_name\":\"MSDKGameTag-Unity\"}";
2)分享功能支持类型
序号 | 功能 | 必填字段 |
---|---|---|
1 | 分享文本-弹框 | type(类型)、desc(描述) |
2 | 分享链接-弹框 | type(类型)、link(链接) |
3 | 分享图片-弹框 | type(类型)、imagePath(图片地址) |
4 | 分享视频-弹框(Android) | type(类型)、mediaPath(多媒体地址) |
5 | 分享音乐-弹框(IOS) | type(类型)、link(链接) |
6 | 分享视频-弹框 | type(类型)、mediaPath(视频地址) |
7 | 发送小程序消息 | type(类型)、desc(摘要描述,不填部分机型报参数错误)、extraJson(小程序参数) |
[warning] 注意
- 其他发送/分享类型均不支持
- 分享视频功能,建议使用本地视频地址; QQ官方限制视频大小上限为50M, 建议业务根据机型动态调整大小; MSDK只对视频地址进行判空,不做有效性检测,若地址无效,QQ方会拉起页面后返回,并告知调用方 用户取消了分享
- 当前 QQ OpenSDK 会对视频文件有效性做校验,不会拉起 QQ 页面
- QQ 官方限制的视频大小,Android 为 100 M以内,iOS 50 M以内
- 分享音乐功能,仅 IOS 支持,Android 不支持
- 图片地址 imagePath 可以是网络图片,也可以是本地图片,网络图片会下载保存到本地后再发送/分享
小程序分享extraJson参数包括mini_appid、mini_path、mini_webpage_url、mini_program_type
扩展参数,在extraJson中添加game_message_ext、game_tag_name来添加扩展参数,发送应用邀请、发送图片、发送 Ark 消息支持该扩展参数功能
reqInfo.ExtraJson = "{\"game_message_ext\":\"MSDKGameTag-Unity\",\"game_tag_name\":\"MSDKGameTag-Unity\"}";
3)添加好友
序号 | 功能 | 必填字段 |
---|---|---|
1 | 添加好友 | user(好友的 MSDK openID) |
[warning] 注意
- 添加好友功能,Android 和 iOS 逻辑不一致:Android QQ SDK 没有回调,在 MSDK 调用完 QQ 后,直接返回成功回调。该成功回调只能表示调用 QQ SDK 成功,并不能代表添加好友的结果就一定是成功的;iOS QQ SDK 有统一的 QQ 返回回调处理,在 MSDK 调用 QQ 并从 QQ 返回后,可以获取返回回调并传递给游戏。
- 添加好友的回调双端不一致来源于 QQ 平台的设计如此,且实际是否有成功添加好友还依赖对方是否同意好友请求,所以游戏对于添加好友回调也无须关心,也不可作为相关依据。
3.3 群组功能
QQ 群组功能包括:创建群、加入现有群、获取群状态、获取群关系、解绑群、绑定群、提醒会长建群、获取会长的群列表
详情见 群组模块
3.4 QQ 拉起游戏
从 QQ 拉起游戏,当前包括以下两种情况的拉起
用户点击邀请消息拉起
游戏中心拉起
这两种拉起,MSDK 均会响应且透传来自 QQ 的参数到 extraJson 的 params 字段中,游戏可从中获取字段。
传递数据格式如下:
{
"extraJson": {
"params": {
"gamedata": "MSDK",
"atoken": "9436F9E54343D839C2DFDBAF65672D31",
"fling_action_key": 2,
"openid": "92996552B2C33EA7E5412F19C0EBD643",
"preAct": "QQBrowserActivity",
"ptoken": "D947F9FBC24F11A542892B25ADD532F9",
"leftViewText": "返回",
"fling_code_key": 204041314,
"platformdata": "",
"preAct_time": 1559283567140,
"launchfrom": "sq_gamecenter",
"current_uin": "92996552B2C33EA7E5412F19C0EBD643",
"platform": "qq_m"
},
"game_data": "MSDK"
},
"methodNameID": 119,
"retCode": 1013,
"retMsg": "Need different account alert",
"ret": -1,
"msg": ""
}
说明:extraJson 中 params 的对应字段,名字和内容均由 QQ 传递。extraJson 中的 game_data 字段是游戏发送好友邀请时填充内容的原样带回,若是游戏中心拉起,则对应解析该字
game_data 字段透传
var reqInfo = new MSDKFriendReqInfo ();
reqInfo.Link = "http://www.qq.com";
reqInfo.ExtraJson = "{\"game_data\":\"iOS Game Data 测试游戏数据\"}";
场景:游戏业务通过发送邀请消息接口拉起QQ-app发送消息给QQ好友,用户的QQ好友点击消息时跳回游戏
发送消息时MSDKFriendReqInfo中的ExtraJson中添加的game_data的字段,在点击消息拉起游戏时会透传给游戏业务,回传数据在MSDKBaseRet的ExtraJson中的game_data中。其中params是QQ回调回来的所有的数据,
{
"methodNameID": 0,
"channelID": 2,
"channel": "QQ",
"seqID": "11-2B4C94EE-0CC8-4433-A313-1678F57272FA-1585292132-17",
"extraJson": {
"params": {
"openid": "290F941C5F87AA8BB2B77E57565A724F",
"atoken": "9554C3570DDEBA11F3A90DC9FDDB4A75",
"platform": "qq_m",
"platformdata": "",
"gamedata": "iOS%20Game%20Data%20%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95--%3D%3DhelloMSDK",
"huashan_com_sid": "biz_src_jc_ark"
},
"game_data": "iOS Game Data 测试游戏数据"
}
}
四、更新互联 opensdk3.3.9 以支持手Q小程序传参功能
4.1、业务侧如何携带小程序
原手 Q 小程序的参数传递方式
info.extraJson = "{\"mini_appid\":\"1109787314\",\"mini_path\":\"pages/component/pages/launchApp813/launchApp813\",\"mini_webpage_url\":\"www.qq.com\",\"mini_program_type\":3}";
携带组队信息后,在 mini_path 后添加 get 参数
info.extraJson = "{\"mini_appid\":\"1109787314\",\"mini_path\":\"pages/component/pages/launchApp813/launchApp813?key1=val2&key3=val4\",\"mini_webpage_url\":\"www.qq.com\",\"mini_program_type\":3}";
4.2、业务侧如何接受传递参数
在点击消息拉起游戏时会透传给游戏业务,回传数据在在 Wakeup 回调函数的 MSDKBaseRe t的 ExtraJson 中的 game_data 中, 格式为 JSON 字符串。同时附件有 channel 字段区分渠道
{
"methodNameID": 0,
"channelID": 2,
"channel": "QQ",
"seqID": "11-2B4C94EE-0CC8-4433-A313-1678F57272FA-1585292132-17",
"extraJson": {
"channel": "QQ",
"game_data": "{\key1\":\"val2\", \key3\":\"val3\"}"
}
}
4.3、配置变更
手 Q SDK 需要提供 fileProvider , 因此 MSDK 手 Q在 AndroidManifest.xml 中新增了
<provider android:authorities="${applicationId}.QQSDKFileProvider"
android:name="com.tencent.gcloud.msdk.common.QQSDKFileProvider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
并在 res/xml 目录中新增 file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-files-path name="opensdk_external" path="Images/tmp"/>
<root-path name="opensdk_root" path=""/>
</paths>
当项目组升级时,使用 Internal 的构建方式的时候,${applicationId} 宏会编译报错,此时务必把该宏,替换为包名
由于 fileProvider 影响图片分享,以此建议项目组接入时务必检查所有图片的分享,确保升级后功能可用
4.4、 注意事项
- 当 qq 小程序拉起 App 时,如果不携带参数,就没有 WakeupEvent 回调产生
All rights reserved.