接入文档-微信小游戏
对接流程
SDK接入完毕后请发送二维码到对接群,测试验收通过后再提审发布!!!
接入准备
通用域名加白
接入前请检查下述域名是否已加进微信域名配置白名单,配置项有request合法域名、socket合法域名、uploadFile合法域名、downloadFile合法域名等(根据具体使用到那些域名项进行配置,也可以通配)。
https://yyx.vigame.cn
https://c.vigame.cn
https://p.vigame.cn
https://u.vigame.cn
https://x.vigame.cn
初始化(必接)
将下载的dnsdk.js
拷贝到导出小游戏工程game.js
同级目录下,game.js
文件中添加如下代码
import './weapp-adapter';
import unityNamespace from './unity-namespace';
import './webgl.wasm.framework.unityweb';
import './unity-sdk/index.js';
import checkVersion, { canUseCoverview } from './check-version';
import 'texture-config.js';
import { launchEventType, scaleMode } from './plugin-config';
import './dnsdk.js'; // 添加动能小游戏sdk
初始化示例
/// <summary>
/// 微信小游戏sdk初始化
/// </summary>
/// <param name="appid">H5动能appid</param>
/// <param name="appKey">H5动能appkey</param>
/// <param name="offerId">米大师侧申请的应用ID</param>
/// <param name="cloudEnv">云函数的环境ID</param>
/// <param name="payRate">根据小游戏平台配置支付时设置的支付比例(1:1、1:10、1:100)确认传1、10、100</param>
/// <param name="callBack">sdk初始化回调bool:是否初始化成功;string:openId;string:userCode</param>
/// <param name="gravityEngineToken">引力引擎token</param>
public void MiniGameInit(string appid, string appKey, string offerId, string cloudEnv, Wb.MiniPayRate payRate = Wb.MiniPayRate.Shi, Action<bool, string, string> callBack = null, string gravityEngineToken = null)
示例
接入时H5动能appid和H5动能appkey需改为正式参数!!!
Wb.CoreManager.Instance.MiniGameInit(您的H5动能appid, 您的H5动能appkey, "米大师侧申请的应用ID", "云环境ID", Wb.MiniPayRate.Shi,
(ret, openId, userCode) =>
{
if (ret)
{
Debug.Log("DNSDK: MiniGameInit 初始化成功 openId:" + openId + ", userCode:" + userCode);
}
else
{
Debug.Log("DNSDK: MiniGameInit SDK初始化失败");
WX.ShowModal(new ShowModalOption()
{
title = "提示",
content = "SDK初始化失败,请重启!",
success = (res) =>
{
WX.RestartMiniProgram();
}
});
}
});
统计(必接)
根据统计埋点文件使用合适接口上报游戏中产生的事件。
转化行为active
和active_register
事件必接!!!
1. 自定义事件(必接)
接口说明
public void TJCustomEvent(string eventId)
public void TJCustomEvent(string eventId, string label)
public void TJCustomEvent(string eventId, Dictionary<string, string> attributes)
事件说明
事件名称
事件ID
触发时机
附加参数
游戏loading页面
app_loading_show
游戏引擎初始化后就触发上报
无
游戏内首页
app_home_show
主页展示时
无
使用示例
//示例
Wb.TjManager.Instance. TJCustomEvent("app_loading_show");
Wb.TjManager.Instance. TJCustomEvent("app_home_show");
2. 转化行为上报(必接)
注意:转化行为上报使用TjSendTrackingEvent
接口!!!
SDK会本地缓存埋点记录,再上报会进行拦截
接口说明
/// <summary>
/// 转化行为上报
/// </summary>
/// <param name="eventId">事件id</param>
/// <param name="val">额外参数json字符串</param>
public void TjSendTrackingEvent(string eventId, string val = "")
事件id
事件定义
data额外携带数据
建议上报时机
active(自实现上报必接)
激活
首次进入主页触发
active_register(自实现上报必接)
注册
完成角色创建后触发。如果没有角色创建过程,可跟active事件同时触发。
使用示例
Wb.TjManager.Instance.TjSendTrackingEvent("active");
Wb.TjManager.Instance.TjSendTrackingEvent("active_register");
3.关卡统计上报(必接)
接口说明
/// <summary>
/// 关卡开始
/// </summary>
/// <param name="level">关卡id</param>
public void StartLevel(string level)
/// <summary>
/// 关卡获胜
/// </summary>
/// <param name="level">关卡id</param>
/// <param name="score">得分</param>
public void FinishLevel(string level, string score)
/// <summary>
/// 关卡失败
/// </summary>
/// <param name="level">关卡id</param>
/// <param name="score">得分</param>
public void FailLevel(string level, string score)
事件说明
事件id
事件定义
data额外携带数据
建议上报时机
begin
开始
levelid:关卡ID
进入关卡
complete
胜利
levelid:关卡IDscore:得分
关卡胜利
fail
失败
levelid:关卡IDscore: 得分
关卡失败
使用示例
Wb.TjManager.Instance.StartLevel("3-1");
Wb.TjManager.Instance.FinishLevel("3-1", "100");
Wb.TjManager.Instance.FailLevel("3-1", "100");
4.用户行为统计上报
事件id
事件定义
data额外携带数据
建议上报时机
online
在线时长
duration--时长(秒)
用户切到后台或者杀掉进程时
setting_page_click
设置页点击
button_click:1用户反馈,2游戏圈,3微信客服
设置页内点击按钮时(用户反馈,游戏圈、微信客服)
self_button_click
大厅内点击
button:1-点击购物车,2-点击跳转合成界面,3-点击任务栏,4-点击能量弹窗(各游戏需要自己定义数值)
大厅界面点击按钮时
5.分享/邀请统计上报
事件id
事件定义
data额外携带数据
建议上报时机
分享
help_share
分享小程序
分享小程序到会话时
点击求助好友按钮
help_button_click
bonus_status:1领取成功,2领取失败 help_times_left: 剩余领取次数1,2,3
点击求助好友按钮时
邀请
invite_click
点击邀请好友入口
invite_number:邀请好友的数量 0,1,2...
玩家在主页点击邀请好友入口时上报 (首次弹出时上报0)
点击加号邀请好友
invite_click_plus
/
玩家在邀请好友界面点击加号时
点击领取奖励
bonus_click
bonus_status:1领取成功,2领取失败
点击领取奖励时
6.设置关卡和活动进度
sdk
上报stay_time
事件时会携带下面设置的数据
接口说明
/// <summary>
/// 设置上报level_id参数
/// </summary>
/// <param name="levelId"></param>
public void SetTjLevelId(string levelId)
/// <summary>
/// 设置上报活动进度参数
/// </summary>
/// <param name="json">活动json格式的字符串</param>
public void SetTjActivityProgress(string json)
使用示例
Wb.TjManager.Instance.SetTjLevelId("10");
Wb.TjManager.Instance.SetTjActivityProgress("{\"activity_id\":10,\"activity_progress\":15,\"activity_bonus_id\":15,\"begain_time\":100,\"valid_time\":120}");
7.设置用户标识
调用下面接口设置后,所有事件上报都会携带用户id
/// <summary>
/// 设置用户id
/// </summary>
/// <param name="userId">用户id</param>
public void SetLoginId(string userId)
使用示例
Wb.CoreManager.Instance.SetLoginId("123321");
广告(必接)
1. 打开广告
/// <summary>
/// 打开广告
/// </summary>
/// <param name="adName">广告位名称</param>
/// <param name="callBackFun">广告关闭回调,状态0成功、1失败、2加载失败</param>
/// <param name="adStartFun">广告播放状态回调,小游戏不要使用</param>
public void OpenAd(string adName, ADCallback callBackFun = null, AdStartCallback adStartFun = null)
示例
Wb.ADManager.Instance.OpenAd("home_mfzs", (ret, info) => {
if (ret == ADResult.Success)
{
Debug.Log("Unity: 广告打开成功 OpenAdTest VideoAd info = " + info);
}
else
{
Debug.Log("Unity: 广告打开失败 OpenAdTest VideoAd info = " + info);
}
});
2. 广告是否缓存好
广告为实时加载方式(不缓存广告),调用接口直接返回true
/// <summary>
/// 广告是否缓存好
/// </summary>
/// <param name="adName">广告位名称</param>
public bool IsAdReady(string adName)
3. 某关卡是否可以打开该广告
/// <summary>
/// 某关卡是否可以打开该广告
/// </summary>
/// <param name="adName">广告位名称</param>
/// <param name="level">关卡id</param>
public bool IsAdBeOpenInLevel(string adName, int level)
4. 关闭广告
/// <summary>
/// 关闭广告
/// </summary>
/// <param name="adName">广告位名称</param>
public void CloseAd(string adName)
支付
1.支付接口
支付接口
/// <summary>
/// 小游戏支付
/// </summary>
/// <param name="ver">小游戏支付版本,1:虚拟支付1.0版本; 2:虚拟支付2.0版本</param>
/// <param name="payParam">付参数</param>
/// <param name="callFun"></param>
public void MiniPay(int ver, PayParam payParam, OrderPayCallbackHandler callFun = null)
调用示例
// payId 计费点id
// price 金额(单位分)
// payDesc 商品描述,使用#拼接
// payCode 支付code,没有填写计费点payId
// giftId 礼包id,没有的话写计费点payId
// giftType 礼包类型
// giftNum 礼包数量,一次购买了几份,最小值为1
// giftPrice 礼包价值,没有可填写price金额值(单位分)
// levelId 有用户等级的传用户等级,没有用户等级的游戏传关卡id
// tokenType 代币类型(当礼包类型为代币礼包时,传参。否则传空串)
// custom 用户自定义数据代替userdata(截取16个字符赋值userdata),最长128个字符
// payPush 礼包推送:1主动点击;0被动推送
// userId 户的账号ID,无账号游戏为空。最长128个字符
public void OrderPay()
{
Debug.Log("OrderPay 被点击");
ShowPreInputDialog("购买礼包", "钻石礼包", "2",(inputValue, inputValue2)=>
{
var payParam = new Wb.PayParam(1, 100,
inputValue +
"#https://yyx.vigame.cn/MergeZoo/small.png#客服发送#https://yyx.vigame.cn/MergeZoo/big.png");
Debug.Log("PayManager payParam json = " + payParam.ToJson());
var ver = inputValue2 == "1" ? Wb.MiniPayVer.Ver1 : Wb.MiniPayVer.Ver2;
Wb.PayManager.Instance.MiniPay(ver, payParam, (result, payId, userData, orderId) =>
{
switch (result)
{
case Wb.PayStatus.PaySuccess:
Debug.Log("PayManager 支付成功");
text.GetComponent<Text>().text = "支付成功";
Debug.Log("PayManager OrderPay 充值到账上报");
Wb.TjManager.Instance.TjPayOnAccount(orderId);
break;
case Wb.PayStatus.PayFail:
Debug.Log("PayManager 支付失败");
text.GetComponent<Text>().text = "支付失败";
break;
case Wb.PayStatus.PayCancel:
Debug.Log("PayManager 支付取消");
text.GetComponent<Text>().text = "支付取消";
break;
case Wb.PayStatus.PayNetError:
Debug.Log("PayManager 支付完成,遇到网络问题,请重新消耗订单");
text.GetComponent<Text>().text = "遇到网络问题";
break;
default:
throw new ArgumentOutOfRangeException(nameof(result), result, null);
}
Debug.Log("PayManager payId = " + payId);
Debug.Log("PayManager orderId = " + orderId);
Debug.Log("PayManager userData = " + userData);
});
});
}
自测示例
虚拟支付2.0会进行验签请求,可通过日志查看

虚拟支付1.0不会进行验签请求,会直接拉起支付

2.上报到账事件和消单
/// <summary>
/// 充值到账后上报
/// </summary>
/// <param name="tradeId">订单id</param>
public void TjPayOnAccount(string tradeId)
3. 补单
适用场景:使用sdk支付
设置补单回调,触发sdk中的补单逻辑。
/// <summary>
/// 支付回调
/// </summary>
/// <param name="payStatus">支付状态</param>
/// <param name="payId">计费点id</param>
/// <param name="userData">自定义参数</param>
/// <param name="orderId">订单id</param>
public delegate void OrderPayCallbackHandler(PayStatus payStatus, int payId, string userData, string orderId);
/// <summary>
/// 设置补单回调
/// 调用该接口会触发sdk补单流程
/// 根据实际情况确认调用时机
/// </summary>
/// <param name="callFun">支付回调</param>
public void SetInventoryCallBack(OrderPayCallbackHandler callFun)
分享
分享策略名称由策划或运营提供。
1.主动分享
/// <summary>
/// 小游戏-主动分享接口
/// </summary>
/// <param name="shareName">分享策略名称</param>
/// <param name="userData">自定义数据使用'&'拼接</param>
public void ShareAppMessage(string shareName, string userData = "")
//调用示例
Wb.SocialManager.Instance.ShareAppMessage("分享策略名称", "t1=1&t2=2");
2. 点击右上角分享
点击右上角"..."进行分享
触发,前提是要先主动调用设置分享监听OnShareAppMessage
,触发右上角分享时才会调用下面的设置。
/// <summary>
/// 小游戏-右上角分享接口
/// </summary>
/// <param name="shareName">分享策略名称</param>
/// <param name="userData">自定义数据使用'&'拼接</param>
public void OnShareAppMessage(string shareName, string userData = "")
//调用示例
Wb.SocialManager.Instance.OnShareAppMessage("分享策略名称", "t1=1&t2=2");
游戏圈
1. 创建
/// <summary>
/// 创建游戏圈按钮
/// <param name="rect">按钮显示位置</param>
/// <param name="param">文本GameClubText、图片GameClubImage</param>
/// <param name="func">点击回调</param>
/// </summary>
public void GameClubButtonCreate(RectTransform trans, GameClubBase param, Action<string> func)
//文本按钮示例
Wb.GameClubBase config = new Wb.GameClubText
{
text = "游戏圈",
style = new Wb.GameClubStyle
{
color = "#ffffff",
fontSize = 16,
backgroundColor = "#ff0000",
lineHeight = 40
}
};
if (text.TryGetComponent(out RectTransform rect))
{
Wb.CoreManager.Instance.GameClubButtonCreate(rect, config, (res) =>
{
Debug.Log("GameClub res = " + res);
});
Wb.CoreManager.Instance.GameClubButtonShow();
}
else
{
Debug.Log("GameClub RectTransform 获取失败");
}
//图片按钮示例
Wb.GameClubBase config = new Wb.GameClubImage
{
image = "images/green.png",
icon = "green"
};
if (image.TryGetComponent(out RectTransform rect))
{
Wb.CoreManager.Instance.GameClubButtonCreate(rect, config, (res) =>
{
Debug.Log("GameClub res = " + res);
});
Wb.CoreManager.Instance.GameClubButtonShow();
}
else
{
Debug.Log("GameClub RectTransform 获取失败");
}
2. 销毁
/// <summary>
/// 销毁游戏圈按钮
/// </summary>
public void GameClubButtonDestroy()
3. 隐藏
/// <summary>
/// 隐藏游戏圈按钮
/// </summary>
public void GameClubButtonHide()
4. 显示
/// <summary>
/// 显示游戏圈按钮
/// </summary>
public void GameClubButtonShow()
5. 移除按钮的点击事件的监听函数
/// <summary>
/// 移除游戏圈按钮的点击事件的监听函数
/// </summary>
public void GameClubButtonOffTap()
意见反馈
1. 创建
/// <summary>
/// 创建意见反馈按钮
/// <param name="rect">按钮显示位置</param>
/// <param name="param">文本GameClubText、图片GameClubImage</param>
/// <param name="func">点击回调</param>
/// </summary>
public void FeedbackButtonCreate(RectTransform trans, GameClubBase param, Action<string> func)
//文本示例
Wb.GameClubBase config = new Wb.GameClubText
{
text = "问题反馈",
style = new Wb.GameClubStyle
{
color = "#ffffff",
fontSize = 16,
backgroundColor = "#ff0000",
lineHeight = 40
}
};
if (text.TryGetComponent(out RectTransform rect))
{
Wb.CoreManager.Instance.FeedbackButtonCreate(rect, config, (res) =>
{
Debug.Log("Feedback res = " + res);
});
Wb.CoreManager.Instance.FeedbackButtonShow();
}
else
{
Debug.Log("Feedback RectTransform 获取失败");
}
//图片示例
Wb.GameClubBase config = new Wb.GameClubImage
{
image = "images/dark.png",
};
if (image.TryGetComponent(out RectTransform rect))
{
Wb.CoreManager.Instance.FeedbackButtonCreate(rect, config, (res) =>
{
Debug.Log("Feedback res = " + res);
});
Wb.CoreManager.Instance.FeedbackButtonShow();
}
else
{
Debug.Log("Feedback RectTransform 获取失败");
}
2. 销毁
/// <summary>
/// 销毁意见反馈按钮
/// </summary>
public void FeedbackButtonDestroy()
3. 隐藏
/// <summary>
/// 隐藏意见反馈按钮
/// </summary>
public void FeedbackButtonHide()
4. 显示
/// <summary>
/// 显示意见反馈按钮
/// </summary>
public void FeedbackButtonShow()
5. 移除按钮的点击事件的监听函数
/// <summary>
/// 移除意见反馈按钮的点击事件的监听函数
/// </summary>
public void FeedbackButtonOffTap()
其他功能
1.一次性订阅消息通知
需要自己接入微信的订阅功能,接入完毕后。可以使用下面的接口将通知时间(服务器时间单位毫秒,通知时间 = 服务器时间+间隔多长时间收到通知)告诉服务器。服务器根据设置的时间发送消息给玩家。
/// <summary>
/// 一次性订阅消息通知
/// </summary>
/// <param name="templateId">游戏后台配置的模板id</param>
/// <param name="noticeTime">发送通知的时间戳单位毫秒,为服务器时间</param>
public void SetSubscribe (string templateId, string noticeTime, ReportUserDataCallback callFun)
示例:订阅1小时后收到微信通知
string timeStamp = "请求的服务器时间";
//订阅1小时后收到微信通知
long endTime = long.Parse(timeStamp) + 60 * 60 * 1000;
Wb.CoreManager.Instance.SetSubscribe("模板id", endTime.ToString(), (ret, info) => {
if (ret)
{
// Debug.Log("Subscribe 订阅成功 info = " + info);
}
else
{
// Debug.Log("Subscribe 订阅失败 info = " + info);
}
});
2.获取黑名单
判断是否加入黑名单,根据请求返回的数据判断。code
为200,返回的info
中包含forbidden
时即为加入了黑名单。
/// <summary>
/// 获取黑名单数据
/// </summary>
/// <param name="userId">用户唯一标识</param>
/// <param name="callFun">回调ret:true时需根据返回的info中是否有forbidden来判断是否被禁, info返回信息</param>
public void GetBlackConfig(string userId, ReportUserDataCallback callFun = null)
返回值
{
"code":200, --返回结果码 200 请求成功 500服务器错误
"data":{
"forbidden":{ --判断是否有值
"leftTime":"-1", --解禁剩余时间 秒 -1 永久封禁 其他为具体解封秒数
"reason":"封禁", --封禁原因
"forbiddenTime":"-1", --封禁截止时间 -1 永久封禁 其他 具体解封时间 yyyy-MM-dd HH:mm:ss
}
},
"retMsg":"", --错误提示信息
}
结果码
200
成功
401
签名不通过
403
必要请求参数为空
500
服务器出错
3.客服中心
/// <summary>
/// 打开客服中心
/// </summary>
/// <param name="title">标题</param>
/// <param name="loginId">用户id</param>
public void OpenClientCenter(string title, string loginId)
4. 获取用户信息
/// <summary>
/// 获取用户微信信息
/// </summary>
/// <param name="type">登录类型1,默认微信</param>
/// <param name="callFun">通知回调</param>
public void GetUserInfo(Wb.LoginType type = Wb.LoginType.TYPE_WX, UserInfoCallback callFun = null)
Last updated