MSDK手Q邀请透传参数问题:url编解码与base64编解码
发布日期:2021-06-30 19:38:54 浏览次数:2 分类:技术文章

本文共 2281 字,大约阅读时间需要 7 分钟。

最近做MSDK手Q的邀请功能,遇到一个坑,手Q结构化消息分享功能接口如下:

/** * @param scene 标识发送手Q会话或者Qzone *         eQQScene.QQScene_QZone: 分享到空间(4.5以上版本支持) *         eQQScene.QQScene_Session: 分享到手Q会话 * @param title 结构化消息的标题 * @param desc 结构化消息的概要信息 * @param url  内容的跳转url,填游戏对应游戏中心详情页。在手Q中点击该条分享的消息会拉起游戏, 此时MSDK会给游戏OnWakeup(WakeupRet& wr)回调, 游戏在此url中的自定义参数(如 platformdata, gamedata等,详见此页面“游戏中心详情页”部分)会在WakeupRet.extInfo中以key-value的方式透传回来。 * @param imgUrl 分享消息缩略图URL * @param imgUrlLen 分享消息缩略图URL长度 * @return void *   通过游戏设置的全局回调的OnShareNotify(ShareRet& shareRet)回调返回数据给游戏, shareRet.flag值表示返回状态, 可能值及说明如下: *     eFlag_Succ: 分享成功 *     eFlag_Error: 分享失败 *      *     @return void *    通过游戏设置的全局回调的OnShareNotify(ShareRet& shareRet)回调返回数据给游戏, shareRet.flag值表示返回状态, 可能值及说明如下: *     eFlag_Succ: 分享成功 *     eFlag_Error: 分享失败 *   注意: *     如果分享的是本地图片,则需要放置到sdcard分区, 或其他外部程序有权限访问之处 *     由于手Q客户端部分的版本返回的回调是有问题的, 故建议不要依赖此回调做其他逻辑。 *      */void WGSendToQQ(    const eQQScene& scene,    unsigned char* title,    unsigned char* desc,    unsigned char* url,    unsigned char* imgUrl,    const int& imgUrlLen    );

其中url是可以带参数的,规范格式如下:

http://gamecenter.qq.com/gcjump?appid={YOUR_APPID}&pf=invite&from=iphoneqq&plat=qq&originuin=111&ADTAG=gameobj.msg_invite&gamedata={YOUR_GAMEDATA}

字段规范

字段 是否必须 类型 说明
appid 必须 Integer 应用唯一标识ID
pf 必须 String 历史原因固定为“invite”,游戏中心检测到pf值为invite将直接呼起游戏
plat 必须 String 来源平台,值为qq
from 必须 String

 

消息来源平台,可能值有:

 

 

androidqq:安卓QQ

 

 

iphoneqq:iPhone QQ

 

ADTAG 必须 String

 

标识不同的结构化消息来源,可能值有:

 

 

gameobj.msg_invite(代表邀请)

 

 

gameobj.msg_exceed(代表超越)

 

 

gameobj.msg_heart(代表送心)

 

 

gameobj.msg_pvp(代表挑战)

 

 

gameobj.msg_show(代表炫耀)

 

originuin 必须 String 发起方openID
platformdata 可选 String 透传给游戏的数据
gamedata 可选 String 透传给游戏的数据

一般我们做邀请功能,都可能需要自己带一些参数,此时就用到了gamedata这个字段,但是,作为一个链接参数,我们必须对参数进行加密,一般的做法就是进行base64编码

base64在线编解码的网站:

对应的c#的base64编解码的代码如下:

base64编码:

byte[] bytes = Encoding.Default.GetBytes("要转换的字符");string str = Convert.ToBase64String(bytes);

base64解码:

byte[] outputb = Convert.FromBase64String(str);string orgStr = Encoding.Default.GetString(outputb);

好,我们构造好了参数之后,通过手Q分享结构化消息给好友B君,B君在手Q端收到了分享消息,点击分享消息,此时会跳转到链接的网站,也就是手Q游戏中心,如果你的游戏已经在手Q游戏中心上架,并且你已经安装了游戏,则此时游戏中心会自动拉起游戏APP,并在APP唤醒时回调MSDK的onWakeupNotify接口,将gamedata回传给游戏。

好,重点来了,它回传的这个数据是被进行url编码过的,所以你在进行base64解码前,必须对数据进行url解码

如果是用unity,直接用WWW.UnEscapeUrl接口即可进行url解码

在线的url编解码网站:

 

 

 

 

 

转载地址:https://linxinfa.blog.csdn.net/article/details/52187553 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:svn提交的一个坑
下一篇:eclipse识别不到真机设备问题的解决

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月21日 00时48分02秒