乐玩


乐玩iOS接入文档-内购-买量

<p>[TOC]</p> <h1>乐玩iOS接入文档</h1> <h2>1、开发环境搭建</h2> <h3>1.1、将 SDK 资源复制拖入到游戏工程</h3> <p><code>platform_config 为乐玩配置文件,参数是否需要修改请与运营人员确认</code></p> <pre><code class="language-json">{     &amp;quot;game&amp;quot;: &amp;quot;jihewangguozb-h5&amp;quot;,//独代层游戏标识     &amp;quot;ly_game&amp;quot;: &amp;quot;jihewangguo-h5&amp;quot;,//联运层游戏标识     &amp;quot;game_version&amp;quot;: &amp;quot;1.0&amp;quot;,     &amp;quot;sdk_version&amp;quot;: &amp;quot;1.0&amp;quot;,     &amp;quot;ly_api_secret&amp;quot;: &amp;quot;B8D2ff6KSw8WzizAa8&amp;quot;,//联运层key参数     &amp;quot;api_secret&amp;quot;: &amp;quot;B8D2ff6KSw8WzizAa8&amp;quot;,//独代层key 参数     &amp;quot;package_id&amp;quot;: &amp;quot;9&amp;quot;,//独代层     &amp;quot;channel_label&amp;quot;: &amp;quot;lewan&amp;quot;,//独代层     &amp;quot;channel_id&amp;quot;: &amp;quot;1&amp;quot;,//独代层     &amp;quot;game_id&amp;quot;: &amp;quot;74&amp;quot;,//独代层 &amp;quot;gdt_appid&amp;quot;:&amp;quot;xxxxxxx&amp;quot;,//广点通 appid     &amp;quot;gdt_appkey&amp;quot;:&amp;quot;xxxxxxx&amp;quot;,//广点通 appkey     &amp;quot;bd_appid&amp;quot;:&amp;quot;xxxxxxx&amp;quot;,//百度 appid     &amp;quot;bd_appkey&amp;quot;:&amp;quot;xxxxxxx&amp;quot;//百度 appkey }</code></pre> <pre><code>依赖的framework说明如下: LYSDK.framework、LWSDK.framework //乐玩SDK相关资源 LYSDKADUtils.h、LYSDKADUtils.m //乐玩穿山甲广告SDK相关 BUAdLive.framework、BUAdSDK.framework、CSJMediation.framework、CSJAdSDK.bundle//穿山甲广告SDK相关资源 BD_SDK //百度买量 SDK 相关 TT_SDK //巨量头条买量 SDK 相关 GDT_SDK //广点通买量 SDK 相关 SDKUtils //乐玩 SDK相关</code></pre> <p>拖入完请确保Copy Bundle Resources中有CSJAdSDK.bundle,否则可能出现icon图片加载不出来的情况。</p> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=8363edccfc70c24b617f41ab743144ec&amp;amp;file=file.png" alt="" /></p> <p>如果游戏使用CocoaPods管理包项目的话,CSJ广告部分请查看官方文档 <a href="https://www.csjplatform.com/supportcenter/5376">https://www.csjplatform.com/supportcenter/5376</a> 进行配置</p> <h3>1.2、Xcode工程配置</h3> <ul> <li>穿山甲SDK的运行环境</li> <li>支持系统iOS 11.0及以上;</li> <li>SDK编译环境 Xcode 14.1及以上;</li> <li>支持架构: x86-64, armv7, arm64,i386</li> </ul> <h4>1.2.1、添加权限</h4> <ul> <li>工程plist文件设置,点击右边的information Property List后边的 &quot;+&quot; 展开添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项自动加入,修改值为 YES。 SDK API 已经全部支持HTTPS,但是广告主素材存在非HTTPS情况。</li> </ul> <pre><code class="language-xml">&amp;lt;key&amp;gt;NSAppTransportSecurity&amp;lt;/key&amp;gt; &amp;lt;dict&amp;gt; &amp;lt;key&amp;gt;NSAllowsArbitraryLoads&amp;lt;/key&amp;gt; &amp;lt;true/&amp;gt; &amp;lt;/dict&amp;gt;</code></pre> <h4>1.2.2、build settings设置</h4> <ul> <li>Build Settings中Other Linker Flags 增加参数</li> </ul> <pre><code>-ObjC -l&amp;quot;c++&amp;quot; -l&amp;quot;c++abi&amp;quot; -l&amp;quot;sqlite3&amp;quot; -l&amp;quot;z&amp;quot; -all_load</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ab7f8a2a07d464995ce13c585d8baa36&amp;amp;file=file.png" alt="" /></p> <h4>1.2.3、添加依赖库</h4> <ul> <li>工程需要在TARGETS -&gt; Build Phases中找到Link Binary With Libraries,点击“+”,依次添加下列依赖库</li> </ul> <pre><code>CoreML.framework (6.3.0.0及以上版本新增) Accelerate.framework AdSupport.framework AppTrackingTransparency.framework AudioToolbox.framework AVFoundation.framework CoreGraphics.framework CoreImage.framework CoreLocation.framework CoreMedia.framework CoreMotion.framework CoreTelephony.framework CoreText.framework ImageIO.framework JavaScriptCore.framework MapKit.framework MediaPlayer.framework MobileCoreServices.framework QuartzCore.framework Security.framework StoreKit.framework SystemConfiguration.framework UIKit.framework WebKit.framework DeviceCheck.framework依赖(4.8.0.3及以上版本新增) libbz2.tbd libc++.tbd libiconv.tbd libresolv.9.tbd libsqlite3.tbd libxml2.tbd libz.tbd libc++abi.tbd</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=10c8900ff15ffdae7d908ac627c1d058&amp;amp;file=file.png" alt="" /></p> <h4>1.2.4、iOS17隐私策略适配说明</h4> <ul> <li>如果您的游戏本身包含PrivacyInfo.xcprivacy文件,请将穿山甲的PrivacyInfo.xcprivacy中的条款补全到自身的PrivacyInfo.xcprivacy中</li> <li>如果没有可以在工程点击 file-new-file 选择 PrivacyInfo 文件,然后使用source code方式打开复制以下内容</li> </ul> <pre><code class="language-xml">&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt; &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt; &amp;lt;dict&amp;gt; &amp;lt;key&amp;gt;NSPrivacyCollectedDataTypes&amp;lt;/key&amp;gt; &amp;lt;array/&amp;gt; &amp;lt;key&amp;gt;NSPrivacyAccessedAPITypes&amp;lt;/key&amp;gt; &amp;lt;array&amp;gt; &amp;lt;dict&amp;gt; &amp;lt;key&amp;gt;NSPrivacyAccessedAPIType&amp;lt;/key&amp;gt; &amp;lt;string&amp;gt;NSPrivacyAccessedAPICategoryFileTimestamp&amp;lt;/string&amp;gt; &amp;lt;key&amp;gt;NSPrivacyAccessedAPITypeReasons&amp;lt;/key&amp;gt; &amp;lt;array&amp;gt; &amp;lt;string&amp;gt;C617.1&amp;lt;/string&amp;gt; &amp;lt;string&amp;gt;DDA9.1&amp;lt;/string&amp;gt; &amp;lt;/array&amp;gt; &amp;lt;/dict&amp;gt; &amp;lt;dict&amp;gt; &amp;lt;key&amp;gt;NSPrivacyAccessedAPIType&amp;lt;/key&amp;gt; &amp;lt;string&amp;gt;NSPrivacyAccessedAPICategorySystemBootTime&amp;lt;/string&amp;gt; &amp;lt;key&amp;gt;NSPrivacyAccessedAPITypeReasons&amp;lt;/key&amp;gt; &amp;lt;array&amp;gt; &amp;lt;string&amp;gt;35F9.1&amp;lt;/string&amp;gt; &amp;lt;/array&amp;gt; &amp;lt;/dict&amp;gt; &amp;lt;dict&amp;gt; &amp;lt;key&amp;gt;NSPrivacyAccessedAPIType&amp;lt;/key&amp;gt; &amp;lt;string&amp;gt;NSPrivacyAccessedAPICategoryDiskSpace&amp;lt;/string&amp;gt; &amp;lt;key&amp;gt;NSPrivacyAccessedAPITypeReasons&amp;lt;/key&amp;gt; &amp;lt;array&amp;gt; &amp;lt;string&amp;gt;7D9E.1&amp;lt;/string&amp;gt; &amp;lt;string&amp;gt;E174.1&amp;lt;/string&amp;gt; &amp;lt;/array&amp;gt; &amp;lt;/dict&amp;gt; &amp;lt;dict&amp;gt; &amp;lt;key&amp;gt;NSPrivacyAccessedAPIType&amp;lt;/key&amp;gt; &amp;lt;string&amp;gt;NSPrivacyAccessedAPICategoryUserDefaults&amp;lt;/string&amp;gt; &amp;lt;key&amp;gt;NSPrivacyAccessedAPITypeReasons&amp;lt;/key&amp;gt; &amp;lt;array&amp;gt; &amp;lt;string&amp;gt;CA92.1&amp;lt;/string&amp;gt; &amp;lt;/array&amp;gt; &amp;lt;/dict&amp;gt; &amp;lt;/array&amp;gt; &amp;lt;/dict&amp;gt; &amp;lt;/plist&amp;gt;</code></pre> <h4>1.2.5、添加 SKAdNetwork 支持</h4> <ul> <li>将穿山甲的 SKAdNetwork ID 添加到 info.plist 中,以保证 SKAdNetwork 的正确运行</li> </ul> <pre><code class="language-xml">&amp;lt;key&amp;gt;SKAdNetworkItems&amp;lt;/key&amp;gt; &amp;lt;array&amp;gt; &amp;lt;dict&amp;gt; &amp;lt;key&amp;gt;SKAdNetworkIdentifier&amp;lt;/key&amp;gt; // SKAdNetwork方案的穿山甲SKAdNetwork id &amp;lt;string&amp;gt;238da6jt44.skadnetwork&amp;lt;/string&amp;gt; &amp;lt;/dict&amp;gt; &amp;lt;dict&amp;gt; &amp;lt;key&amp;gt;SKAdNetworkIdentifier&amp;lt;/key&amp;gt; // SKAdNetwork方案的穿山甲SKAdNetwork id &amp;lt;string&amp;gt;x2jnk7ly8j.skadnetwork&amp;lt;/string&amp;gt; &amp;lt;/dict&amp;gt; &amp;lt;dict&amp;gt; &amp;lt;key&amp;gt;SKAdNetworkIdentifier&amp;lt;/key&amp;gt; // SKAdNetwork方案的穿山甲SKAdNetwork id &amp;lt;string&amp;gt;22mmun2rn5.skadnetwork&amp;lt;/string&amp;gt; &amp;lt;/dict&amp;gt; &amp;lt;/array&amp;gt;</code></pre> <h4>1.2.6、支持苹果ATT</h4> <ul> <li>要获取 App Tracking Transparency 权限,请更新您的 Info.plist,添加 NSUserTrackingUsageDescription 字段和自定义文案描述。代码示例:</li> </ul> <pre><code class="language-xml">&amp;lt;key&amp;gt;NSUserTrackingUsageDescription&amp;lt;/key&amp;gt; &amp;lt;string&amp;gt;该标识符将用于向您投放个性化广告&amp;lt;/string&amp;gt;</code></pre> <h4>1.2.7、添加注册 URL scheme</h4> <ul> <li>在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”,输入应用对应的包名作为scheme头;</li> </ul> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=a0c3782d1fd09b07f72c06f893e18964&amp;amp;file=file.png" alt="" /></p> <h4>1.2.8、工程的大致配置如图所示</h4> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=471b08bc1f15e56c91be62720f38403a&amp;amp;file=file.png" alt="" /></p> <h2>2、功能接口 (注意:以下所有接口都必须在游戏收到 SDK 初始化完成之后才能调用)</h2> <p><code>引入头文件 #import &amp;lt;LWSDK/PlatformSDKHeader.h&amp;gt;</code></p> <h3>2.1、注册SDK回调监听 (必接)</h3> <pre><code class="language-objectivec">[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveSDKMessage:) name:PlatformSDKNotificationName object:nil]; - (void)receiveSDKMessage:(NSNotification *)notification { PlatformSDKNotification *result = [notification object]; if (result) { NSLog(@&amp;quot;游戏收到回调:%@&amp;quot;,result.toJsonString); int code = [result.statusCode intValue]; if (code == SDK_CODE_INIT_SUC) { NSLog(@&amp;quot;初始化成功&amp;quot;); }else if (code == SDK_CODE_LOGIN_SUC){ NSLog(@&amp;quot;登录成功&amp;quot;); NSDictionary *loginInfo = [[PlatformSDKUtils getInstance ] jsonStringToDictionary:result.message][@&amp;quot;d&amp;quot;]; NSString *uid = loginInfo[@&amp;quot;uid&amp;quot;]; NSString *token = loginInfo[@&amp;quot;sdk_token&amp;quot;]; NSLog(@&amp;quot;uid:%@\ntoken:%@&amp;quot;,uid,token); }else if (code == SDK_CODE_PAY_SUC){ NSLog(@&amp;quot;支付成功,实际到账以服务端为准&amp;quot;); //checkPay 状态为应该主动査询订单支付状态(客户端轮询发货方式适用),为 false 时表示用户未正常拉起支付,此时可不进行轮询,为 true 时应轮询订单支付状态 NSDictionary *payInfo = [[PlatformSDKUtils getInstance ] jsonStringToDictionary:result.message][@&amp;quot;order&amp;quot;]; NSLog(@&amp;quot;payInfo:%@&amp;quot;,payInfo); }else if (code == SDK_CODE_LOGOUT_SUC){ NSLog(@&amp;quot;SDK账号退出登录,游戏收到回调之后退出当前角色信息,回到登录界面再调用SDK的登录接口&amp;quot;); }else if (code == SDK_CODE_CHECKCHAT_SUC){ NSLog(@&amp;quot;敏感词校验回调&amp;quot;); }else if (code == SDK_CODE_VNAME_SUC){ NSLog(@&amp;quot;实名认证状态查询回调&amp;quot;); NSNumber *authStat = [[PlatformSDKUtils getInstance ] jsonStringToDictionary:result.message][@&amp;quot;authStat&amp;quot;]; // 0表示未实名,1表示已实名且已成年,2表示已实名未成年 NSLog(@&amp;quot;authStat:%@&amp;quot;,authStat); }else if (code == SDK_CODE_INITAD_SUC){ NSLog(@&amp;quot;广告初始化成功&amp;quot;); }else if (code == SDK_CODE_INIT_FAIL){ NSLog(@&amp;quot;广告初始化失败&amp;quot;); }else if (code == SDK_CODE_LOADAD_SUC){ NSLog(@&amp;quot;广告加载成功成功&amp;quot;); NSDictionary *load_ad = [[PlatformSDKUtils getInstance ] jsonStringToDictionary:result.message]; NSString *scene = load_ad[@&amp;quot;scene&amp;quot;]; NSNumber *code = load_ad[@&amp;quot;code&amp;quot;]; NSString *msg = load_ad[@&amp;quot;msg&amp;quot;]; NSLog(@&amp;quot;scene:%@\ncode:%@\nmsg:%@&amp;quot;,scene,code,msg); }else if (code == SDK_CODE_LOADAD_FAIL){ NSLog(@&amp;quot;广告加载失败&amp;quot;); NSDictionary *load_ad = [[PlatformSDKUtils getInstance ] jsonStringToDictionary:result.message]; NSString *scene = load_ad[@&amp;quot;scene&amp;quot;]; NSNumber *code = load_ad[@&amp;quot;code&amp;quot;]; NSString *msg = load_ad[@&amp;quot;msg&amp;quot;]; NSLog(@&amp;quot;scene:%@\ncode:%@\nmsg:%@&amp;quot;,scene,code,msg); }else if (code == SDK_CODE_SHOWAD_SUC){ NSLog(@&amp;quot;广告成功展示播放完毕&amp;quot;); NSDictionary *show_ad = [[PlatformSDKUtils getInstance ] jsonStringToDictionary:result.message]; NSString *scene = show_ad[@&amp;quot;scene&amp;quot;]; NSNumber *canReward = show_ad[@&amp;quot;canReward&amp;quot;]; NSNumber *code = show_ad[@&amp;quot;code&amp;quot;]; NSString *msg = show_ad[@&amp;quot;msg&amp;quot;]; NSLog(@&amp;quot;scene:%@\ncode:%@\nmsg:%@\ncanReward:%@&amp;quot;,scene,code,msg,canReward); }else if (code == SDK_CODE_SHOWAD_FAIL){ NSLog(@&amp;quot;广告播放失败或者跳过&amp;quot;); } } }</code></pre> <h3>2.2、初始化接口(必接)</h3> <p>调用初始化接口后会弹出隐私协议窗口,请游戏尽早在合适的时机调用</p> <h4>2.2.1、代码示例:</h4> <pre><code class="language-objectivec">#import &amp;lt;LWSDK/PlatformSDKHeader.h&amp;gt; #import &amp;quot;LYSDKEvent.h&amp;quot; [[PlatformSDK getInstance]initSDK:self];//乐玩 SDK 初始化 [[LYSDKEvent getInstance]initSDK];//买量相关 SDK 初始化</code></pre> <h3>2.3、登录接口(必接)</h3> <p>接口说明:游戏登录时调用</p> <h4>2.3.1、代码示例</h4> <pre><code class="language-objectivec">[[PlatformSDK getInstance]loginSDK:self];</code></pre> <h4>2.3.2、登录回调对象 LWSdkLoginResult 参数说明</h4> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>game</td> <td>游戏标识</td> </tr> <tr> <td>uid</td> <td>用户UID</td> </tr> <tr> <td>sdk_token</td> <td>用户登录态,用于服务端登录校验注意token有效期为5分钟,服务端需要在5分钟内完成校验</td> </tr> <tr> <td>channel</td> <td>渠道标识</td> </tr> <tr> <td>source_id</td> <td>乐玩广告标识</td> </tr> <tr> <td>real_name_stat</td> <td>用户实名状态,0未实名,1实名且成年,2实名未成年</td> </tr> </tbody> </table> <h3>2.4、提交角色数据接口(必接)</h3> <p>接口说明:游戏提交角色数据接口,该接口需要在以下4中情况下调用:</p> <ul> <li>角色登录成功</li> <li>角色升级</li> <li>创建角色</li> </ul> <h4>2.4.1、方法定义</h4> <pre><code class="language-objectivec">[[PlatformSDK getInstance]reportSDK:roleInfo];</code></pre> <h4>2.4.2、参数说明</h4> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>UIViewController</td> <td>上下文</td> </tr> <tr> <td>PlatformRoleInfo</td> <td>角色实体类对象</td> </tr> </tbody> </table> <pre><code>PlatformRoleInfo 实体类字段说明(以下参数都为必传参数,如游戏没有的传 &amp;quot;&amp;quot; 或者 &amp;quot;0&amp;quot;)</code></pre> <table> <thead> <tr> <th>字段名</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>ReportType</td> <td><code>创建角色</code> 调用类型 REPORT_CREATEROLE ,<code>角色进入游戏</code> 调用类型 REPORT_ENTER ,<code>角色升级</code> 调用类型 REPORT_ROLEUPGRADE</td> </tr> <tr> <td>serverId</td> <td>服务器ID,长度不超过20字符,建议使用字符串型数值,例如:1</td> </tr> <tr> <td>serverName</td> <td>服务器名称,长度不超过20字符</td> </tr> <tr> <td>zoneId</td> <td>大区ID, 如有必填,没有传&quot;&quot;,长度不超过100字符</td> </tr> <tr> <td>zoneName</td> <td>大区名称, 如有必填,没有传&quot;&quot;,长度不超过100字符</td> </tr> <tr> <td>isNew</td> <td>是否当前新创建角色,否为0,是为1</td> </tr> <tr> <td>roleId</td> <td>角色ID,长度不超过20字符,建议使用字符串型数值,例如:1</td> </tr> <tr> <td>roleName</td> <td>角色名称,长度不超过100字符,不设定角色名称可传 &quot;&quot;</td> </tr> <tr> <td>roleLevel</td> <td>角色等级,不设定可传 0</td> </tr> <tr> <td>vipLevel</td> <td>角色vip等级,不是VIP传0,是VIP传正常值</td> </tr> <tr> <td>gender</td> <td>角色性别,没有传&quot;0&quot;, 有传&quot;1&quot; 或 &quot;2&quot;(&quot;1&quot;代表男,&quot;2&quot;代表女)</td> </tr> <tr> <td>power</td> <td>角色战力值,若没传&quot;&quot;</td> </tr> <tr> <td>serverOpenTime</td> <td>开服时间,有则传时间,具体到秒,格式如:&quot;2022-02-02 10:00:00&quot;,若无则传&quot;&quot;</td> </tr> </tbody> </table> <h4>2.4.3、代码示例</h4> <pre><code class="language-objectivec">PlatformRoleInfo *roleInfo = [[PlatformRoleInfo alloc]init]; [roleInfo setServerId:@&amp;quot;28&amp;quot;]; [roleInfo setServerName:@&amp;quot;serverName&amp;quot;]; [roleInfo setZoneId:@&amp;quot;99&amp;quot;]; [roleInfo setZoneName:@&amp;quot;zoneName&amp;quot;]; [roleInfo setRoleId:@&amp;quot;66&amp;quot;]; [roleInfo setRoleName:@&amp;quot;playName&amp;quot;]; [roleInfo setRoleLevel:@77]; [roleInfo setVipLevel:@&amp;quot;3&amp;quot;]; [roleInfo setGender:@&amp;quot;1&amp;quot;]; [roleInfo setPower:@&amp;quot;&amp;quot;]; [roleInfo setServerOpenTime:@&amp;quot;2023-03-03 10:00:00&amp;quot;]; [roleInfo setReportType:REPORT_CREATEROLE]; [roleInfo setIsNew:@&amp;quot;1&amp;quot;]; [[PlatformSDK getInstance]reportSDK:roleInfo];</code></pre> <h3>2.5、支付接口(必接)</h3> <h4>2.5.1、方法定义</h4> <pre><code class="language-objectivec">[[PlatformSDK getInstance]startPay:self PlatformPayInfo:payInfo];</code></pre> <h4>2.5.2、参数说明</h4> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>UIViewController</td> <td>上下文</td> </tr> <tr> <td>PlatformPayInfo</td> <td>支付实体类对象</td> </tr> </tbody> </table> <pre><code> 支付信息实体类(PlatformPayInfo)字段说明</code></pre> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>amount</td> <td>订单金额,单位:分;例如:600</td> </tr> <tr> <td>propName</td> <td>道具商品名称,长度不超过50字符。如无传&quot;&quot;</td> </tr> <tr> <td>propId</td> <td>道具商品ID,iOS 传苹果内购商品 ID(找运营获取内购列表)</td> </tr> <tr> <td>productDesc</td> <td>商品详细说明。如无传&quot;&quot;</td> </tr> <tr> <td>serverId</td> <td>服务器ID,长度不超过20字符,建议使用字符串型数值。</td> </tr> <tr> <td>serverName</td> <td>服务器名称,长度不超过20字符,建议使用字符串型数值。</td> </tr> <tr> <td>roleId</td> <td>角色ID,长度不超过64字符,建议使用字符串型数值。</td> </tr> <tr> <td>roleName</td> <td>角色名称,长度不超过100字符,不设定角色名称可传&quot;&quot;</td> </tr> <tr> <td>roleLevel</td> <td>角色等级,不设定可传 0</td> </tr> <tr> <td>zoneId</td> <td>大区ID, 如有必填,没有则传&quot;1&quot;,长度不超过60字符</td> </tr> <tr> <td>zoneName</td> <td>大区名称, 如有必填,没有传&quot;&quot;,长度不超过60字符</td> </tr> <tr> <td>attach</td> <td>附带参数,支付成功的回调中会带上该参数。</td> </tr> <tr> <td>cpOrderSn</td> <td>CP方订单唯一标识,长度不超过64字符,例如:sgbw2020123456789。</td> </tr> </tbody> </table> <h4>2.5.3、代码示例</h4> <pre><code class="language-objectivec">PlatformPayInfo *payInfo = [[PlatformPayInfo alloc]init]; NSString *orderId = [NSString stringWithFormat:@&amp;quot;test_%@&amp;quot;,[self getCurrentTimestamp]]; [payInfo setCpOrderSn:orderId]; [payInfo setAmount:@&amp;quot;1&amp;quot;]; [payInfo setProductDesc:@&amp;quot;商品详情&amp;quot;]; [payInfo setPropName:@&amp;quot;商品名xx&amp;quot;]; [payInfo setPropId:@&amp;quot;product_id_1&amp;quot;];//苹果内购商品 ID [payInfo setServerId:@&amp;quot;28&amp;quot;]; [payInfo setServerName:@&amp;quot;serverName&amp;quot;]; [payInfo setZoneId:@&amp;quot;99&amp;quot;]; [payInfo setZoneName:@&amp;quot;zoneName&amp;quot;]; [payInfo setRoleId:@&amp;quot;66&amp;quot;]; [payInfo setRoleName:@&amp;quot;playName&amp;quot;]; [payInfo setRoleLevel:@77]; [payInfo setAttach:@&amp;quot;hello&amp;quot;]; [[PlatformSDK getInstance]startPay:self PlatformPayInfo:payInfo];</code></pre> <h4>2.5.4、客户端支付回调 msg 说明</h4> <pre><code> {&amp;quot;code&amp;quot;:0,&amp;quot;msg&amp;quot;:&amp;quot;close&amp;quot;,&amp;quot;order&amp;quot;:{&amp;quot;cpOrderSn&amp;quot;:&amp;quot;xxxxx&amp;quot;,&amp;quot;checkPay&amp;quot;:false}}</code></pre> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>code</td> <td>0默认响应,-1异常</td> </tr> <tr> <td>msg</td> <td>提示消息</td> </tr> <tr> <td>order</td> <td>回调订单信息对象</td> </tr> <tr> <td>order.cpOrderSn</td> <td>当前回调对应的CP订单号</td> </tr> <tr> <td>order.checkPay</td> <td>是否应该主动査询订单支付状态(客户端轮询发货方式适用),为 <code>false</code> 时表示用户未正常拉起支付,此时可不进行轮询,为 <code>true</code> 时应轮询订单支付状态</td> </tr> </tbody> </table> <h3>2.6、账号注销退出登录(必接)</h3> <h4>2.6.1、判断是否有账号注销退出功能 方法定义</h4> <pre><code class="language-objectivec">[[PlatformSDK getInstance]hasLogout]</code></pre> <h4>2.6.2、调用账号注销退出登录 方法定义</h4> <pre><code class="language-objectivec">[[PlatformSDK getInstance]logoutSDK:self]</code></pre> <h4>2.6.3、代码示例</h4> <pre><code class="language-objectivec">if ([[PlatformSDK getInstance]hasLogout]) { [[PlatformSDK getInstance]logoutSDK:self]; }else{ //渠道无注销账号退出登录功能,游戏直接退出当前账号角色返回到初始界面调用SDK的登录接口 }</code></pre> <h3>2.7、敏感词校验(必接)</h3> <h4>2.7.1、判断是否有敏感词校验功能 方法定义</h4> <pre><code class="language-java">[[PlatformSDK getInstance]hasCheckChat]</code></pre> <h4>2.7.2、调用敏感词校验 代码示例</h4> <pre><code class="language-java">if ([[PlatformSDK getInstance]hasCheckChat]) { [[PlatformSDK getInstance]checkChat:@&amp;quot;敏感词测试:●●●&amp;quot;]; }else { //渠道无敏感词校验方法,游戏需自行实现 }</code></pre> <pre><code> 回调说明</code></pre> <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;">code</td> <td style="text-align: left;">是</td> <td style="text-align: left;">int</td> <td>响应状态,1成功,-1异常</td> </tr> <tr> <td style="text-align: left;">msg  </td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>响应结果说明</td> </tr> <tr> <td style="text-align: left;">d  </td> <td style="text-align: left;">是</td> <td style="text-align: left;">object</td> <td>校验结果主体</td> </tr> <tr> <td style="text-align: left;">d.suggest  </td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>有risky、pass、review三种值。pass表示不包含敏感词,risky包含敏感词</td> </tr> <tr> <td style="text-align: left;">d.label  </td> <td style="text-align: left;">是</td> <td style="text-align: left;">int</td> <td>命中标签枚举值,100 正常;10001 广告;20001 时政;20002 色情;20003 辱骂;20006 违法犯罪;20008 欺诈;20012 低俗;20013 版权;21000 其他</td> </tr> <tr> <td style="text-align: left;">d.risky_word  </td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>命中敏感词</td> </tr> </tbody> </table> <h3>2.8、实名认证状态查询(必接) 在登录账号完成之后调用一次</h3> <h4>2.8.1、方法定义</h4> <pre><code> 回调结果 {&amp;quot;authStat&amp;quot;:1} 0表示未实名,1表示已实名且已成年,2表示已实名未成年</code></pre> <h4>2.8.2、代码示例</h4> <pre><code class="language-objectivec">[[PlatformSDK getInstance]checkIdAuth:self]</code></pre> <h3>2.9、广告接口(必接)游戏应在登录回调后调用</h3> <table> <thead> <tr> <th>参数</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>UIViewController</td> <td>上下文</td> </tr> <tr> <td>AdId</td> <td>广告位key</td> </tr> </tbody> </table> <h4>2.9.1、广告初始化(必接)</h4> <pre><code class="language-objectivec">[[LYSDKADUtils getInstance] initAd:self];</code></pre> <h4>2.9.2、加载广告(必接)</h4> <pre><code>视频广告预加载,需要在初始化完成后调用。 游戏应该在首次出现广告播放按钮的界面调用一次此接口,后续可以在播放完成后调用进行预加载。 注意:首次调用会拉起用户授权,为了合规需要,游戏应该在有广告按钮展示的界面再调用此接口。 如果出现广告拉起失败的情况,游戏可以调用一次此接口,但切勿一直重试,一直加载而不展示会影响广告后续填充率。</code></pre> <pre><code class="language-objectivec">[[LYSDKADUtils getInstance]loadAd:self];</code></pre> <p>响应参数说明9.3</p> <p>响应结果为json字符串,解析后字段如下:</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;">code</td> <td style="text-align: left;">是</td> <td style="text-align: left;">int</td> <td>加载结果,1:加载成功,2:加载失败</td> </tr> <tr> <td style="text-align: left;">msg  </td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>加载结果说明</td> </tr> <tr> <td style="text-align: left;">scene</td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>场景标识</td> </tr> </tbody> </table> <h4>2.9.3、显示广告(必接)</h4> <pre><code class="language-objectivec">[[LYSDKADUtils getInstance]showAd:self];//调用此接口发起视频展示。</code></pre> <p>响应结果为json字符串,解析后字段如下:</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;">code</td> <td style="text-align: left;">是</td> <td style="text-align: left;">int</td> <td>广告播放状态码。1:播放成功,2:播放失败(此时应重试一次广告加载并播放,但切勿一直重试)</td> </tr> <tr> <td style="text-align: left;">canReward  </td> <td style="text-align: left;">是</td> <td style="text-align: left;">int</td> <td>是否满足奖励发放条件,1:满足;0:不满足(广告未播放完成或者广告播放异常)</td> </tr> </tbody> </table> <h3>2.10 打开用户中心(选接)</h3> <h4>2.10.1、方法定义</h4> <pre><code> 游戏界面内合适的位置添加按钮调用打开</code></pre> <h4>2.10.2、代码示例</h4> <pre><code class="language-objectivec">[[PlatformSDK getInstance]openUserCenter:self];</code></pre> <h3>3.1、生命周期相关(必接)</h3> <h3>3.1.1 和 3.1.2 ,2选1接入即可</h3> <h4>3.1.1、使用 AppDelegate</h4> <pre><code class="language-objectivec">#import &amp;quot;LYSDKEvent.h&amp;quot; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[LYSDKEvent getInstance] application:application didFinishLaunchingWithOptions:launchOptions]; return YES; } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary&amp;lt;UIApplicationOpenURLOptionsKey,id&amp;gt; *)options{ [[LYSDKEvent getInstance]application:app openURL:url options:options]; return YES; }</code></pre> <h4>3.1.2、使用 SceneDelegate</h4> <pre><code class="language-objectivec">#import &amp;quot;LYSDKEvent.h&amp;quot; - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions { [[LYSDKEvent getInstance] scene:scene willConnectToSession:session options:connectionOptions]; } - (void)scene:(UIScene *)scene openURLContexts:(NSSet&amp;lt;UIOpenURLContext *&amp;gt; *)URLContexts{ [[LYSDKEvent getInstance] scene:scene openURLContexts:URLContexts]; }</code></pre>

页面列表

ITEM_HTML