MSSDK

SDK 文档


Unity3D SDK集成文档

<p>[TOC]</p> <h2>变更历史</h2> <table> <thead> <tr> <th>编写日期</th> <th>编写人员</th> <th>版本</th> <th>修改内容</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td>2019.05.18</td> <td>jack.deng</td> <td>1.0.0</td> <td>创建、首次编写</td> <td>无</td> </tr> <tr> <td>2019.06.14</td> <td>fluty.xie</td> <td>1.0.1</td> <td>增加Android Q平台配置,分享配置</td> <td>无</td> </tr> <tr> <td>2019.06.28</td> <td>jack.deng</td> <td>1.3.3</td> <td>统一接入方式后,更新iOS的部分。</td> <td>无</td> </tr> <tr> <td>2019.08.15</td> <td>jack.deng</td> <td>1.3.5</td> <td>新增用户反馈问卷调查模块的描述</td> <td>无</td> </tr> <tr> <td>2019.09.26</td> <td>buck.yu</td> <td>1.3.9</td> <td>新增Android自动打包说明补充</td> <td>无</td> </tr> <tr> <td>2019.09.26</td> <td>jack.deng</td> <td>1.4.1</td> <td>1.有自动脚本之后,自动配置的部分有脚本实现,不需要用户操作,删除掉。2.新增Android热更新的说明</td> <td>无</td> </tr> <tr> <td>2019.11.07</td> <td>buck.yu</td> <td>1.4.1.2</td> <td>添加用户隐私协议ui接口,添加获取自定义配置接口</td> <td>无</td> </tr> <tr> <td>2019.11.25</td> <td>buck.yu</td> <td>1.4.2</td> <td>广告追踪接口,政策需求全局回调新增</td> <td>无</td> </tr> <tr> <td>2019.12.11</td> <td>buck.yu</td> <td>1.5.0</td> <td>同步微信用户信息,lbs功能获取附近的人</td> <td>无</td> </tr> <tr> <td>2019.12.25</td> <td>buck.yu</td> <td>1.5.1</td> <td>1、增加用户信息更新全局事件通知;2、增加渠道实名认证接口;3、支持客户端传入支付回调地址</td> <td>无</td> </tr> <tr> <td>2020.01.08</td> <td>buck.yu</td> <td>1.6.0</td> <td>1、集成jpus; 2、lbs/获取当前位置</td> <td>无</td> </tr> <tr> <td>2020.01.18</td> <td>buck.yu</td> <td>1.7.0</td> <td>1、更新微信 手q sdk 2、新增兑换码功能</td> <td>无</td> </tr> <tr> <td>2020.03.1</td> <td>buck.yu</td> <td>1.8.0</td> <td>1、修复社区崩溃 2、增加直播接口 3、增加获取联系人</td> <td>无</td> </tr> <tr> <td>2020.01.18</td> <td>buck.yu</td> <td>1.9.0</td> <td>1、新增微博分享 2、新增lbs授权接口</td> <td>无</td> </tr> <tr> <td>2020.03.30</td> <td>buck.yu</td> <td>1.9.3</td> <td>集成OpenInstall支持</td> <td>无</td> </tr> </tbody> </table> <h2>重要信息</h2> <ul> <li> <p>在接入SDK之前,需要在我们后台申请账号并且创建应用参数,具体可以参考 <a href="https://www.showdoc.cc/mssdk?page_id=2692703335764519">技术中台服务接入指南</a> 文档。</p> </li> <li> <p>在接入过程中遇到任何问题或者有不清楚的地方,请 <a href="https://www.showdoc.cc/mssdk?page_id=2615409307929897">联系我们</a>.</p> </li> <li>开发者接入SDK完成后,可以按照我们提供的测试用例进行自测。测试用例如下: <img src="https://github.com/veryitman/MSSDKResource/blob/mark-feature/sdk_test_case.png?raw=true" alt="" /></li> </ul> <p>该文档写了如何集成乐逗公版的方法,如果要出乐逗外的渠道包可以参考 <a href="https://www.showdoc.cc/mssdk?page_id=3651814975352989">Unity 渠道接入</a> 文档;</p> <h2>1. Unity SDK 简介</h2> <p>针对Unity游戏开发者,接入原生SDK(iOS/Android)虽然能够正常使用SDK的所有功能,考虑到很多工作室都使用Unity引擎做游戏开发,因此,中台在原生SDK的基础上,开发了Unity版本的SDK,使用Unity的游戏开发者只需要关心自己的业务逻辑,进一步降低开发成本。</p> <h3>1.1 Unity SDK 特点</h3> <p>Unity SDK在原生SDK基础上实现了以下功能:</p> <ul> <li> <p><strong>接口业务层封装</strong> 原生SDK为了灵活性需要,采用了通用参数的设计方案,即传入参数为字典类型,字典的含义通过文档说明。输出的结果为id/Object这种通用类型。使用时虽然比较灵活,但是并不清晰,业务方通常需要查询相应的文档,才能知道需要传入什么参数以及接口会返回什么类型。Unity接口在此基础上,做了业务级封装,使用时,业务根据具体业务需求,明确调用特定接口,传入业务相关参数,返回时,也明确返回C#的对象。对象结构和内容在业务层清晰可见,无需翻阅文档。</p> </li> <li> <p><strong>封装Unity和Native的通信过程</strong> 接入Native SDK,需要实现Native端和C#端的双向通信。这种通信过程,不是游戏业务相关的内容,属于平台相关的内容。不应该让游戏开发者关心。因此,Unity SDK封装了相关的通信技术细节,只需要在业务层调用C#业务相关的接口,就可以实现相应的功能。不必维护和实现这些底层的通信机制。</p> </li> <li><strong>自动配置平台相关的一些信息</strong> 对于平台接入,通常需要配置平台相关的一些内容,诸如iOS的添加Framework,添加编译参数之类的工作。这些工作也是和接入SDK相关的工作,并不属于业务方,Unity SDK结合Unity本身的机制,帮助开发者自动完成相应的内容,简化了接入相关的工作。</li> </ul> <p>因此对于普通的Unity游戏开发者,极力推荐使用Unity SDK。</p> <h3>1.2 特别注意</h3> <p><strong>特别注意:如果开发者的应用有服务器(如强登录的APP)资源可以考虑在服务端接入我们的相关接口,这样可以保证登录和支付的安全。具体接入文档可以查看 <a href="https://www.showdoc.cc/mssdk?page_id=2640157465255050">MSSDK 服务端接入文档</a></strong></p> <p><strong>该集成文档讲解了接入乐逗公版的方法,渠道接入和集成可以参考<a href="https://www.showdoc.cc/mssdk?page_id=3651814975352989">渠道接入</a>文档。</strong></p> <h2>2. 集成 Unity SDK</h2> <h3>2.1 获取 Unity SDK 包</h3> <p>请 <a href="https://www.showdoc.cc/mssdk?page_id=2615409307929897">联系我们</a> 获取SDK</p> <h4>Unity SDK 包结构</h4> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/31b68d3ed7dfa73dc9abf966df5d0617?showdoc=.jpg" alt="" /></p> <p><strong>Doc文件夹</strong> 此文件夹包含了SDK的相关文档。其中API文件夹为API文档。双击index.html,可以查看API说明。</p> <p><strong>MSLDSDK.unitypackage</strong></p> <p>MSLD SDK Unity包。包中包含iOS和android的Native SDK以及一些配置。</p> <p><strong>MSLDSDKSample.unitypackage</strong></p> <p>Sample。展示如何调用MSLD SDK接口实现相关功能。可以导入此包,参考调用方式。</p> <h3>2.2 导入 MSLDSDK.unitypackage 到Unity工程</h3> <p>双击 <code>MSLDSDK.unitypackage</code>,即可打开导入界面。点击“import”。导入所有文件。</p> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/ad17be8715533b4728753e50d4e8ef34?showdoc=.jpg" alt="" /></p> <h3>2.3 SDK集成</h3> <h4>2.3.1 申请SDK配置</h4> <ul> <li>进入<a href="http://biz.cloud.idreamsky.com">微服务业务控制台</a>,创建应用。根据应用情况配置好相应的内容。</li> <li>下载SDK配置文件msConfig.json到本地。 <img src="https://www.showdoc.cc/server/api/common/visitfile/sign/36b54eae086135c849e8f7417f832947?showdoc=.jpg" alt="" /></li> </ul> <h4>2.3.2 配置SDK</h4> <h5>iOS平台</h5> <p>将下载的配置文件 msConfig.json 放入Unity工程目录下的 Assets/Plugins/iDreamsky/msld/iOS 目录下.</p> <h5>Android平台</h5> <p>将下载的配置文件 msConfig.json 放入Unity工程目录下的 Assets/Plugins/iDreamsky/msld/Android 目录下. 填写正确的分享,支付参数等,在1.3.9以后,自动导出工程时,需要读取配置</p> <h4>2.3.3 公共逻辑集成</h4> <h5>2.3.3.1 初始化SDK</h5> <p>在游戏启动时,调用 MSLDSDK.Init(APICallBack callback)方法。callback为初始化的异步返回结果。</p> <p>```C# using iDreamsky.MSLD; ......</p> <p>void Start() { MSLDSDK.InitSDK(InitSDKCallBack); ...... }</p> <p>void InitSDKCallBack(MSLDErrorCode code, string msg) { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info(&quot;初始化成功!&quot;); } else { MSLDInfoWindow.Info(&quot;初始化失败! code = &quot; + code + &quot; msg = &quot; + msg); } }</p> <pre><code> ##### 2.3.3.2 设置全局回调监听 SDK在某些事情发生的时候,会告知游戏,游戏根据自己的业务做相依的逻辑处理。 在初始化完成后,设置全局回调监听。 SDK V1.4.2加入未成年,游客政策限制,全局回调中新增4个回调类型(查看示例) ```C# 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 添加,("未成年人游戏时间已到上限"); 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; case MSLDSDK.Event.OpenInstallWakeupWithParam: //1.9.3 添加,从OpenInstall链接拉起游戏时,会及时触发或得透传参数 MSLDInfoWindow.Info("openInstall拉起数据:" + eventObj == null ? "null" : ((MSLDOpenInstallData)eventObj).desc()); break; default: //"未知回调:id =" + eventID); break; } }</code></pre> <h2>3. 功能集成</h2> <p>游戏根据自己的业务情况,接入相应的功能。目前SDK提供账号系统,支付系统等功能。 <strong>在集成功能之前,请确定完成了2.3.3节公共逻辑的集成部分。</strong></p> <h3><strong> 接入注意事项 </strong></h3> <ul> <li>渠道登陆接口,部分渠道关闭登陆面板并不会有回调到游戏。</li> <li>渠道登出接口,部分渠道并没有登出功能,使用前需要判断是否支持。</li> </ul> <h3>3.1 集成账号系统</h3> <p>账号系统相关的功能,在 MSLDAccountManager 类中。使用时请导入相应的命名空间 </p> <p>```C# using iDeramsky.MSLD.Account;</p> <pre><code> #### 3.1.1 登录面板 ##### 3.1.1.1 普通登录面板 调用MSLDAccountManager.ShowLoginPannel(APICallBack&lt;MSLDAccount&gt; callback),可呼出登录面板。 ```C# using iDreamsky.MSLD; using iDreamsky.MSLD.Account; ...... MSLDAccountManager.ShowLoginPannel((MSLDErrorCode code, string msg, MSLDAccount account) =&gt; { 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> <h5>3.1.1.2 一键登录</h5> <p>SDK内置了一键登录的功能。若配置了一键登录功能且能够正常获取手机号,将在呼出登录面板的流程中优先显示一键登录页面。</p> <p>详细查看文档 <a href="https://www.showdoc.cc/mssdk?page_id=3742980023778348">Unity版极光集成</a> </p> <h4>3.1.2 游客登录</h4> <p>调用MSLDAccountManager.GuestLogin(APICallBack<MSLDAccount> callback),可调用起游客登录流程。</p> <p>```C# MSLDAccountManager.GuestLogin((MSLDErrorCode code, string msg, MSLDAccount account) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info(&quot;游客登录成功! account:&quot; + account.desc()); } else if (code == MSLDErrorCode.UIUserClose) { MSLDInfoWindow.Info(&quot;用户取消游客登录! code = &quot; + code + &quot; msg = &quot; + msg); } else { MSLDInfoWindow.Info(&quot;游客登录失败! code = &quot; + code + &quot; msg = &quot; + msg); } });</p> <pre><code> #### 3.1.3 自动登录 调用MSLDAccountManager.AutoLogin(APICallBack callback),可调用起游自动登录流程。 自动登录使用上次登录的信息进行登录。如果用户没有上次登录或者登录信息失效,则自动登录会失败。此时应该让用户用别的方式登录。 ```C# using iDreamsky.MSLD; using iDreamsky.MSLD.Account; ...... MSLDAccountManager.AutoLogin(OnAutoLoginCallBack); ...... /* * 自动登录回调 */ void OnAutoLoginCallBack(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> <h4>3.1.4 用户中心</h4> <p>调用MSLDAccountManager.ShowUserCenterPannel(APICallBack callback),可展示用户中心面板。</p> <p>```C# using iDreamsky.MSLD; using iDreamsky.MSLD.Account; ......</p> <p>MSLDAccountManager.ShowUserCenterPannel(OnShowUserCenterPannelCallBack); ......</p> <p>/*</p> <ul> <li>用户中心面板回调<br /> */ void OnShowUserCenterPannelCallBack(MSLDErrorCode code, string msg, object data) { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info(&quot;用户中心成功!&quot;); } else if (code == MSLDErrorCode.UIUserClose) { MSLDInfoWindow.Info(&quot;用户关闭用户中心! code = &quot; + code + &quot; msg = &quot; + msg); } else { MSLDInfoWindow.Info(&quot;调用用户中心失败! code = &quot; + code + &quot; msg = &quot; + msg); } } <pre><code></code></pre></li> </ul> <h4>3.1.5 实名认证</h4> <p>调用MSLDAccountManager.AuthenticationPanel(APICallBack callback),可展示实名认证面板。</p> <p>```C#</p> <p>using iDreamsky.MSLD; using iDreamsky.MSLD.Account; ......</p> <p>MSLDAccountManager.AuthenticationPanel(OnAuthenticationPanelCallBack); ......</p> <p>/*</p> <ul> <li>实名认证面板回调<br /> */ void OnAuthenticationPanelCallBack(MSLDErrorCode code, string msg, object data) { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info(&quot;实名认证成功!&quot;); } else if (code == MSLDErrorCode.UIUserClose) { MSLDInfoWindow.Info(&quot;用户取消实名认证! code = &quot; + code + &quot; msg = &quot; + msg); } else { MSLDInfoWindow.Info(&quot;实名认证失败! code = &quot; + code + &quot; msg = &quot; + msg); } } <pre><code></code></pre></li> </ul> <h4>3.1.6 获取用户信息</h4> <p>调用 MSLDAccountManager.GetLoginedUserInfo()可获得用户信息。 当用户未登录时,返回null,否则返回当前登录的用户信息。</p> <p>```C# MSLDAccount account = MSLDAccountManager.GetLoginedUserInfo(); if (account != null) { MSLDInfoWindow.Info(&quot;账号信息: &quot; + account.desc()); } else { MSLDInfoWindow.Info(&quot;没有账号信息 &quot;); }</p> <pre><code> #### 3.1.7 协议隐私条款 ##### 3.1.7.1 用户协议 - 无ui版本 返回用户协议内容(富文本) 调用示例: ```C# MSLDAccountManager.AgreementDirect((MSLDErrorCode code, string msg, MSLDWebContent data) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info("获取用户协议成功! webContent:" + data.desc()); } else { MSLDInfoWindow.Info("获取用户协议失败! code = " + code + " msg = " + msg); } });</code></pre> <ul> <li>有ui版本 当用户关闭协议时会有回调</li> </ul> <p>示例:</p> <p>```C# MSLDAccountManager.Agreement((MSLDErrorCode code, string msg, string data) =&gt; { if(code ==MSLDErrorCode.UIUserBack){ MSLDInfoWindow.Info(&quot;用户返回&quot;); } });</p> <pre><code> ##### 3.1.7.1 隐私条款 - 无ui版本 返回隐私条款内容(富文本) 示例 ```C# MSLDAccountManager.PrivacyDirect((MSLDErrorCode code, string msg, MSLDWebContent data) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info("获取隐私协议成功! webContent:" + data.desc()); } else { MSLDInfoWindow.Info("获取隐私协议失败! code = " + code + " msg = " + msg); } });</code></pre> <ul> <li>有ui版本</li> </ul> <p>当用户关闭隐私条款时会有回调</p> <p>示例</p> <p>```C# MSLDAccountManager.Privacy((MSLDErrorCode code, string msg, string data) =&gt; { if(code ==MSLDErrorCode.UIUserBack){ MSLDInfoWindow.Info(&quot;用户返回&quot;); } });</p> <pre><code> #### 3.1.8 自定义本地配置 &gt; 该功能从 `MSSDK1.4.1.2` 版本开始支持, 只针对Android平台有效,通过打包系统可以修改和替换该文件。 &gt; 开发者可以根据这个配置文件来决定游戏调用MSSDK的功能,如出渠道包还是公版包。 - 背景 为了满足游戏方处理不同渠道下的特殊功能需求,在分包处理时,根据不同的渠道将对应值写入游戏包。 - 情况举例 A渠道需要使用渠道的登录,B渠道需要使用SDK的游客登录,这时就可以使用配置文件 ** customConfig.json **(在Unity工程中),可写入键值对 "logintype":1, 用1表示渠道登录,2表示游客登录, 键值对的key和value都可以自定义,游戏使用时,会以json字符串的方式返回,具体每个键值对的意义需要同步给到业务BP,在打包后台做对应配置修改。 - 使用 在文件customConfig.json (Assets/Plugins/iDreamsky/msld/Android/customConfig.json )中添加自定义值,例如 {"xxx":121213"abc":"cccc"} 读取文件(只在Android下有效,其他平台会返回空字符) ```C# string rStr = MSLDSDK.GetCustomConfig();</code></pre> <h4>3.1.9 同步微信用户信息(昵称,头像)</h4> <blockquote> <p><code>MSSDK 1.5.0</code> 开始提供 必须配置微信参数(wx_app_id和wx_app_secret)到msconfig(android/iOS)中,才能正常使用 需要登陆之后才能调用。</p> </blockquote> <p>简要描述:</p> <p>获取微信昵称和头像,微信授权成功并同步完信息后会返回新的MSLDAccount对象</p> <p>调用示例:</p> <p>```c# using iDreamsky.MSLD.Account;</p> <p>MSLDAccountManager.SyncWechatInfo((MSLDErrorCode code, string msg, MSLDAccount data) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info(&quot;同步微信信息成功:&quot; + data.desc()); } else { MSLDInfoWindow.Info(&quot;同步微信信息失败! code = &quot; + code + &quot; msg = &quot; + msg); } });</p> <pre><code> ### 3.2 集成支付系统 调用 public static void PurchaseProduct(MSLDProduct product, MSLDCPInfo cpInfo, MSLDPayMethod payMethod, APICallBack&lt;MSLDPayResult&gt; callback),可以发起购买商品的请求。 **product** 参数product代表商品相关的信息。商品ID,商品类型,商品名称,价格,货币等信息,通过此对象传入购买流程。 需要到[业务控制台](http://biz.cloud.idreamsky.com)配置相应的道具,获取商品ID. ![](https://github.com/veryitman/MSSDKResource/blob/mark-feature/Unity3D/guide-main/guide_04.png?raw=true) 对于iOS来说,需要到[苹果开发者后台](https://developer.apple.com/)配置道具,配置的道具ID就是这个商品ID。 对于product对象中的其他字段,可以通过接口 QueryProduct(string productID, APICallBack&lt;MSLDProduct&gt; callback),从苹果后来拉取。 对于Android,product中的各种信息,由CP方自己处理,诸如从本地配置文件中读取。 **cpInfo** 参数cpInfo代表和CP方相关的各种信息。玩家ID,CP订单号,CP数据,备注,订单标题,透传字段等,通过此对象传入购买流程。 **payMethod** payMethod为购买方式,iOS支持苹果支付。Android支持拉起支付面板,直调微信,直调支付宝的支付方式。接入者根据自己的场景选择。 **支付结果** 对于iOS,支付结果正常从callback返回。当遇到掉单情况,补单成功时,SDK全局回调会收到 MSLDSDK.Event.RedeliveryOrder 事件。并带回支付结果。 对于Android,所有的支付结果均从全局回调MSLDSDK.Event.RedeliveryOrder事件中返回。 请务必要处理MSLDSDK.Event.RedeliveryOrder这个补单事件。 #### 3.2.1 购买商品 ```C# ...... using iDreamsky.MSLD.Payment; using iDreamsky.MSLD; ...... public MSLDProduct product; public MSLDCPInfo cpInfo; ...... // 从MSSDK1.5.1版本开始支持客户端传入支付回调地址,支付回调地址,此值如果为空的话,则使微服务控制台配置的回调地址 product = new MSLDProduct("0", "test01", "测试商品1", "1.23", "人民币","支付回调地址,传空使用服务器配置地址"); cpInfo = new MSLDCPInfo("pid1234", "mchNO123456", "cpDataxxxxx", "remarkXXXXX", "subjectXXXXX", "attachXXX"); ...... //调用此接口发起购买请求。其中product代表商品相关的信息,请参考 MSLDProduct类的说明。cpInfo代表CP方的一些信息。包括CP的订单号,用户ID,透传字段等信息。 MSLDPaymentManager.PurchaseProduct(this.product, this.cpInfo, payMethod, (MSLDErrorCode code, string msg, MSLDPayResult order) =&gt; { if (MSLDErrorCode.Success == code) { MSLDInfoWindow.Info("购买成功 msg = " + msg + "order: " + order.desc()); MSLDInfoWindow.Info("增加相应道具..."); } else { MSLDInfoWindow.Info("购买失败! code = " + code + " msg = " + msg); } });</code></pre> <h4>3.2.2 实现补单代理方法(客户端发放商品必接)</h4> <p>请在收到SDK的全局回调函数中,处理补单事件。</p> <p>```C# using iDreamsky.MSLD.Payment; using iDreamsky.MSLD;</p> <p>// 全局事件回调 void OnSDKEventCallBack(MSLDSDK.Event eventID, object eventObj) { MSLDInfoWindow.Info(&quot;收到SDK全局事件回调:&quot; + eventID); switch (eventID) { case MSLDSDK.Event.SwitchAccount: // SDK内部发生账号切换时,会收到此回调 ...... break; case MSLDSDK.Event.LogOut: // SDK内部发生账号登出时,会收到此回调 ...... break; case MSLDSDK.Event.RedeliveryOrder: { // SDK内部发生补单时,会收到此回调。eventObj为支付结果结构。 MSLDInfoWindow.Info(&quot;[补单]支付信息:&quot; + eventObj.ToString());</p> <pre><code> MSLDPayResult mSLDPayResult = (MSLDPayResult)eventObj; // 接入方在收到补单结果后,需要补发道具 ...... MSLDInfoWindow.Info("[补单]增加相应道具..."); // 在发完相应道具成功之后,需要上报消费结果 MSLDInfoWindow.Info("[补单]上报消费结果"); MSLDPaymentManager.ReportOrderConsumed(mSLDPayResult.orderNo, (MSLDErrorCode codeROC, string msgROC) =&gt; { MSLDInfoWindow.Info("[补单]上报消费结果完成! code:" + codeROC + " msg:" + msgROC); }); } break; }</code></pre> <p>}</p> <pre><code> #### 3.2.3 恢复购买(iOS) 此功能iOS平台特有。 调用 RestoreTransactions(APICallBack&lt;string[]&gt; callback) 函数即可。此接口将返回所有购买的product id 列表。 ```C# using iDreamsky.MSLD.Payment; using iDreamsky.MSLD; MSLDPaymentManager.RestoreTransactions((MSLDErrorCode code, string msg, string[] restoreIDs) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info("恢复购买成功!" + restoreIDs + "恢复数量:" + restoreIDs.Length); foreach (string restore in restoreIDs) { MSLDInfoWindow.Info("--- productID:" + restore); } } else { MSLDInfoWindow.Info("恢复购买失败!"); } });</code></pre> <h4>3.2.4 查询商品信息(iOS)</h4> <p>此功能iOS平台特有。可以根据ID查询商品相关信息。对于Android的商品信息,由接入方自己存储。一般可能在本地有一个商品配置列表。</p> <p>```C# using iDreamsky.MSLD.Payment; using iDreamsky.MSLD;</p> <p>......</p> <p>string queryProductId = &quot;test_01&quot;; MSLDPaymentManager.QueryProduct(queryProductId, (MSLDErrorCode code, string msg, MSLDProduct product) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info(&quot;查询道具成功! &quot; + product.desc()); } else { MSLDInfoWindow.Info(&quot;查询道具失败! code = &quot; + code + &quot; msg = &quot; + msg); } });</p> <pre><code> ### 3.3 分享 #### 3.3.1 分享平台应用信息获取 目前支持的分享SNS包括QQ和微信,开发者需要在相应的平台上创建应用并设置相关的信息。 在[微信开放平台](https://open.weixin.qq.com/)创建应用并获取微信AppId,具体联系渠道商务同事。 在[腾讯开放平台](https://open.tencent.com/)创建应用并获取QQ的AppId,具体联系渠道商务同事。 在[新浪微博开放平台](https://open.weibo.com/)创建应用并获取微博 App Key,Sectet,redirectURI。具体联系渠道商务同事。 #### 3.3.2 平台工程设置 在Android平台和iOS平台的MSSDK配置文件msConfig.json中填入对应参数。 微信:"wx_app_id","wx_app_secret","wx_universal_link" QQ:"qq_app_id","qq_universal_link" 微博:"ms_weibo_Key","ms_weibo_Secret","ms_weibo_redirectURI" ![](https://www.showdoc.cc/server/api/common/visitfile/sign/8edc5410053991568abf79f7e5c85f24?showdoc=.jpg) #### 3.3.3 分享接口调用 调用 public static void Share(MSLDShareContent content, MSLDShareScence scence, APICallBack callBack)接口,即可完成分享功能。 分享目前支持分享图片,分享链接,分享小程序三种内容。 支持分享到QQ,Qzone,微信朋友圈,微信会话,微博(1.9.0支持)五种场景。 **content** 参数请不要使用 MSLDShareContent类的对象,使用其子类对象,目前支持的子类有 MSLDShareContentImage(图片),MSLDShareContentWebpage(链接),MSLDShareContentMiniProgram(小程序)三种。 请根据业务选择相应的内容对象,并填入相应的值,然后把对象传入分享接口。 **scence** 为分享场景。如果分享小程序只支持分享到微信,可以忽略此参数。 **callBack** 为分享结果。 ```C# using iDreamsky.MSLD.Share; using iDreamsky.MSLD; ...... public void OnClickShare() { MSLDShareContent shareContent = null; MSLDShareContentType scType = contentTypeList[shareContentDropdown.value]; switch (scType) { case MSLDShareContentType.Image: shareContent = FindObjectOfType&lt;share_panel_content_image&gt;().shareContentImage; break; case MSLDShareContentType.Web: shareContent = FindObjectOfType&lt;share_panel_content_webpage&gt;().shareContentWebpage; break; case MSLDShareContentType.MiniProgram: shareContent = FindObjectOfType&lt;share_panel_content_miniprogram&gt;().shareContentMiniProgram; break; } MSLDShareScence scence = scenceTypeList[shareScenceDropdown.value]; MSLDInfoWindow.Info("Share content[" + shareContent.Desc() + "]" + " scence[" + scence + "]"); MSLDShareManager.Share(shareContent, scence, shareCallBack); } void shareCallBack(MSLDErrorCode code, string msg) { if (code == iDreamsky.MSLD.MSLDErrorCode.Success) { Debug.Log("分享成功"); } else { Debug.Log("分享失败"); } }</code></pre> <h3>3.4 问卷调查</h3> <p>目前问卷星支持如下功能:</p> <ul> <li>1、支持指定问卷星地址,需要在控制台配置问卷星地址;</li> <li>2、支持自定义场景传入不同的问卷星地址,不需要再控制台配置,只需要客户端传入问卷星地址即可;</li> <li>3、支持客户端回调问卷星的填写结果回调;</li> <li>4、支持服务端回调问卷星的填写结果回调,需要在控制台配置开发者的服务端回调地址;</li> </ul> <p>详细文档可以看 <a href="https://www.showdoc.cc/mssdk?page_id=3370316907650536">Unity版问卷星集成</a> 文档。</p> <h3>3.5 热更新(Android)</h3> <p>目前支持Android 端的热更新。</p> <h4>3.5.1 获取热变参数</h4> <p>热更新采用封装乐变的技术方案。需要商务在乐变后台申请相应的参数:MainChId和LEBIAN_SECID。</p> <h4>3.5.2 配置热更</h4> <p>在Android平台和iOS平台的MSSDK配置文件msConfig.json中填入乐变的参数。 注意key分别为 “lb_MainChId”和“lb_LEBIAN_SECID”,如下截图示例:</p> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/718cc99627952b00cc40d793d8aa7e16?showdoc=.jpg" alt="" /></p> <p>配置完成后,重新导出Android工程,即可集成热更新功能。</p> <h4>3.6 广告追踪</h4> <p>MSSDK-Unity 在V1.4.2 集成了广告跟踪相关的功能。 广告跟踪要求接入方在相应的业务逻辑部分,调用相应的接口。</p> <h5>3.6.1 登录成功后,请调用ReportADLogin 上报登录信息</h5> <p>``` C# ADTrackManager.ReportADLogin(&quot;test123&quot;,null);</p> <pre><code> ##### 3.6.2 购买成功后,请调用 ReportADPurchase上报购买相关信息 ``` C# ADTrackManager.ReportADPurchase("test123", 99.00f, null);</code></pre> <h5>3.6.3 点击广告成功后,请调用 ReportADClick 上报相关信息</h5> <p>``` C# ADTrackManager.ReportADClick(ADPlatforms.Adcolony, ADTypes.Banner,null);</p> <pre><code> ##### 3.6.4 调用 ReportADCustom 上报自定义信息 ``` C# Hashtable ht = new Hashtable(); ht["k"] = "v"; string key = "key"; ADTrackManager.ReportADCustom(key,iDreamsky.Common.MSLDJSON.jsonEncode(ht), null);</code></pre> <h4>3.7 buggly集成</h4> <p>把在buggly开发者后台申请的app id,填入到 msConfig.json(android &amp; ios) 中后,MSSDK将自动启动buggly。 在msConfig.json文件中相应的key为 bugly_app_id。</p> <h4>3.8 LBS 集成</h4> <p>包含功能:</p> <ul> <li>1、获取附近的人</li> <li>2、获取当前位置信息</li> </ul> <p>详细文档可以看 <a href="https://www.showdoc.cc/mssdk?page_id=3742789464476580">Unity版LBS集成</a> 文档。</p> <h4>3.9 极光集成(push 集成)</h4> <p>包含功能:</p> <ul> <li>1、极光一键登录</li> <li>2、极光push</li> </ul> <p>详细文档可以看 <a href="https://www.showdoc.cc/mssdk?page_id=3742980023778348">Unity版极光集成</a> 文档。</p> <h4>3.10 兑换码功能</h4> <h5>3.10.1 有ui兑换</h5> <p>调用示例</p> <p>``` C#</p> <p>using iDreamsky.MSLD;</p> <p>MSLDRedeemManager.ShowRedeem((MSLDErrorCode code, string msg, string data) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info(&quot;兑换成功:&quot; + msg + &quot;,produceID =&quot; + data); } else { MSLDInfoWindow.Info(&quot;兑换失败:code =&quot; + code + &quot;, msg = &quot; + msg); } });</p> <pre><code> ##### 3.10.2 无ui兑换 调用示例 ``` C# using iDreamsky.MSLD; string getCode = "xxxx"; MSLDRedeemManager.RedeemDirect( getCode, (MSLDErrorCode code, string msg, string data) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info("兑换成功:" + msg + ",produceID =" + data); } else { MSLDInfoWindow.Info("兑换失败:code =" + code + ", msg = " + msg); } });</code></pre> <h4>3.11 社区接入</h4> <p>包含功能:</p> <ul> <li>1、社区初始化</li> <li>2、展示社区</li> <li>3、获取消息数量</li> </ul> <p>详细文档可以看 <a href="https://www.showdoc.cc/mssdk?page_id=3812293863039627">Unity-社区集成</a> 文档。</p> <h4>3.12 直播功能</h4> <h5>3.12.1 是否开启直播</h5> <p>```C# using iDreamsky.MSLD;</p> <p>MSLDLiveStreamingManager.IsLiveEnable((MSLDErrorCode code, string msg, bool data) =&gt; { if (code == MSLDErrorCode.Success &amp;&amp; data) { MSLDInfoWindow.Info(&quot;直播已经开启&quot;); } else { MSLDInfoWindow.Info(&quot;直播未开启,code=&quot; + code + &quot;, data =&quot; + data); } });</p> <pre><code> ##### 3.12.2 展示直播 ```C# using iDreamsky.MSLD; MSLDLiveStreamingManager.ShowLiveStreamWeb((MSLDErrorCode code, string msg, string data) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info("开始直播"); } else { MSLDInfoWindow.Info("直播出错,code =" + code + ",msg =" + msg + ", data=" + data); } }); </code></pre> <h4>3.13 获取联系人</h4> <h5>3.13.1 请求获取联系人授权</h5> <p>```C# using iDreamsky.MSLD;</p> <p>Enum_ContacetPermission type = Enum_ContacetPermission.No;// 强制授权 MSLDContactManager.RequestReadContactPermisssion((MSLDErrorCode code, string msg, bool data) =&gt; { if (code == MSLDErrorCode.Success &amp;&amp; data) { MSLDInfoWindow.Info(&quot;获取联系人权限成功&quot;); } else { MSLDInfoWindow.Info(&quot;获取联系人权限失败,code=&quot; + code + &quot;, data =&quot; + data); } }, type);</p> <pre><code> ##### 3.13.2 请求联系人列表 ```C# using iDreamsky.MSLD; MSLDContactManager.RequestContactList((MSLDErrorCode code, string msg, MSLDContacts data) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info("获取联系人列表:data = " + data.desc()); } else { MSLDInfoWindow.Info("获取联系列表失败,code=" + code + ",msg =" + msg ); } }); </code></pre> <h4>3.14 OpenInstall支持</h4> <h5>3.14.1 OpenInstall应用信息配置</h5> <p>在<a href="https://developer.openinstall.io">OpenInstall后台</a>创建应用并获取游戏appKey。</p> <ul> <li>对于iOS, 需要在 msConfig.json 添加项目(&quot;openinstall_appkey&quot;: &quot;appKey&quot;)</li> <li>对于Android,需要在分包后台配置OpenInstall的appKey参数</li> <li>在全局回调中通过 Event.OpenInstallWakeupWithParam 获取拉起游戏的透传参数</li> </ul> <h5>3.14.2 主动获取落地页参数</h5> <p>```C#</p> <p>using iDreamsky.MSLD;</p> <p>MSLDOpenInstallManager.GetInstall((MSLDErrorCode code, string msg, MSLDOpenInstallData data) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info(&quot;主动获取落地页参数成功:data = &quot; + data.desc()); } else { MSLDInfoWindow.Info(&quot;主动获取落地页参数失败,code=&quot; + code); } });</p> <pre><code> ##### 3.14.3 效果统计 ```C# using iDreamsky.MSLD; string point = "xxxx";//效果点 long value = 1;//效果值 MSLDOpenInstallManager.ReportEffectPoint(point, value, (MSLDErrorCode code, string msg, string data) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info("效果统计上报成功"); } else { MSLDInfoWindow.Info("效果统计上报失败,code=" + code); } }); </code></pre> <h5>3.14.4 注册统计</h5> <p>```C#</p> <p>using iDreamsky.MSLD;</p> <p>MSLDOpenInstallManager.ReportRegister((MSLDErrorCode code, string msg, string data) =&gt; { if (code == MSLDErrorCode.Success) { MSLDInfoWindow.Info(&quot;注册统计上报成功&quot;); } else { MSLDInfoWindow.Info(&quot;注册统计上报失败,code=&quot; + code); } });</p> <pre><code></code></pre>

页面列表

ITEM_HTML