MSSDK海外版 API
<p>[TOC]</p>
<h2>文档记录</h2>
<table>
<thead>
<tr>
<th>编写日期</th>
<th>编写人员</th>
<th>文档版本</th>
<th>修改内容</th>
<th>备注</th>
</tr>
</thead>
<tbody>
<tr>
<td>2020.04.09</td>
<td>berton.luo</td>
<td>1.0.1</td>
<td>添加海外登录、支付、分享接口</td>
<td>无</td>
</tr>
</tbody>
</table>
<h2>文档简介</h2>
<p>MSSDK iOS 海外版,包括海外登录、支付和数据统计(DLog)、分享等功能。</p>
<p>该文档是 SDK 对外 API,方便开发者接入 SDK,有问题可以 <a href="https://www.showdoc.cc/mssdk?page_id=2615409307929897">联系我们</a>。</p>
<p>初次接入MSSDK,建议大家参考 <a href="https://www.showdoc.cc/mssdk?page_id=2643085941453925">iOS MSSDK 集成向导</a> 文档。</p>
<h2>重要信息</h2>
<p>本文档中涉及到的 <code>错误码</code> 可以参考下面链接的内容。</p>
<ul>
<li>iOS SDK 错误码可以参考 <a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">iOS SDK 错误码</a> 文档</li>
</ul>
<p>若使用Google登录功能,需要在集成MSSDK后,在msConfig.json配置文件中, 添加Google的clientID,使用"google_client_id"为key, clientID为value。</p>
<h2>事件回调处理</h2>
<blockquote>
<p>主要用于 SDK 通知接入方一些重要的事件信息,如初始化成功、用户切换帐号成功,登出和产生补单等事件。</p>
</blockquote>
<p><strong>简要描述:</strong></p>
<p>接入方实现监听代理 <code>MSLDDelegate</code>,用于 SDK 和接入方通信,SDK 主动通过该代理通知接入方。</p>
<p><strong>函数原型:</strong></p>
<pre><code class="language-objc">- (void)onMSLDSDKEvent:(NSInteger)eventID msg:(NSString *)msg data:(id)data;</code></pre>
<p><strong>函数参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">eventID</td>
<td style="text-align: left;">MSLDSDKGlobalEvent</td>
<td>事件ID,标识具体事件,详见 MSLDSDKGlobalEvent</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">NSString</td>
<td>提示信息</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;">id</td>
<td>事件对应的数据,可能为空</td>
</tr>
</tbody>
</table>
<p>MSLDSDKGlobalEvent 定义:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">枚举名称</th>
<th style="text-align: left;">事件ID</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;">MSLDSDKSwitch</td>
<td style="text-align: left;">1</td>
<td style="text-align: left;">用户切换帐号</td>
<td style="text-align: left;">切换后的账户对象</td>
<td style="text-align: left;"><a href="#jump_account">MSLDAccount</a></td>
<td style="text-align: left;">用户在个人中心选择切换帐号后,选择某个帐号登录、或用户在绑定手机二选一流程中,选择取回原有时,会触发该事件</td>
</tr>
<tr>
<td style="text-align: left;">MSLDSDKLogOut</td>
<td style="text-align: left;">2</td>
<td style="text-align: left;">退出登录</td>
<td style="text-align: left;">退出登录的账户对象</td>
<td style="text-align: left;"><a href="#jump_account">MSLDAccount</a></td>
<td style="text-align: left;">用户在个人中心选择切换帐号时,会先退出当前帐号,由此触发该事件。用户在使用SDK各项功能过程中,token过期时亦会触发该事件</td>
</tr>
<tr>
<td style="text-align: left;">MSLDSDKRedeliveryOrder</td>
<td style="text-align: left;">3</td>
<td style="text-align: left;">产生补单</td>
<td style="text-align: left;">订单对象</td>
<td style="text-align: left;"><a href="#jump_order">MSLDOrder</a></td>
<td style="text-align: left;">用户在支付时,因某些异常原因导致SDK内部未收到支付成功回调,当该用户下次登录时,触发该事件</td>
</tr>
<tr>
<td style="text-align: left;">MSLDSDKPolicyMinorsPlayTimeLimit</td>
<td style="text-align: left;">4</td>
<td style="text-align: left;">政策需求-未成年人游戏时间已到上限</td>
<td style="text-align: left;">limitStatus,强限制=@"1",弱限制=@"2"</td>
<td style="text-align: left;">NSDictionary</td>
<td style="text-align: left;">客户端检测到用户(未成年人)已经达到政策规定的游戏时间上限,会触发该事件。</td>
</tr>
<tr>
<td style="text-align: left;">MSLDSDKPolicyNoAuthPlayTimeLimit</td>
<td style="text-align: left;">5</td>
<td style="text-align: left;">政策需求-未实名账号游戏时间已到上限</td>
<td style="text-align: left;">limitStatus,强限制=@"1",弱限制=@"2"</td>
<td style="text-align: left;">NSDictionary</td>
<td style="text-align: left;">客户端检测到未进行实名认证的用户已经达到政策规定的游戏时间上限,会触发该事件。</td>
</tr>
<tr>
<td style="text-align: left;">MSLDSDKPolicyMinorsPaymentLimit</td>
<td style="text-align: left;">6</td>
<td style="text-align: left;">政策需求-未成年充值限制</td>
<td style="text-align: left;">limitStatus,强限制=@"1",弱限制=@"2"</td>
<td style="text-align: left;">NSDictionary</td>
<td style="text-align: left;">客户端检测到用户(未成年人)已经到达政策规定的充值上限,会触发该事件。</td>
</tr>
<tr>
<td style="text-align: left;">MSLDSDKPolicyNoAuthPaymentLimit</td>
<td style="text-align: left;">7</td>
<td style="text-align: left;">政策需求-未实名账号不允许充值</td>
<td style="text-align: left;">limitStatus,强限制=@"1",弱限制=@"2"</td>
<td style="text-align: left;">NSDictionary</td>
<td style="text-align: left;">客户端检测到未实名用户已经到达政策规定的充值上限,会触发该事件。</td>
</tr>
<tr>
<td style="text-align: left;">MSLDSDKAccountInfoUpdated</td>
<td style="text-align: left;">8</td>
<td style="text-align: left;">账号信息更新</td>
<td style="text-align: left;">返回NSDictionary类型。其中有三个字段: field(账号哪个字段信息更新了,MSLDUserInfoField类型) isNew(是否从无到有的完善更新) account(账号的完整信息)</td>
<td style="text-align: left;">NSDictionary</td>
<td style="text-align: left;">账号信息发生变动</td>
</tr>
<tr>
<td style="text-align: left;">MSLDSDKNotificationReceived</td>
<td style="text-align: left;">9</td>
<td style="text-align: left;">收到极光自定义消息回调</td>
<td style="text-align: left;">customMessage:自定义消息。值为MSLDCustomMessage类型</td>
<td style="text-align: left;">NSDictionary</td>
<td style="text-align: left;">收到推送消息</td>
</tr>
<tr>
<td style="text-align: left;">MSLDSDKOpeninstallDataReceived</td>
<td style="text-align: left;">10</td>
<td style="text-align: left;">收到Openinstall的数据</td>
<td style="text-align: left;">返回的openInstall数据</td>
<td style="text-align: left;">MSLDOpenInstallData</td>
<td style="text-align: left;">接入OpenInstall插件的游戏,从落地页点击,打开APP后,会收到此回调。</td>
</tr>
<tr>
<td style="text-align: left;">MSLDSDKPolicyMinorsCurfewLimit</td>
<td style="text-align: left;">11</td>
<td style="text-align: left;">政策需求-未成年人宵禁限制</td>
<td style="text-align: left;">limitStatus,强限制=@"1",弱限制=@"2"</td>
<td style="text-align: left;">NSDictionary</td>
<td style="text-align: left;">客户端检测到用户(未成年人)进入政策要求的未成年人宵禁时间,会触发该事件</td>
</tr>
</tbody>
</table>
<p><span id="jump_account">MSLDAccount定义</span></p>
<table>
<thead>
<tr>
<th style="text-align: left;">字段名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">playerId</td>
<td style="text-align: left;">NSString</td>
<td>玩家pid</td>
</tr>
<tr>
<td style="text-align: left;">nickName</td>
<td style="text-align: left;">NSString</td>
<td>昵称</td>
</tr>
<tr>
<td style="text-align: left;">avatarUrl</td>
<td style="text-align: left;">NSString</td>
<td>头像 url 地址</td>
</tr>
<tr>
<td style="text-align: left;">phoneNumber</td>
<td style="text-align: left;">NSString</td>
<td>手机号(第四位到第七位为*)</td>
</tr>
<tr>
<td style="text-align: left;">phoneBound</td>
<td style="text-align: left;">BOOL</td>
<td>是否已绑定手机</td>
</tr>
<tr>
<td style="text-align: left;">realNameVerified</td>
<td style="text-align: left;">BOOL</td>
<td>是否已登记实名信息</td>
</tr>
<tr>
<td style="text-align: left;">newPlayer</td>
<td style="text-align: left;">BOOL</td>
<td>是否为新用户</td>
</tr>
<tr>
<td style="text-align: left;">openId</td>
<td style="text-align: left;">NSString</td>
<td>乐逗open_id</td>
</tr>
<tr>
<td style="text-align: left;">sessionId</td>
<td style="text-align: left;">NSString</td>
<td>登录sessionID</td>
</tr>
<tr>
<td style="text-align: left;">gameId</td>
<td style="text-align: left;">NSString</td>
<td>乐逗game_id</td>
</tr>
<tr>
<td style="text-align: left;">lastLoginTime</td>
<td style="text-align: left;">NSString</td>
<td>最后登录时间,返回自1970年以来的秒数</td>
</tr>
<tr>
<td style="text-align: left;">loginType</td>
<td style="text-align: left;">NSString</td>
<td>登录类型</td>
</tr>
<tr>
<td style="text-align: left;">thirdPartyOpenId</td>
<td style="text-align: left;">NSString</td>
<td>三方OpenId</td>
</tr>
<tr>
<td style="text-align: left;">thirdPartyUnionId</td>
<td style="text-align: left;">NSString</td>
<td>三方UnionId</td>
</tr>
<tr>
<td style="text-align: left;">extend</td>
<td style="text-align: left;">NSDictionary</td>
<td>扩展字段</td>
</tr>
</tbody>
</table>
<p><span id="jump_order">MSLDOrder定义</span></p>
<table>
<thead>
<tr>
<th style="text-align: left;">字段名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">productID</td>
<td style="text-align: left;">NSString</td>
<td>商品ID</td>
</tr>
<tr>
<td style="text-align: left;">orderID</td>
<td style="text-align: left;">NSString</td>
<td>支付后台订单ID</td>
</tr>
<tr>
<td style="text-align: left;">extraInfo</td>
<td style="text-align: left;">NSString</td>
<td>透传信息</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-objc">// 设置代理
[MSLDSDK sharedInstance].delegate = self;
// 实现代理方法
- (void)onMSLDSDKEvent:(MSLDSDKGlobalEvent)eventID msg:(NSString *)msg data:(id)data
{
if (MSLDSDKSwitchAccount == eventID) {
// 用户切换帐号成功
MSLDAccount *account = data;
} else if (MSLDSDKLogOut == eventID) {
// 用户退出登录
MSLDAccount *account = data;
} else if (MSLDSDKRedeliveryOrder == eventID) {
// 产生补单
MSLDOrder *order = data;
}
}</code></pre>
<h2>异步的回调函数</h2>
<blockquote>
<p>SDK 异步回调的函数原型。以下 API 接口中有使用该回调函数。</p>
</blockquote>
<p><strong>成功的回调函数 MSLDSDKSuccess</strong></p>
<pre><code class="language-objc">typedef void (^MSLDSDKSuccess)(NSString *msg, id data);</code></pre>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>释义</th>
</tr>
</thead>
<tbody>
<tr>
<td>msg</td>
<td>NSString</td>
<td>属于提示信息</td>
</tr>
<tr>
<td>data</td>
<td>id</td>
<td>该值可能为空,具体看调用的接口</td>
</tr>
</tbody>
</table>
<p><strong>失败的回调函数 MSLDSDKFail</strong></p>
<pre><code class="language-objc">typedef void (^MSLDSDKFail)(MSLDErrorCode code, NSString *msg, id errorData);</code></pre>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>释义</th>
</tr>
</thead>
<tbody>
<tr>
<td>code</td>
<td>MSLDErrorCode</td>
<td><a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">错误码</a></td>
</tr>
<tr>
<td>msg</td>
<td>NSString</td>
<td>属于提示信息</td>
</tr>
<tr>
<td>errorData</td>
<td>id</td>
<td>该值可能为空,具体看调用的接口</td>
</tr>
</tbody>
</table>
<h2>生命周期</h2>
<p><strong>SDK 生命周期函数原型:</strong></p>
<pre><code class="language-objc">- (BOOL)msld_application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
- (void)msld_applicationWillResignActive:(UIApplication *)application;
- (void)msld_applicationDidEnterBackground:(UIApplication *)application;
- (void)msld_applicationWillEnterForeground:(UIApplication *)application;
- (void)msld_applicationDidBecomeActive:(UIApplication *)application;
- (void)msld_application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
- (BOOL)msld_application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
- (BOOL)msld_application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options;</code></pre>
<p>在接入方的 <code>AppDelegate.m</code> 文件对应的系统回调函数中,调用以上生命周期函数即可,注意接入方可以在 <code>AppDelegate.m</code> 中处理完自己的业务逻辑再调用该 SDK 的生命周期方法即可。</p>
<p>生命周期函数的接入,可以参考提供的 <strong>iOS Demo</strong> 的接入方式。</p>
<h2>API 详情</h2>
<h3>初始化 SDK</h3>
<p><strong>简要描述:</strong>
初始化 SDK 的函数,该方法的调用需要放到 <code>application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions</code> 中,调用 SDK 的其他任何接口之前必须要初始化 SDK 否则无效。</p>
<p><strong>函数原型:</strong></p>
<pre><code class="language-objc">- (void)initSDKWithSuccess:(MSLDSDKSuccess)success fail:(MSLDSDKFail)fail;</code></pre>
<p><strong>函数参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">success</td>
<td style="text-align: left;">MSLDSDKSuccess</td>
<td>初始化成功回调</td>
</tr>
<tr>
<td style="text-align: left;">fail</td>
<td style="text-align: left;">MSLDSDKFail</td>
<td>初始化失败回调</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong></p>
<p>可以参考 <code>回调函数</code> 的说明。</p>
<p><strong>示例:</strong></p>
<pre><code class="language-objc"> [[MSLDSDK sharedInstance] initSDKWithSuccess:^(NSString *msg, id data) {
} fail:^(MSLDErrorCode code, NSString *msg, id errorData) {
// 如果发生错误,需要检查自己的配置文件是否正确,必要参数是否完整
}];</code></pre>
<h3>业务功能 API</h3>
<h4>获取配置信息</h4>
<blockquote>
<p>该接口可以获取当前游戏配置信息。</p>
</blockquote>
<p><strong>简要描述:</strong></p>
<p>获取当前游戏的配置信息。</p>
<p><strong>功能说明:</strong></p>
<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>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">获取游戏配置</td>
<td style="text-align: left;">同步调用</td>
<td style="text-align: left;">ROUTE_SDK_CONFIG</td>
<td style="text-align: left;">MSLDConfig</td>
</tr>
</tbody>
</table>
<p><strong>返回值说明:</strong></p>
<p>MSLDConfig 定义:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">字段名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">appId</td>
<td style="text-align: left;">NSString</td>
<td>AppId</td>
</tr>
<tr>
<td style="text-align: left;">appKey</td>
<td style="text-align: left;">NSString</td>
<td>Appkey</td>
</tr>
<tr>
<td style="text-align: left;">publicKey</td>
<td style="text-align: left;">NSString</td>
<td>publicKey</td>
</tr>
<tr>
<td style="text-align: left;">channelId</td>
<td style="text-align: left;">NSString</td>
<td>渠道Id</td>
</tr>
<tr>
<td style="text-align: left;">channelGroupId</td>
<td style="text-align: left;">NSString</td>
<td>渠道组Id</td>
</tr>
<tr>
<td style="text-align: left;">forumId</td>
<td style="text-align: left;">NSString</td>
<td>社区Id</td>
</tr>
<tr>
<td style="text-align: left;">isTrial</td>
<td style="text-align: left;">BOOL</td>
<td>是否是提审模式</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-objc">MSLDConfig *config = [[MSLDSDK sharedInstance] syncActionWithLDUrl:ROUTE_SDK_CONFIG param:nil];</code></pre>
<h4>海外登录</h4>
<p>SDK 提供多种种登录API,支持登录面板登录(支持游客、Facebook、Google、Apple)、游客登录、Facebook登录、Google登录、Apple登录以及自动登录。</p>
<h5>1. Apple登录</h5>
<p><strong>简要描述:</strong></p>
<p>调用起Apple系统提供的登录授权页面,在拿到系统授权后,使用授权信息进行登录</p>
<p><strong>注意:</strong>
该功能在iOS13及其以上版本系统才能支持。</p>
<p><strong>功能说明:</strong></p>
<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>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">苹果登录</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/mssdk?page_id=2630193199516192">ROUTE_COLUMBUS_ACCOUNT_DIRECT_APPLE_LOGIN</a></td>
<td style="text-align: left;">-</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong></p>
<pre><code class="language-objc">typedef void(^MSLDSDKSuccess)(NSString *msg, id data);
typedef void(^MSLDSDKFail)(MSLDErrorCode code, NSString *msg, id errorData);</code></pre>
<p><strong>回调参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">MSLDErrorCode</td>
<td><a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">错误码</a></td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">NSString</td>
<td>状态详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">id</td>
<td>返回对象</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;"><a href="#jump_account">MSLDAccount</a></td>
<td>登录成功的用户信息</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-objc"> [[MSLDSDK sharedInstance] actionWithLDUrl:ROUTE_COLUMBUS_ACCOUNT_DIRECT_APPLE_LOGIN param:nil success:^(NSString *msg, id data) {
MSLDAccount *account = data;
// 苹果登录成功
} fail:^(MSLDErrorCode code, NSString *msg, id errorData) {
// 苹果登录失败
}];</code></pre>
<h5>2. Google登录</h5>
<p><strong>简要描述:</strong></p>
<p>在应用内调用起Google的网页授权弹窗页面,在拿到Google授权token后,使用授权信息进行登录</p>
<p><strong>注意:</strong>
使用该功能需要在项目的配置中新增URL Schemes 配置详见<a href="https://developers.google.cn/identity/sign-in/ios/start?hl=zh-tw&ver=objc">Google 登录接入文档 Set the callback URL type</a>。</p>
<p><strong>功能说明:</strong></p>
<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>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Google登录</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/mssdk?page_id=2630193199516192">ROUTE_COLUMBUS_ACCOUNT_DIRECT_GOOGLE_LOGIN</a></td>
<td style="text-align: left;">-</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong></p>
<pre><code class="language-objc">typedef void(^MSLDSDKSuccess)(NSString *msg, id data);
typedef void(^MSLDSDKFail)(MSLDErrorCode code, NSString *msg, id errorData);</code></pre>
<p><strong>回调参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">MSLDErrorCode</td>
<td><a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">错误码</a></td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">NSString</td>
<td>状态详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">id</td>
<td>返回对象</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;"><a href="#jump_account">MSLDAccount</a></td>
<td>登录成功的用户信息</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-objc">[[MSLDSDK sharedInstance] actionWithLDUrl:ROUTE_COLUMBUS_ACCOUNT_DIRECT_GOOGLE_LOGIN param:nil success:^(NSString *msg, id data) {
MSLDAccount *account = data;
//Google登录成功
} fail:^(MSLDErrorCode code, NSString *msg, id errorData) {
//Google登录失败
}];</code></pre>
<h5>3. Facebook登录</h5>
<p><strong>简要描述:</strong></p>
<p>在应用内调用起Facebook的网页授权弹窗页面,并尝试拉起Facebook原生APP进行登录授权,在拿到Facebook授权token后,使用授权信息进行登录</p>
<p><strong>注意:</strong>
使用该功能需要在项目的plist文件中新增配置详见 <a href="https://developers.facebook.com/docs/ios/getting-started/?sdk=fbsdk">Facebook接入文档 Step 3: Configure Info.plist </a> 。</p>
<p><strong>功能说明:</strong></p>
<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>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Facebook登录</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/mssdk?page_id=2630193199516192">ROUTE_COLUMBUS_ACCOUNT_DIRECT_FACEBOOK_LOGIN</a></td>
<td style="text-align: left;">-</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong></p>
<pre><code class="language-objc">typedef void(^MSLDSDKSuccess)(NSString *msg, id data);
typedef void(^MSLDSDKFail)(MSLDErrorCode code, NSString *msg, id errorData);</code></pre>
<p><strong>回调参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">MSLDErrorCode</td>
<td><a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">错误码</a></td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">NSString</td>
<td>状态详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">id</td>
<td>返回对象</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;"><a href="#jump_account">MSLDAccount</a></td>
<td>登录成功的用户信息</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-objc">[[MSLDSDK sharedInstance] actionWithLDUrl:ROUTE_COLUMBUS_ACCOUNT_DIRECT_FACEBOOK_LOGIN param:nil success:^(NSString *msg, id data) {
MSLDAccount *account = data;
//Facebook登录成功
} fail:^(MSLDErrorCode code, NSString *msg, id errorData) {
//Facebook登录失败
}];</code></pre>
<h4>支付</h4>
<p>SDK 目前仅支持苹果内购相关功能。</p>
<h5>1. 查询订阅</h5>
<p><strong>简要描述:</strong>
去服务后台查询与当前账号相关的且在有效期内的订阅信息。</p>
<p><strong>功能说明:</strong></p>
<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>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">查询订阅</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ROUTE_PAY_QUERY_SUBSCRIPTIONS</td>
<td style="text-align: left;">-</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong></p>
<pre><code class="language-objc">typedef void(^MSLDSDKSuccess)(NSString *msg, id data);
typedef void(^MSLDSDKFail)(MSLDErrorCode code, NSString *msg, id errorData);</code></pre>
<p><strong>回调参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">MSLDErrorCode</td>
<td><a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">错误码</a></td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">NSString</td>
<td>状态详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">id</td>
<td>返回对象</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;">NSArray<MSLDSubscribingItem *></td>
<td>订阅信息列表,数组元素为 MSLDSubscribingItem</td>
</tr>
</tbody>
</table>
<p>MSLDSubscribingItem 定义:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">productId</td>
<td style="text-align: left;">NSString</td>
<td>订阅道具ID</td>
</tr>
<tr>
<td style="text-align: left;">expirationTime</td>
<td style="text-align: left;">NSString</td>
<td>到期时间,返回自1970年以来的秒数</td>
</tr>
<tr>
<td style="text-align: left;">payMethod</td>
<td style="text-align: left;">NSString</td>
<td>付款方式</td>
</tr>
</tbody>
</table>
<h5>2. 恢复购买</h5>
<p><strong>简要描述:</strong>
去苹果后台查询当前AppleID在游戏内购买的商品记录。</p>
<p><strong>功能说明</strong></p>
<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>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">恢复购买</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/mssdk?page_id=2630193199516192">ROUTE_PAY_RESTORE_TRANSACTIONS</a></td>
<td style="text-align: left;">-</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong></p>
<pre><code class="language-objc">typedef void(^MSLDSDKSuccess)(NSString *msg, id data);
typedef void(^MSLDSDKFail)(MSLDErrorCode code, NSString *msg, id errorData);</code></pre>
<p><strong>回调参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">MSLDErrorCode</td>
<td><a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">错误码</a></td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">NSString</td>
<td>状态详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">id</td>
<td>返回对象</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;">NSArray</td>
<td>商品列表,数组元素为商品ID</td>
</tr>
</tbody>
</table>
<h5>3. 查询道具信息</h5>
<p><strong>简要描述:</strong>
去苹果后台查询商品信息。</p>
<p><strong>功能说明:</strong></p>
<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>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">查询道具信息</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ROUTE_PAY_QUERY_PRODUCT</td>
<td style="text-align: left;">-</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong></p>
<pre><code class="language-objc">typedef void(^MSLDSDKSuccess)(NSString *msg, id data);
typedef void(^MSLDSDKFail)(MSLDErrorCode code, NSString *msg, id errorData);</code></pre>
<p><strong>回调参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">MSLDErrorCode</td>
<td><a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">错误码</a></td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">NSString</td>
<td>状态详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">id</td>
<td>返回对象</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;">NSDictionary</td>
<td>商品信息</td>
</tr>
</tbody>
</table>
<h5>4. 购买商品</h5>
<p><strong>简要描述:</strong></p>
<p>先根据传入的商品ID调起苹果支付购买商品</p>
<p><strong>功能说明:</strong></p>
<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>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">购买商品</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;">ROUTE_PAY_PURCHASE_PRODUCT</td>
<td style="text-align: left;">-</td>
</tr>
</tbody>
</table>
<p><strong>参数说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">是否必传</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">KEY_PAY_PRODUCT_ID</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">NSString</td>
<td>商品ID</td>
</tr>
<tr>
<td style="text-align: left;">KEY_PLAYER_ID</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">NSString</td>
<td>玩家ID</td>
</tr>
<tr>
<td style="text-align: left;">KEY_PAY_REMARK</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">NSString</td>
<td>订单备注信息</td>
</tr>
<tr>
<td style="text-align: left;">KEY_PAY_MCH_ORDER_NO</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">NSString</td>
<td>商户订单号,即游戏CP订单号</td>
</tr>
<tr>
<td style="text-align: left;">KEY_PAY_CLIENT_INFO</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">NSString</td>
<td>客户端透传参数,此参数为第三方支付可能需要,具体根据第三方支付参数决,默认为空对象</td>
</tr>
<tr>
<td style="text-align: left;">KEY_PAY_CP_DATA</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">NSString</td>
<td>游戏数据</td>
</tr>
<tr>
<td style="text-align: left;">KEY_PAY_ATTACH</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">NSString</td>
<td>透传字段,创建成功和查询接口会原样返回</td>
</tr>
<tr>
<td style="text-align: left;">noticeUrl</td>
<td style="text-align: left;">NO</td>
<td style="text-align: left;">NSString *</td>
<td>1.5.1版本开始支持。 客户端决定的支付通知回调地址。如果客户端传入了此值,服务器将优先使用传入的值作为支付通知的回调地址。如果此值为空,则使用后台配置的地址作为回调地址。</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong></p>
<pre><code class="language-objc">typedef void(^MSLDSDKSuccess)(NSString *msg, id data);
typedef void(^MSLDSDKFail)(MSLDErrorCode code, NSString *msg, id errorData);</code></pre>
<p><strong>回调参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">MSLDErrorCode</td>
<td><a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">错误码</a></td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">NSString</td>
<td>状态详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">id</td>
<td>返回对象</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;"><a href="#jump_order">MSLDOrder</a></td>
<td>支付成功的订单信息</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-objc">MSLDAccount *account = [[MSLDSDK sharedInstance] syncActionWithLDUrl:ROUTE_ACCOUNT_LOGINED_USER_INFO param:nil];
NSMutableDictionary *param = [[NSMutableDictionary alloc] initWithCapacity:1];
[param msld_setObject:yourProductID forKey:KEY_PAY_PRODUCT_ID];
[param msld_setObject:@"iOS apple pay attach!" forKey:KEY_PAY_ATTACH];
[param msld_setObject:account.playerId forKey:@"playerId"];
[[MSLDSDK sharedInstance] actionWithLDUrl:ROUTE_PAY_PURCHASE_PRODUCT param:param success:^(NSString *msg, id data) {
// 购买成功
} fail:^(MSLDErrorCode code, NSString *msg, id errorData) {
// 购买失败
}];
</code></pre>
<h4>Facebook分享(哥伦布系统)</h4>
<h5>1. Facebook分享图片</h5>
<p><strong>简要描述:</strong></p>
<p>首先尝试调起Facebook原生app分享图片,若原生无法拉起或者用户未安装Facebook原生app则在应用内调用Facebook网页分享图片。</p>
<p><strong>功能说明:</strong></p>
<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>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">分享图片</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/mssdk?page_id=2630193199516192">ROUTE_SHARE_IMAGE</a></td>
<td style="text-align: left;">-</td>
</tr>
</tbody>
</table>
<p><strong>参数说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">是否必传</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">SHARE_SCENE</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">NSString</td>
<td>分享场景,详见下表</td>
</tr>
<tr>
<td style="text-align: left;">image</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">UIImage类型或图片的NSData</td>
<td>分享的图片对象</td>
</tr>
<tr>
<td style="text-align: left;">hashtag</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">NSString</td>
<td>话题标签</td>
</tr>
</tbody>
</table>
<p><strong>分享场景说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">SHARE_WECHAT_SESSION</td>
<td style="text-align: left;">NSString</td>
<td>分享到微信会话</td>
</tr>
<tr>
<td style="text-align: left;">SHARE_WECHAT_TIMELINE</td>
<td style="text-align: left;">NSString</td>
<td>分享到微信朋友圈</td>
</tr>
<tr>
<td style="text-align: left;">SHARE_QQ_FRIENDS</td>
<td style="text-align: left;">NSString</td>
<td>分享到QQ好友</td>
</tr>
<tr>
<td style="text-align: left;">SHARE_QQ_QZONE</td>
<td style="text-align: left;">NSString</td>
<td>分享到QQ空间</td>
</tr>
<tr>
<td style="text-align: left;">SHARE_FACEBOOK</td>
<td style="text-align: left;">NSString</td>
<td>分享到Facebook</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong></p>
<pre><code class="language-objc">typedef void(^MSLDSDKSuccess)(NSString *msg, id data);
typedef void(^MSLDSDKFail)(MSLDErrorCode code, NSString *msg, id errorData);</code></pre>
<p><strong>回调参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">MSLDErrorCode</td>
<td><a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">错误码</a></td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">NSString</td>
<td>状态详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">id</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-objc">UIImage *image = [UIImage imageNamed:@"bg_launcher"];
[[MSLDSDK sharedInstance] actionWithLDUrl:ROUTE_SHARE_IMAGE param:@{ SHARE_SCENE: SHARE_FACEBOOK, @"image": image , @"hashtag": @"#ConnectTheWorld"} success:^(NSString *msg, id data) {
// Facebook分享图片成功
} fail:^(MSLDErrorCode code, NSString *msg, id errorData) {
//Facebook分享图片失败
}];</code></pre>
<h5>2. Facebook分享链接</h5>
<p><strong>简要描述:</strong></p>
<p>首先尝试调起Facebook原生app分享链接,若原生无法拉起或者用户未安装Facebook原生app则在应用内调用Facebook网页分享链接。</p>
<p><strong>功能说明:</strong></p>
<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>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">分享链接</td>
<td style="text-align: left;">异步调用</td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/mssdk?page_id=2630193199516192">ROUTE_SHARE_WEBPAGE</a></td>
<td style="text-align: left;">-</td>
</tr>
</tbody>
</table>
<p><strong>参数说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">是否必传</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">SHARE_SCENE</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">NSString</td>
<td>分享场景,详见下表</td>
</tr>
<tr>
<td style="text-align: left;">webpageUrl</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">NSString</td>
<td>分享的链接地址</td>
</tr>
<tr>
<td style="text-align: left;">hashtag</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">NSString</td>
<td>话题标签</td>
</tr>
</tbody>
</table>
<p><strong>分享场景说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">SHARE_WECHAT_SESSION</td>
<td style="text-align: left;">NSString</td>
<td>分享到微信会话</td>
</tr>
<tr>
<td style="text-align: left;">SHARE_WECHAT_TIMELINE</td>
<td style="text-align: left;">NSString</td>
<td>分享到微信朋友圈</td>
</tr>
<tr>
<td style="text-align: left;">SHARE_QQ_FRIENDS</td>
<td style="text-align: left;">NSString</td>
<td>分享到QQ好友</td>
</tr>
<tr>
<td style="text-align: left;">SHARE_QQ_QZONE</td>
<td style="text-align: left;">NSString</td>
<td>分享到QQ空间</td>
</tr>
<tr>
<td style="text-align: left;">SHARE_FACEBOOK</td>
<td style="text-align: left;">NSString</td>
<td>分享到Facebook</td>
</tr>
</tbody>
</table>
<p><strong>回调声明:</strong></p>
<pre><code class="language-objc">typedef void(^MSLDSDKSuccess)(NSString *msg, id data);
typedef void(^MSLDSDKFail)(MSLDErrorCode code, NSString *msg, id errorData);</code></pre>
<p><strong>回调参数说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">MSLDErrorCode</td>
<td><a href="https://www.showdoc.cc/mssdk?page_id=2629915269319032">错误码</a></td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">NSString</td>
<td>状态详情</td>
</tr>
<tr>
<td style="text-align: left;">errorData</td>
<td style="text-align: left;">id</td>
<td>返回对象</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-objc">NSString *webpageUrl = @"https://developers.facebook.com";
[[MSLDSDK sharedInstance] actionWithLDUrl:ROUTE_SHARE_WEBPAGE param:@{ SHARE_SCENE: SHARE_FACEBOOK, @"webpageUrl": webpageUrl, @"hashtag": @"#ConnectTheWorld"} success:^(NSString *msg, id data) {
//Facebook分享链接成功
} fail:^(MSLDErrorCode code, NSString *msg, id errorData) {
// Facebook分享链接失败
}];</code></pre>