MSDK手Q邀请透传参数问题:url编解码与base64编解码

33 篇文章 2 订阅

最近做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在线编解码的网站:http://www1.tc711.com/tool/BASE64.htm

对应的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编解码网站:http://tool.chinaz.com/Tools/URLEncode.aspx

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林新发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值