Unity-渠道接入
<p>[TOC]</p>
<h2>版本记录</h2>
<table>
<thead>
<tr>
<th style="text-align: left;">版本号</th>
<th style="text-align: left;">时间</th>
<th style="text-align: left;">修改内容</th>
<th style="text-align: left;">责任人</th>
<th style="text-align: left;">备注</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">V1.5.1</td>
<td style="text-align: left;">2019/12/25</td>
<td style="text-align: left;">Unity 渠道相关内容添加</td>
<td style="text-align: left;">buck.yu</td>
<td style="text-align: left;">无</td>
</tr>
</tbody>
</table>
<h2>文档介绍</h2>
<blockquote>
<p>该文档主要包含渠道相关接口的接入说明和引导。</p>
</blockquote>
<h2>全局回调接口</h2>
<p>SDK在某些事情发生的时候,会告知游戏,游戏根据自己的业务做相依的逻辑处理。
在初始化完成后,设置全局回调监听</p>
<blockquote>
<p>公版和渠道的全局回调接入一样,该方法只需要接入一次</p>
</blockquote>
<p>```c#</p>
<p>using iDreamsky.MSLD;
......
void Start()
{
......
MSLDSDK.SetEventCallBack(OnSDKEventCallBack);
}
// 全局事件回调
void OnSDKEventCallBack(MSLDSDK.Event eventID, object eventObj)
{
MSLDInfoWindow.Info("收到SDK全局事件回调:" + eventID);
switch (eventID)
{
case MSLDSDK.Event.SwitchAccount:
// SDK内部发生账号切换时,会收到此回调
break;
case MSLDSDK.Event.LogOut:
// SDK内部发生账号登出时,会收到此回调
break;
case MSLDSDK.Event.RedeliveryOrder:
// SDK内部发生补单时,会收到此回调。eventObj为支付结果结构。
break;
case MSLDSDK.Event.PolicyMinorsPaymentLimit:
//V1.4.2 添加,("未成年充值限制,当前不允许充值");
break;
case MSLDSDK.Event.PolicyMinorsPlayTimeLimit:
//V1.4.2 添加,("未成年人游戏时间已到上限");<br />
break;
case MSLDSDK.Event.PolicyVisitorPaymentLimit:
//V1.4.2 添加,("游客账号不允许充值");
break;
case MSLDSDK.Event.PolicyVisitorPlayTimeLimit:
//V1.4.2 添加,("游客账号游戏时间已到上限");
break;
case MSLDSDK.Event.AccountInfoUpdated:
//V1.5.1 添加,用户信息有更新时,会及时触发
MSLDInfoWindow.Info("用户信息更新:" + eventObj ==null?"null":((MSLDAccountNew)eventObj).desc());
break;
default:
//"未知回调:id =" + eventID);
break;
}
}</p>
<pre><code>
## 功能集成
> 调用接口前,都需要先完成sdk初始化操作
### 1.1 渠道登陆
拉起渠道登陆界面,登陆成功返回用户信息。
> 部分渠道,用返回键可以关闭登陆界面,不会给到游戏回调,注意不要把登陆按钮隐藏了。
```c#
using iDreamsky.MSLD.channel;
MSLDChannelManager.Login(null, (MSLDErrorCode code, string msg, MSLDAccount account) =>
{
if (code == MSLDErrorCode.Success)
{
MSLDInfoWindow.Info("渠道登录成功! account:" + account.desc());
}
else if (code == MSLDErrorCode.UIUserClose)
{
MSLDInfoWindow.Info("用户取消渠道登录! code = " + code + " msg = " + msg);
}
else
{
MSLDInfoWindow.Info("渠道登录失败! code:" + code + " msg:" + msg);
}
});</code></pre>
<h3>1.2 渠道支付</h3>
<p>拉起渠道支付界面</p>
<p>```c#
using iDreamsky.MSLD.channel;
using iDreamsky.MSLD.Payment;</p>
<p>public void OnClickPurchase()
{
MSLDProduct product = new MSLDProduct("0", "test01", "测试商品1", "1.23", "人民币" ,"");
MSLDCPInfo cpInfo = new MSLDCPInfo("pid1234", "mchNO123456", cpData,clientInfo , "remarkXXXXX", "subjectXXXXX", "attachXXX");
MSLDPayMethod payMethod = SelectPanel.SelectPanel;
iDreamsky.MSLD.channel.MSLDChannelManager.Pay(product,cpInfo,payMethod, onPayCallback);
}
private void onPayCallback(MSLDErrorCode code, string msg, MSLDPayResult order){
if (MSLDErrorCode.Success == code)
{
MSLDInfoWindow.Info("购买完成 msg = " + msg + "order: " + order.desc());
// 道具下发,要放到全局回调补单,支付结果中进行 或 通过服务器下发
}
else
{
MSLDInfoWindow.Info("购买失败! code = " + code + " msg = " + msg);
}
}</p>
<pre><code>
### 1.3 渠道登出
调用渠道登出接口
> 调用登出接口前,需要通过 '1.10' 判断是否支持
```c#
using iDreamsky.MSLD.channel;
MSLDChannelManager.Logout((MSLDErrorCode code, string msg) =>
{
if (MSLDErrorCode.Success == code)
{
MSLDInfoWindow.Info("渠道登出成功");
}
else
{
MSLDInfoWindow.Info("渠道登出失败! code = " + code + " msg = " + msg);
}
});</code></pre>
<h3>1.4 渠道切换账号</h3>
<p>调用渠道切换账号功能</p>
<blockquote>
<p>调用该接口前,需要通过 '1.9' 判断是否支持 </p>
</blockquote>
<p>```c#
using iDreamsky.MSLD.channel;</p>
<p>MSLDChannelManager.SwitchAccount((MSLDErrorCode code, string msg, MSLDAccount account) =>
{
if (code == MSLDErrorCode.Success)
{
MSLDInfoWindow.Info("渠道切换用户成功! account:" + account.desc());
}
else if (code == MSLDErrorCode.UIUserClose)
{
MSLDInfoWindow.Info("用户取消渠道切换用户! code = " + code + " msg = " + msg);
}
else
{
MSLDInfoWindow.Info("渠道切换用户失败! code:" + code + " msg:" + msg);
}
});</p>
<pre><code>
### 1.5 渠道退出游戏
调用渠道退出
> 调用该接口前,需要通过 '1.11' 判断是否支持
```c#
using iDreamsky.MSLD.channel;
MSLDChannelManager.Exit((MSLDErrorCode code, string msg) =>
{
if (MSLDErrorCode.Success == code)
{
MSLDInfoWindow.Info("渠道退出成功");
Application.Quit();
}
else
{
MSLDInfoWindow.Info("渠道退出失败! code = " + code + " msg = " + msg);
}
});</code></pre>
<h3>1.6 显示渠道悬浮窗</h3>
<p>调用渠道悬浮窗接口,没有悬浮窗的渠道,调用不显示</p>
<p>```c#
using iDreamsky.MSLD.channel;</p>
<p>MSLDChannelManager.ShowFloatView((MSLDErrorCode code, string msg) =>
{
if (MSLDErrorCode.Success == code)
{
MSLDInfoWindow.Info("渠道打开悬浮窗成功");
}
else
{
MSLDInfoWindow.Info("渠道打开悬浮窗失败! code = " + code + " msg = " + msg);
}
});</p>
<pre><code>
### 1.7 隐藏渠道悬浮窗
隐藏渠道悬浮窗
```c#
using iDreamsky.MSLD.channel;
MSLDChannelManager.DmissFloatView((MSLDErrorCode code, string msg) =>
{
if (MSLDErrorCode.Success == code)
{
MSLDInfoWindow.Info("渠道关闭悬浮窗成功");
}
else
{
MSLDInfoWindow.Info("渠道关闭悬浮窗失败! code = " + code + " msg = " + msg);
}
});</code></pre>
<h3>1.8 上报游戏信息</h3>
<p>上报游戏信息到渠道</p>
<blockquote>
<p>该接口必须所有类型(ChannelReportType)都要正确调用,否者影响支付等接口</p>
</blockquote>
<p>```c#
using iDreamsky.MSLD.channel;
using iDreamsky.MSLD;</p>
<p>MSLDChannelReport report = new MSLDChannelReport();
report.reportType ="" + ChannelReportType.RoleCreate; // 上报类型
report.roleId = "role_id_test";
report.roleLevel = "role_level_23";
report.roleName = "role_name_test";
report.roleCreateTime = "2019";
report.serverId = "role_name_server_id";
report.serverName = "server_name";
report.combatValue = "100";
report.pointValue = "50";
report.pointBalance = "50";
report.pointVip = "50";
report.pointParty = "50";
report.zoneId = "123";
report.zoneName = "";</p>
<p>MSLDChannelManager.Report(report, (MSLDErrorCode code, string msg) =>
{
if (MSLDErrorCode.Success == code)
{
MSLDInfoWindow.Info("渠道上报成功");
}
else
{
MSLDInfoWindow.Info("渠道上报失败! code = " + code + " msg = " + msg);
}
});</p>
<pre><code>
### 1.9 是否支持切换账号
判断是否支持切换账号
```c#
using iDreamsky.MSLD.channel;
bool value = MSLDChannelManager.IsSupportSwitchAccount();
</code></pre>
<h3>1.10 是否支持登出</h3>
<p>判断是否支持登出</p>
<p>```c#
using iDreamsky.MSLD.channel;</p>
<p>bool value = MSLDChannelManager.IsSupportLogout();</p>
<pre><code>
### 1.11 是否支持退出游戏
判断是否支持退出渠道游戏
```c#
using iDreamsky.MSLD.channel;
bool value = MSLDChannelManager.IsSupportExit();
</code></pre>
<h3>1.12 是否支持获取认证信息</h3>
<p>判断是否支持获取认证信息</p>
<p>```c#
using iDreamsky.MSLD.channel;</p>
<p>bool value = MSLDChannelManager.IsSupportGetCertification();</p>
<pre><code>
### 1.13 是否支持显示实名认证
判断是否支持实名认证界面
```c#
using iDreamsky.MSLD.channel;
bool value = MSLDChannelManager.IsSupportCertification();
</code></pre>
<h3>1.14 调用渠道实名认证</h3>
<p>显示渠道认证界面</p>
<blockquote>
<p>调用该接口,需要通过 ‘1.13’ 判断是否支持</p>
</blockquote>
<p>```c#
using iDreamsky.MSLD.channel;</p>
<p>MSLDChannelManager.ShowCertificationView((MSLDErrorCode code, string msg, string data) =>
{
if (code == MSLDErrorCode.Success)
{
MSLDInfoWindow.Info("实名认证完成! \ncode = " + code + "\nmsg = " + msg + "\n data = " + data);
}
else
{
MSLDInfoWindow.Info("实名认证失败! \ncode = " + code + "\nmsg = " + msg + "\n data = " + data);
}
});</p>
<pre><code>
### 1.15 获取实名认证信息
成功返回实名认证结果信息,通过type判断。
```c#
public void OnClickLGetCertificationogout()
{
MSLDChannelManager.GetCertificationInfo((MSLDErrorCode code, string msg, CertificationType type) =>
{
if(code == MSLDErrorCode.Success){
MSLDInfoWindow.Info("获取渠道认证:" + getCeriftiStr(type));
}
else{
MSLDInfoWindow.Info("获取认证结果失败:" + "\ncode = " + code + "\nmsg = " + msg);
}
});
}
private string getCeriftiStr(CertificationType type)
{
string rstr = "unknow";
switch (type)
{
case CertificationType.KEY_CHANNEL_CERTIFICATION_UNNAMED:
rstr = "未实名认证";
break;
case CertificationType.KEY_CHANNEL_CERTIFICATION_CHILDREN:
rstr = "已实名认证,用户未成年";
break;
case CertificationType.KEY_CHANNEL_CERTIFICATION_ADULT:
rstr = "已实名认证,用户已成年";
break;
}
return rstr + ",type =" + type;
}
</code></pre>