Appearance
接入文档-微信小游戏
对接流程
DANGER
SDK接入完毕后请发送二维码到对接群,测试验收通过后再提审发布!!!
接入准备
通用域名加白
接入前请检查下述域名是否已加进微信域名配置白名单,配置项有request合法域名、socket合法域名、uploadFile合法域名、downloadFile合法域名等(根据具体使用到那些域名项进行配置,也可以通配)。
C#
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
初始化示例
csharp
/// <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)
示例
DANGER
接入时H5动能appid和H5动能appkey需改为正式参数!!!
csharp
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();
}
});
}
});
统计(必接)
根据统计埋点文件使用合适接口上报游戏中产生的事件。
DANGER
转化行为active
和active_register
事件必接!!!
1. 自定义事件(必接)
接口说明
csharp
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 | 主页展示时 | 无 |
使用示例
csharp
//示例
Wb.TjManager.Instance. TJCustomEvent("app_loading_show");
Wb.TjManager.Instance. TJCustomEvent("app_home_show");
2. 转化行为上报(必接)
WARNING
注意:转化行为上报使用TjSendTrackingEvent
接口!!!
SDK会本地缓存埋点记录,再上报会进行拦截
接口说明
csharp
/// <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事件同时触发。 |
使用示例
csharp
Wb.TjManager.Instance.TjSendTrackingEvent("active");
Wb.TjManager.Instance.TjSendTrackingEvent("active_register");
3.关卡统计上报(必接)
接口说明
csharp
/// <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: 得分 | 关卡失败 |
使用示例
csharp
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.设置关卡和活动进度
WARNING
sdk
上报stay_time
事件时会携带下面设置的数据
接口说明
csharp
/// <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)
使用示例
csharp
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.设置用户标识
WARNING
调用下面接口设置后,所有事件上报都会携带用户id
csharp
/// <summary>
/// 设置用户id
/// </summary>
/// <param name="userId">用户id</param>
public void SetLoginId(string userId)
使用示例
csharp
Wb.CoreManager.Instance.SetLoginId("123321");
广告(必接)
1. 打开广告
csharp
/// <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)
示例
csharp
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
csharp
/// <summary>
/// 广告是否缓存好
/// </summary>
/// <param name="adName">广告位名称</param>
public bool IsAdReady(string adName)
3. 某关卡是否可以打开该广告
csharp
/// <summary>
/// 某关卡是否可以打开该广告
/// </summary>
/// <param name="adName">广告位名称</param>
/// <param name="level">关卡id</param>
public bool IsAdBeOpenInLevel(string adName, int level)
4. 关闭广告
csharp
/// <summary>
/// 关闭广告
/// </summary>
/// <param name="adName">广告位名称</param>
public void CloseAd(string adName)
支付
1.支付接口
INFO
注:
1: 虚拟支付 1.0版本
2: 虚拟支付 2.0版本
3: SDK默认为1:10旧接口升级后参数要赋值给新接口PayParam
对应字段!!!custom
字段为透传自定义数据字段,该字段会包含在订单信息中,有透传需求请使用该字段!!!
支付接口
csharp
/// <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会进行验签请求,可通过日志查看
.B_Xb08Ao.png)
虚拟支付1.0不会进行验签请求,会直接拉起支付
.CiS7S6NO.png)
2.上报到账事件和消单
INFO
游戏发奖的同时调用该接口上报充值到账事件,同时sdk会进行消单处理,整个支付流程结束。
csharp
/// <summary>
/// 充值到账后上报
/// </summary>
/// <param name="tradeId">订单id</param>
public void TjPayOnAccount(string tradeId)
3. 补单
适用场景:使用sdk支付
INFO
游戏在合适时机调用该接口设置补单回调,sdk会在游戏首次调用和onShow时,触发补单逻辑进行补单
设置补单回调,触发sdk中的补单逻辑。
csharp
/// <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.主动分享
csharp
/// <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
,触发右上角分享时才会调用下面的设置。
csharp
/// <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. 创建
csharp
/// <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. 销毁
csharp
/// <summary>
/// 销毁游戏圈按钮
/// </summary>
public void GameClubButtonDestroy()
3. 隐藏
csharp
/// <summary>
/// 隐藏游戏圈按钮
/// </summary>
public void GameClubButtonHide()
4. 显示
csharp
/// <summary>
/// 显示游戏圈按钮
/// </summary>
public void GameClubButtonShow()
5. 移除按钮的点击事件的监听函数
csharp
/// <summary>
/// 移除游戏圈按钮的点击事件的监听函数
/// </summary>
public void GameClubButtonOffTap()
意见反馈
1. 创建
csharp
/// <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. 销毁
csharp
/// <summary>
/// 销毁意见反馈按钮
/// </summary>
public void FeedbackButtonDestroy()
3. 隐藏
C#
/// <summary>
/// 隐藏意见反馈按钮
/// </summary>
public void FeedbackButtonHide()
4. 显示
csharp
/// <summary>
/// 显示意见反馈按钮
/// </summary>
public void FeedbackButtonShow()
5. 移除按钮的点击事件的监听函数
csharp
/// <summary>
/// 移除意见反馈按钮的点击事件的监听函数
/// </summary>
public void FeedbackButtonOffTap()
其他功能
1.一次性订阅消息通知
需要自己接入微信的订阅功能,接入完毕后。可以使用下面的接口将通知时间(服务器时间单位毫秒,通知时间 = 服务器时间+间隔多长时间收到通知)告诉服务器。服务器根据设置的时间发送消息给玩家。
csharp
/// <summary>
/// 一次性订阅消息通知
/// </summary>
/// <param name="templateId">游戏后台配置的模板id</param>
/// <param name="noticeTime">发送通知的时间戳单位毫秒,为服务器时间</param>
public void SetSubscribe (string templateId, string noticeTime, ReportUserDataCallback callFun)
示例:订阅1小时后收到微信通知
csharp
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
时即为加入了黑名单。
csharp
/// <summary>
/// 获取黑名单数据
/// </summary>
/// <param name="userId">用户唯一标识</param>
/// <param name="callFun">回调ret:true时需根据返回的info中是否有forbidden来判断是否被禁, info返回信息</param>
public void GetBlackConfig(string userId, ReportUserDataCallback callFun = null)
返回值
json
{
"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.客服中心
INFO
使用客服中心,需在后台进行配置
csharp
/// <summary>
/// 打开客服中心
/// </summary>
/// <param name="title">标题</param>
/// <param name="loginId">用户id</param>
public void OpenClientCenter(string title, string loginId)
4. 获取用户信息
csharp
/// <summary>
/// 获取用户微信信息
/// </summary>
/// <param name="type">登录类型1,默认微信</param>
/// <param name="callFun">通知回调</param>
public void GetUserInfo(Wb.LoginType type = Wb.LoginType.TYPE_WX, UserInfoCallback callFun = null)