抖音小游戏SDK文档
<p>[TOC]</p>
<h1>SDK介绍</h1>
<p>SDK集成封装了部分的抖音的前端API,直接调用SDK接口即可,无需再调用抖音的接口;
<font color="red">无需调用获取主体access_token接口</font>,由我方提供接口获取,以免冲突;</p>
<h1>版本和渠道设置说明:</h1>
<p>SDK可以区分渠道和子渠道
(1)场景值做为渠道,SDK会自动通过tt.getLaunchOptionsSync().scene获取获取当前小程序场景:chid=场景值;
(2)子渠道可以在启动参数(query)按照以下格式设置参数:
via=子渠道ID或者 subchid=子渠道ID,
示例:via=111&bbb=222
渠道只能二选一,via优先subchid</p>
<h1>小游戏后台必设置:</h1>
<p>域名:https: 配置文件提供的域名地址</p>
<h2>小游戏后台</h2>
<h3>(1)域名设置</h3>
<p>在开发->开发设置->服务器域名,request合法域名增加
<code>cps.moyangmoyang.com</code></p>
<h3>(2)广告设置(如内置广告必设置)</h3>
<p>在推广->流量主->广告位管理,添加banner广告和激励视频广告,获得广告位id</p>
<h3>(3)支付设置(如开通支付必设置)</h3>
<p>在功能->虚拟支付->基本配置->游戏币配置,配置米大师相关信息</p>
<h3>(4)消息推送</h3>
<p>登录小程序后台后,在「开发」-「开发设置」-「消息推送」中,管理员扫码启用消息服务,填写服务器地址(URL)、令牌(Token) 和 消息加密密钥(EncodingAESKey)等信息。
URL: 开发者用来接收微信消息和事件的接口 URL。开发者所填写的URL 必须以 http:// 或 https:// 开头,分别支持 80 端口和 443 端口。
Token: 可由开发者可以任意填写,用作生成签名(该 Token 会和接口 URL 中包含的 Token 进行比对,从而验证安全性)。
EncodingAESKey: 由开发者手动填写或随机生成,将用作消息体加解密密钥。</p>
<h1>1.SDK包以及引入说明(重要):</h1>
<h2>1.1.SDK文件包括</h2>
<pre><code> sdk_v版本号.js(主文件)
config.js(配置文件,接入前会提供参数表,没有参数不能接入,文档中的所有密钥指的是我们提供的研发密钥,非小程序密钥,加号或者点号表示拼接两个字符串)</code></pre>
<p><div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
配置文件config.js必须按照提供的资料填写完整,没有参数不能接入,文档中的所有密钥指的是我们提供的研发密钥,非小程序密钥,加号或者点号表示拼接两个字符串
</div></p>
<h2>1.2.SDK引入方式</h2>
<pre><code>require(&quot;./js/sdk/dybsdk_v版本号.js&quot;);
//不同的引擎可能引入方式不一致,根据需求可以自行拆解拷贝。</code></pre>
<h2>1.3.接口请求方式</h2>
<p>全部POST,支持JSON和FORM,声明header格式content-type,返回的格式,如无特殊说明,code的值1为正确,0为错误</p>
<h2>1.4.安全</h2>
<p>涉及到服务端请求的接口,如access_token等全部要在后端进行请求,平台提供的密钥secret_key,必须放在服务端后端校验,不能暴露在前端,前端代码会被爬下来破解加密。</p>
<h2>1.5.接入有问题先看文档后面的常见问题</h2>
<h1>2.获取用户信息(为确保数据同步,游戏初始化必接入,打开游戏即调用)</h1>
<h2>2.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍获取openid,无需再单独调用login接口。</p>
<p><code>getDybUserInfo(function callback)</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
(1)整个游戏流程只能全局初始化的时候调用一次即可,不能重复调用。
重复调用可能会刷新,session_key,access_token,影响支付授权。
(2)<font color="red">保证先接入此接口,再接入后续接口,后续接口依赖于此接口,后续接口调用可放在此接口回调函数里面,或延迟调用,不要并行</font>
(3)此接口调用login授权获取openid,如需头像等信息请自行使用原生接口userInfo获取信息接口,但是保证不能调用到tt.login
</div>
<div style="background: #fda7b4;padding: 12px; border-radius: 8px; color: #000;">⚡ <strong>校验安全</strong>
1、为了防止openid泄露被直接用于游戏接口请求,授权返回的数据中有2个字段用于游戏方后端校验用户正确性-(openid, sign)
2、返回签名sign的生成方式为:<font color="red">md5('sessV2'+appid+openid+加密密钥key)</font>, 加密密钥平台方提供,+号拼接字符串
</div></p>
<h2>2.2参数说明</h2>
<ul>
<li>无需传参</li>
</ul>
<h2>2.3示例代码</h2>
<pre><code class="language-javascript">dyb.getDybUserInfo(function (callback) {
console.log(&#039;getDyUserInfo-------------:&#039; + JSON.stringify(callback));
})</code></pre>
<h2>2.4接口返回</h2>
<pre><code class="language-javascript">getDyUserInfo-------------:{&quot;user&quot;:{&quot;openid&quot;:&quot;_000tSU1U4sQNo0lzULmCcewwj1ejdD0jMQe&quot;,&quot;sign&quot;:&quot;ecebeb265bb64dba8c34e99077fdcb3a&quot;},&quot;shareInfo&quot;:{}}</code></pre>
<h1>3.创角信息上报</h1>
<h2>3.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍上报创角事件</p>
<pre><code>createRole(function callback)</code></pre>
<p></div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
第一次调用依赖第2步-获取用户信息,建议创角上报在授权事件后3-5s后调起
</div></p>
<h2>3.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|role_name |是 |string |角色名称,没有填个昵称或者别的信息 |
|server_id |是 |int | 区服ID,没有填个默认数字 |
|server_name |否 |string | 区服名称,没有填个默认名称 |</p>
<h2>3.3示例代码</h2>
<pre><code class="language-javascript">let param = {
server_id: 1,
server_name: &#039;服务器&#039;,
role_name: &#039;默认昵称&#039;,
}
dyb.createRole(param, function (callback) {
console.log(&#039;roleData:&#039; + JSON.stringify(callback));
});</code></pre>
<h2>3.4接口返回</h2>
<pre><code class="language-javascript">roleData:{&quot;code&quot;:1,&quot;msg&quot;:&quot;角色已经上报&quot;,&quot;time&quot;:&quot;1586418685&quot;,&quot;data&quot;:null}</code></pre>
<h1>4.游戏关卡/等级</h1>
<h2>4.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍上报当前玩家所在的游戏关卡/等级;
(1)可以在玩家退出的时候进行上报最新的关卡/等级;
(2)也可以在玩家突破关卡/等级的时候上报</p>
<p><code>1、上报关卡:gameLevel(int level, callback)</code>
<code>2、上报等级:gameGrade(int grade, callback)</code>
<font color="red">如果两个接口需要同时调用,需确保其中一个先调用,另一个可放在回调函数里面调用,或延迟调用,不要并行</font>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
第一次调用依赖第2步-获取用户信息,建议在授权事件后3-5s后调起
</div></p>
<h2>4.2参数说明</h2>
<p><strong>上报关卡:</strong></p>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|level |是 |int |关卡 |</p>
<p><strong>上报等级:</strong></p>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|grade |是 |int |等级 |</p>
<h2>4.3示例代码</h2>
<pre><code class="language-javascript">//上报关卡:
//关卡2
dyb.gameLevel(2,function (callback) {
console.log(&#039;game_level:&#039; + JSON.stringify(callback));
});
//上报等级:
//等级3
dyb.gameGrade(3, function (callback) {
console.log(&#039;game_grade:&#039; + JSON.stringify(callback));
});</code></pre>
<h2>4.4接口返回</h2>
<pre><code class="language-javascript">{
&quot;code&quot;: 1, //0调用失败,1调用成功
&quot;msg&quot;: &quot;成功&quot;
}</code></pre>
<h1>5.内容检测接口</h1>
<h2>5.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍检查玩家输入的文本内容内容是否违规(游戏内有玩家自由输入内容必接)</p>
<p><code>msg_check()</code>
</div></p>
<h2>5.2示例代码</h2>
<pre><code class="language-javascript">dyb.msg_check(&#039;特3456书yuuo莞6543李zxcz蒜7782法fgnv级&#039;,function (callback)
{
console.log(&#039;内容检测:&#039; + JSON.stringify(callback));
});</code></pre>
<h2>5.3接口返回</h2>
<pre><code class="language-javascript">{
&quot;code&quot;: 1, //(0检验失败,1检验通过)
&quot;msg&quot;: &quot;&quot;
}</code></pre>
<h1>6.支付接口(安卓+ios)</h1>
<h2>6.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍小游戏订单提交,生成支付订单并保存,调用支付后,<font color="red">游戏发货必须以服务端支付回调为准</font>。</p>
<p><code>submitOrder(Object param, callback)</code>
</div></p>
<h2>6.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|goods_count |是 |int |商品数量 由接入方提供 如:1 |
|goods_name |是 |string |商品名称 由接入方提供 如:元宝 |
|pay_amount |是 |int |支付总金额(元)=单价乘数量,由接入方提供,整数 |
|redirect_uri |是 |string |异步通知游戏支付结果地址 由接入方提供 |
|extra_info |是 |string |额外拓展参数(将在服务端支付回调原样透传),可以为空字符串,a=b&c=d |
|order_sn |是 |string |订单编号(游戏生成的订单号) |
|role_name |是 |string |角色名称 由接入方提供 |
|server_name |是 |string |区服名称 由接入方提供 |</p>
<h2>6.3示例代码</h2>
<pre><code class="language-javascript">let pay_data = {
pay_amount:1,
extra_info: &#039;a=b&#039;,
goods_count: 1,
goods_name: &#039;测试商品&#039;,
redirect_uri: &#039;http://nginx56.local/test&#039;,
role_name: &#039;无角色&#039;,
server_name: &#039;默认服务器&#039;,
order_sn: randomNumber(),
}
dyb.submitOrder(pay_data, function (callback) {
console.log(&#039;生成订单:&#039; + JSON.stringify(callback));
});</code></pre>
<h2>6.4接口返回</h2>
<pre><code class="language-javascript">//1.安卓+ios(钻石支付)
{
&quot;code&quot;: 1, //(0失败,直接提示,1调用成功)//此处仅提供前端参考,游戏发货必须以服务端支付回调为准
&quot;msg&quot;: &quot;成功&quot;
}
//2.ios弹窗支付(备用)
//注意:研发需要获取到pay_url后,在游戏内提醒玩家复制支付链接到微信打开进行支付
//(研发自己制作弹窗)&quot;pay_type&quot;:2000
生成订单:{&quot;code&quot;:1,&quot;msg&quot;:&quot;支付链接获取成功&quot;,&quot;pay_url&quot;:&quot;weixin://wxpay/bizpayurl?pr=CDqOLhfz2&quot;,&quot;pay_type&quot;:2000}
//(SDK自带弹窗)&quot;pay_type&quot;:2001
生成订单:{&quot;code&quot;:1,&quot;msg&quot;:&quot;支付链接获取成功&quot;,&quot;pay_url&quot;:&quot;weixin://wxpay/bizpayurl?pr=EABWvzxz2&quot;,&quot;pay_type&quot;:2001}
**建议研发根据code和pay_type判断弹窗类型</code></pre>
<h1>7.支付成功回调通知(服务端接口)</h1>
<h2>7.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍
1.回调地址在客户端调用支付接口时传入,字段<font color="red">redirect_uri</font>。
2.回调方式为POST(请使用post方式接收回调值),数据提交为表单方式(Content-Type: application/x-www-form-urlencoded)
3.此接口地址由游戏服务方提供,用于接收用户支付结果的接口,控制游戏内发货,2S不响应则超时,做好过滤,防止重复通知
</div></p>
<h2>7.2回调参数说明(post)</h2>
<p>|参数名|说明|
|:---- |----- |
|order_sn |订单编号(游戏的订单号) |
|extra_info |透传参数(原样返回,游戏在创建订单时传入,不允许有空格) |
|pay_amount |订单金额(单位:元,double类型,精确到小数点后两位)一定要校验价格 |
|pay_status |订单支付状态(1或0;1为成功支付,0为未支付) |
|pay_time |支付时间(若为三方或渠道支付,此时间为平台接收到支付成功时间) |
|uid |用户的唯一id,与客户端的openid字段相同 |
|goods_name |小游戏道具名字(商品名字) |
|appid |小游戏appid |
|sign |签名(为了安全,请校验签名)签名规则看回调签名 |</p>
<h2>7.3回调签名</h2>
<pre><code class="language-javascript">1)去除sign,其他所有POST的参数均参与签名,签名不需要转化大小写
2)参数名进行升序排序后
3)按照key1=val1&amp;key2=val2&amp;key3=val3格式生成源字符串。
4)md5(源字符串+加密secret_key)生成签名sign; key1=val1&amp;key2=val2&amp;key3=val3secret_key
签名示例:
假设现有参数为:{&quot;order_sn&quot;:&quot;1603702733183568507&quot;,&quot;extra_info&quot;:&quot;&quot;,&quot;goods_identifier&quot;:&quot;f4355f16858fc0244ea74ac540581148&quot;,&quot;pay_amount&quot;:&quot;1.00&quot;,&quot;pay_status&quot;:1,&quot;pay_time&quot;:1603702732,&quot;uid&quot;:&quot;09122E14E6DE6E81F493000A15121368&quot;}
密钥为:ibIa4rDIxHnT1uw
参数名排序后拼接的字符串为:extra_info=&amp;goods_identifier=f4355f16858fc0244ea74ac540581148&amp;order_sn=1603702733183568507&amp;pay_amount=1.00&amp;pay_status=1&amp;pay_time=1603702732&amp;uid=09122E14E6DE6E81F493000A15121368ibIa4rDIxHnT1uw
Sha1加密为:aa5eff8b0c74764909550daf5e908cbc1fd72ea9
Md5加密为:3762f09a6804ec6aed26955854c6f7ee</code></pre>
<h2>7.4回调返回(json)</h2>
<pre><code class="language-javascript">1.游戏服务端在收到回调后,返回{&quot;code&quot;:0,&quot;message&quot;:&quot;success&quot;}代表游戏发货成功。其他code码,游戏服务端自己定义。
2.可能存在重复通知的情况,如果已经发货成功,也请直接返回{&quot;code&quot;:0,&quot;message&quot;:&quot;success&quot;}。</code></pre>
<h1>8.激励视频广告</h1>
<h2>8.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍创建激励视频接口</p>
<p><code>createVideoAd(string auditID, callback)</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
调用一次,拉起一次广告,游戏需要根据回调状态处理奖励的发送
</div></p>
<h2>8.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|auditID |是 |string |视频广告ID,小程序后台生成 |</p>
<h2>8.3示例代码</h2>
<pre><code class="language-javascript">dyb.createVideoAd(&#039;8qodec75r8m7j1orib&#039;,function(call){
//call返回的state有三种状态,分别是show,close,error
//show {&quot;state&quot;:&quot;show&quot;,&quot;isEnded&quot;:false,&quot;msg&quot;:&quot;视频展示成功&quot;}
//close {&quot;state&quot;:&quot;close&quot;,&quot;isEnded&quot;:true,&quot;msg&quot;:&quot;视频广告关闭&quot;}
//error {&quot;state&quot;:&quot;error&quot;,&quot;isEnded&quot;:false,&quot;msg&quot;:&quot;视频广告错误&quot;}
console.log(JSON.stringify(call),&#039;createRewardedVideoAd&#039;)
if(call.state == &#039;close&#039; &amp;&amp; call.isEnded){
//视频完整看完,进行发送奖励
console.log(&#039;//视频完整看完,进行发送奖励&#039;)
}else{
console.log(&#039;//视频没看完&#039;)
}
})</code></pre>
<h1>9.获取Access_token(服务端接口),用了接,不用不接</h1>
<h2>9.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍获取access_token</p>
<p><code>POST</code>
<code>正式url: 域名/api/get_access_token</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
1.注意当前小程序的环境,接口网络请求https地址是否一致
2.服务端调用,小程序客户端存在代码泄露的可能
</div></p>
<h2>9.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|appid |是 |string |当前小游戏appid |
|sign |是 |string |md5(appid+$secret_key),拼接字符串 |</p>
<p><div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
sign里面的$secret_key是我们提供的加密密钥,不是小程序密钥
</div></p>
<h2>9.3接口返回</h2>
<pre><code class="language-javascript">{
&quot;code&quot;: 1,
&quot;msg&quot;: &quot;success&quot;,
&quot;time&quot;: &quot;1570699736&quot;,
&quot;expire_time&quot;: &quot;1570699736&quot;,//token过期时间
&quot;data&quot;: &quot;-YNu_X95paOMRR1v7horGPfnEJ09ldMcgRrQFgI18uzJMzGAAtCYbWXpYkQQ1NHjsm8&quot; //token
}</code></pre>
<h1>10.获取session_key(服务端接口),用了接,不用不接</h1>
<h2>10.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍获取session_key</p>
<p><code>POST</code>
<code>正式url: 域名/api/ get_session_list</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
1.注意当前小程序的环境,接口网络请求https地址是否一致
2.服务端调用,小程序客户端存在代码泄露的可能
</div></p>
<h2>10.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|appid |是 |string |当前小游戏appid |
|openid |是 |string |用户openid字符串,多个用英文逗号链接,(34D015FCDA78A87A07FA5CF3B5276532,34D015FCDA78A87A07FA5CF3B5276531) |
|sign |是 |string |md5(appid+$secret_key),拼接字符串 |</p>
<p><div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
sign里面的$secret_key是我们提供的加密密钥,不是小程序密钥
</div></p>
<h2>10.3接口返回</h2>
<pre><code class="language-javascript">{
&quot;code&quot;: 1,
&quot;msg&quot;: &quot;success&quot;,
&quot;time&quot;: &quot;1570699736&quot;,
&quot;data&quot;:[
{&quot;uid&quot;:&quot;34D015FCDA78A87A07FA5CF3B5276532&quot;,&quot;session_key&quot;:&quot;MFBTT2o1aExUSHF1Y1VBUg==&quot;},
{&quot;uid&quot;:&quot;34D015FCDA78A87A07FA5CF3B5276531&quot;,&quot;session_key&quot;:null}
]
}</code></pre>
<h1>11.手动录制游戏</h1>
<h2>11.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍手动录制游戏</p>
<p><code>1、开始录屏:startScreenRecord</code>
<code>2、结束录屏: stopScreenRecord</code>
</div></p>
<h2>11.2示例代码</h2>
<pre><code class="language-javascript">//1、录屏开始
dyb.startScreenRecord(function (callback) {
console.log(&#039;录屏开始:&#039; + JSON.stringify(callback));
});
//2、录屏结束
dyb.stopScreenRecord(function (callback) {
console.log(&#039;录屏结束:&#039; + JSON.stringify(callback));
});</code></pre>
<h2>11.3接口返回</h2>
<pre><code class="language-javascript">//开始
录屏开始:{&quot;code&quot;:2,&quot;msg&quot;:&quot;录屏开始&quot;}
//结束
录屏结束:{&quot;code&quot;:3,&quot;msg&quot;:&quot;录制完成&quot;,&quot;record_url&quot;:&quot;ttfile://temp/shareVideo.mp4&quot;}</code></pre>
<p><div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
录屏结束后会返回录屏地址record_url;
sdk已经设置了本地缓存<font color="red">dybRecordUrl</font>, 无需重复设置
</div></p>
<h1>12.分享录屏</h1>
<h2>12.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍分享玩家录屏</p>
<p><code>shareRecordScreen (function callback)</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
玩家录屏完成后,从已设置的本地缓存dybRecordUr获取路径分享录屏
</div></p>
<h2>12.2示例代码</h2>
<pre><code class="language-javascript">dyb.shareRecordScreen(function (call) {
console.log(JSON.stringify(call), &#039;分享录屏&#039;)
})</code></pre>
<h2>12.3接口返回</h2>
<pre><code class="language-javascript">{&quot;code&quot;:1,&quot;msg&quot;:&quot;分享成功&quot;,&quot;res&quot;:{&quot;errMsg&quot;:&quot;shareAppMessage:ok&quot;,&quot;videoId&quot;:&quot;131011160f7c4d30040643400c281031525d4446677d4663555243410b7b46605f5645400f7a4c63&quot;}} 分享录屏</code></pre>
<h1>13.添加桌面</h1>
<h2>13.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍将小游戏快捷方式添加到手机桌面上</p>
<p><code>addShortcut (function callback)</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
该 API 必须要由用户点击触发,安卓系统已判断是否已经添加(仅支持安卓)到手机桌面上
</div></p>
<h2>13.2示例代码</h2>
<pre><code class="language-javascript">dyb.addShortcut(function (callback) {
console.log(&#039;添加桌面:&#039; + JSON.stringify(callback));
})</code></pre>
<h2>13.3接口返回</h2>
<pre><code class="language-javascript">{
&quot;code&quot;: 1, //(0添加失败,1添加成功,2已经添加(仅安卓设备))
&quot;msg&quot;: &quot;&quot;
}</code></pre>
<h1>14.主动分享</h1>
<h2>14.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍通过按钮主动拉起分享</p>
<p><code>share(Object param, callback)</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
1.在游戏内用户通过按钮触发分享
2.如需其他类型分享可调用原生接口
</div></p>
<h2>14.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|title |是 |string |分享标题 |
|desc |是 |string |分享描述 |
|imageUrl |是 |string |转发显示图片的链接,支持本地沙盒目录(ttfile://)或 相对代码包根目录的图片路径,不支持网络图片路径。显示图片长宽比推荐 5:4,不传或使用网络图片路径则默认使用小游戏 icon |
|query |否 |string |查询字符串,即小游戏的启动参数,必须是 key1=val1&key2=val2 的格式,SDK已使用了(chid,subchid,shareid,sharetype) |</p>
<h2>14.3示例代码</h2>
<pre><code class="language-javascript">var param = {
title: &#039;测试title&#039;,
desc: &#039;测试desc&#039;,
imageUrl: &#039;&#039;,
query: &#039;a=b&#039;
}
dyb.share(param, function (call) {
console.log(JSON.stringify(call), &#039;主动分享&#039;)
});</code></pre>
<h2>14.4接口返回</h2>
<pre><code class="language-javascript">{
&quot;code&quot;: 1, //0分享失败,1分享成功
&quot;msg&quot;: &quot;分享成功&quot;
}</code></pre>
<h1>15.广告点上报</h1>
<h2>15.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍广告点上报,看广告时调用</p>
<p><code>adNameReward</code>
</div></p>
<h2>15.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|ad_name |是 |string |广告位名称 |
|ad_is_reward |是 |int |是否获得广告奖励 0否,1是(只要看完广告就传1,没看完传0) |</p>
<h2>15.3示例代码</h2>
<pre><code class="language-javascript">//广告未看完
let ad_data = {
ad_name: &#039;广告未看完&#039;,
ad_is_reward: 0, //0未获得奖励,1获得奖励,必传((点击了广告未看完传0))
}
dyb.adNameReward(ad_data, function (callback) {
console.log(&#039;上报广告名称:&#039; + JSON.stringify(callback));
});
//广告看完
let ad_data = {
ad_name: &#039;广告看完&#039;,
ad_is_reward: 1, //0未获得奖励,1获得奖励,必传((只要看完广告就传1))
}
dyb.adNameReward(ad_data, function (callback) {
console.log(&#039;上报广告名称:&#039; + JSON.stringify(callback));
});</code></pre>
<h2>15.4接口返回</h2>
<pre><code class="language-javascript">上报广告名称:{&quot;code&quot;:1,&quot;msg&quot;:&quot;成功&quot;,&quot;time&quot;:&quot;1717141847&quot;,&quot;data&quot;:null}</code></pre>
<h1>16.AB测试</h1>
<p><div style="background: #EE5837;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
AB测试接口需先联系运营添加白名单,否则将不能调用。
</div></p>
<h2>16.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍AB测试上报</p>
<p><code>userBelongTest</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
1.<font color="red">建议</font>在获取到openid后延迟3-5s在调用,<font color="red">必须在创角上报之前</font>调用
2.上报<font color="red">当日新增用户</font>,老用户无需上报
</div></p>
<h2>16.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|belong_num |是 |Int(需>=1的整数)如1,2,3... |AB测试id |</p>
<h2>16.3示例代码</h2>
<pre><code class="language-javascript">//上报AB测试用户
let user_data = {
belong_num: 1,//需&gt;=1的整数如1,2,3...
}
dyb.userBelongTest(user_data, function (callback) {
console.log(&#039;上报Ab测试:&#039; + JSON.stringify(callback));
});</code></pre>
<h2>16.4接口返回</h2>
<pre><code class="language-javascript">上报Ab测试:{&quot;code&quot;:1,&quot;msg&quot;:&quot;成功&quot;,&quot;time&quot;:&quot;1717141847&quot;,&quot;data&quot;:null}</code></pre>