Skip to content

LCM iOS SDK 接入指南

若本地文档不显示图片,请直接访问LCM在线文档

RC9.8.0更新内容:

    1.新增个人信息收集清单接口  
    2.新增第三方信息共享清单功能接口    
    3.D商店新增初始化、登录打点    
    4.移除IMEI、IMSI、MAC采集   
    5.新增Apple Search Ads 归因信息打点,上报阿里云  
    6.阿里云打点 新增Web加载失败打点(实名、适龄、隐私、客服)以及其他打点   
    7.其他优化  

一.SDK 集成

1.1 集成方式

  • 下载并解压iOS SDK
  • 根据不同环境导入不同的库

从RC9.6.0开始,CN D商店和 AP D商店进行合并,结构如下:

环境 接入地区 基础库 lcm 广告 AdvProvider 商店 StoreProvider 推送 PushProvider 绑定 SocialProvider
D商店 大陆 必须导入 导入appsflyer、talkingdata 导入StoreProvider 无需导入 无需导入
无商店 日韩 必须导入 咨询市场、运营 无需导入 无需导入 需要导入

RC9.6.5新增Universal Link配置,所有微信、QQ相关的(登录、分享、Link)都需配置,配置如下
1. TARGET -> Info.plist的 LSApplicationQueriesSchemes项 新增 weixinULAPI
2. 配置Associated Domains 权限: TARGET -> Sigining & Capabilities -> Capability -> Associated Domains -> 添加 applinks:cn-live-ope.mobage.cn

RC9.6.4新增广点通Firebase Analytics广告,前者国内广告,后者海外广告。

RC9.6.3目录结构调整,将QQ微信Facebook三方库整合到公共三方文件夹PublicThirdLib,另外将StoreProvider目录下的share 提升到ShareProvider目录内。

注意(为了防止苹果审核出问题,海外不要有微信、QQ相关,国内不要有Google、Facebook相关):
1. 对于国内D商店游戏接入,需要将SocialProviderStoreProvider/login/GoogleStoreProvider/login/FacebookShareProvider/FacebookPublicThirdLib/Facebook删掉。
2. 对于海外D商店游戏接入,需要将SocialProviderStoreProvider/login/WechatStoreProvider/login/QQShareProvider/WechatShareProvider/TencentQQPublicThirdLib/TencentQQPublicThirdLib/WechatRiskControlProvider/TongDunRiskControlRiskControlProvider/TengXunFaceVerifyRiskControl删掉。
3. 对于海外无商店游戏接入,需要将StoreProviderShareProvider/WechatShareProvider/TencentQQPublicThirdLib/TencentQQPublicThirdLib/WechatRiskControlProvider/TongDunRiskControlRiskControlProvider/TengXunFaceVerifyRiskControl删掉。

  • 添加依赖库
  • SystemConfiguration.framework
  • AVFoundation.framework
  • ImageIO.framework
  • AdSupport.framework
  • CoreLocation.framework
  • CoreMotion.framework
  • Security.framework
  • CoreTelephony.framework
  • StoreKit.framework
  • libz.tbd
  • libc++.tbd
  • libsqlite3.0.tbd

若使用同盾sdk插件(RiskControlProvider/TongDunRiskControl),需要新增依赖(CN使用,海外删掉): - libresolv.9.tbd

若使用腾讯刷脸sdk插件(RiskControlProvider/TengXunFaceVerifyRiskControl),需要新增依赖(CN使用,海外删掉): - Accelerate.framework
- MobileCoreServices.framework
- CoreVideo.framework
- CoreMedia.framework
- AudioToolbox.framework
- WebKit.framework

  • 工程里新建 并 配置 appInfo.json(可以copypickle工程里面的到游戏项目里)
    {"appVersion":"1.0","sandbox":"false","region":"cn"}

    参数 说明
    appVersion 游戏版本:例如 1.0.1
    sandbox 是否是沙箱环境:正式服为true,沙箱服为false
    region 地区:大陆为cn,海外游戏为 ap
  • 点击项目->点击Build Setting ->搜索Other Linker Flags ->添加-ObjC

  • 推送设置:如果游戏有推送功能,点击项目->点击Capabilities ->搜索Push Notifications ->打开NO

  • 点击项目->点击Capabilities ->搜索Keychain Sharing ->打开NO ,并添加以下:
  • com.store.denacn.shared
  • com.LCM.shared
  • com.denachina.lcm
  • com.store.denatw.shared
  • com.mobage.shared

  • 点击项目->点击Info,为Info.plist 添加5个权限:(相机和相册权限是RC9.5.3开始加入,保存游戏截图到相册权限是RC9.5.5加入,广告权限是RC9.6.7 iOS 14加入)
    <key>NSCalendarsUsageDescription</key>
    <string>为了使用本地定时推送,需要使用您的日历权限</string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>为了保存游戏截图到相册,需要使用您的相册权限</string>
    <key>NSCameraUsageDescription</key>
    <string>为了客服沟通可以上传照片,需要使用您的相机权限</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>为了客服沟通可以上传游戏截图,需要使用您的相册权限</string>
    <key>NSUserTrackingUsageDescription</key>
    <string>需要获取您的IDFA广告标识符权限,以用于定制化广告投放,未经同意我们不会用于其他目的。开启后,您也可以前往系统中“设置-隐私-跟踪”随时关闭。</string>

1.2 配置第三方登录

1.3【非必接】配置Link/Load(绑定)

二.初始化SDK

2.1 导入头文件

  • 在工程的AppDelegate.m里面导入头文件

    #import <lcm/LCMAPI.h>

  • 并且实现协议<LCMEventHandler>

    @interface AppDelegate ()<LCMEventHandler>

- (void) onRemoteMessage:(NSString *)message withExtras:(NSString *)extras{
    NSLog(@"message: %@, extras: %@",message,extras);
}
-(void) onLoginComplete:(NSString *)accessToken withUser:(LCMUser *)user{
    NSLog(@"onLoginComplete: %@",accessToken);
}
- (void) onSessionError:(LCMError *)error{
    NSLog(@"lcmerror: %@",error.errorMessage);
}
- (void) onSessionUpdate:(NSString *)accessToken withUser:(LCMUser *)user{
    NSLog(@"user info: %@",user/*[user toDictionary]*/);
}
- (void) onLogoutComplete:(NSString *)extra{

}
- (void) onInitComplete:(LCMInitializer *)initializer{
    if (initializer.error) {
        NSLog(@"onInitError: %@", initializer.error.errorMessage);

    }else{
        NSLog(@"InitComplete");
        [initializer continueProcessing];
    }
}

- (void)onAdditionalOrder:(NSDictionary *)extras withError:(LCMError *)error
{
    if (error) {
        // 加上游戏自己逻辑,如果游戏自身有锁的话,要移除锁
        // 游戏不需要提示错误信息
    } else {
        // extras:  @{@"status":@"0",@"payInfo":payInfoDic,@"sku":@"com.demo.product1"}
        // extras[@"sku"] 为商品编号  (游戏只会用到这个)
        // extras[@"payInfo"][@"tradeNo"] 当前苹果流水号
        // extras[@"payInfo"][@"receipt"] 苹果票据信息

        NSInteger code = [[extras objectForKey:@"code"] integerValue];
        switch (code) {
            case 0:
                NSLog(@"补单成功"); break;
            case 1:
                NSLog(@"订阅成功"); break;
            case 2:
                NSLog(@"订阅套餐更改成功"); break;
            case 3:
                NSLog(@"兑换商品完成(普通商品)"); break;
            case 4:
                NSLog(@"兑换商品完成(自动续期订阅商品)"); break;
            case 5:
                NSLog(@"自动续期订阅恢复成功"); break;
            default:
                NSLog(@"补单成功");
                break;
        }
        // 加上游戏自己逻辑,告知玩家购买成功,如果游戏自身有锁的话,要移除锁
    }
}

// 收到推广码交易请求
- (void)onReceivePromotingPurchaseRequest:(LCMVCBundle *)bundle
{
    // 游戏根据bundle判断是否触发购买逻辑
    [bundle buy:@"" withCallback:^(LCMWallet *wallet, NSDictionary *payInfo, NSString *memo, LCMError *error) {
        // 支付结果处理代码
    }];
}

2.2 初始化SDK

【PS:老游戏(接过9.5.3之前版本)忽略,新游戏对接,需要在调用[LCMSDK init:self WithOptions:launchOptions]之前调用[LCMSDK setSDKProxy:[XXXclass class]]XXXclass为实现了<LCMEventHandler>的封装LCM SDK方法的实现类】

在工程的AppDelegate.m里面导入头文件- (BOOL)application: application: didFinishLaunchingWithOptions:里添加LCM的初始化方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //在viewController之后调用init初始化,以防在某些回调中使用viewController时对象还未生成
    [LCMSDK init:self WithOptions:launchOptions];
    return YES;
}

2.3 onSessionError:处理

游戏研发需要在回调函数onSessionError:,判断对应的错误码类型,展示对应的错误信息弹窗。

error.errorCode 说明
AUTH_SESSION_OCCUPIED 账号已在异地登录
AUTH_USER_FREEZE_TEMPORARY 账户已被临时冻结
AUTH_USER_FREEZE_PERMANENT 账户已被永久冻结
AUTH_STORE_PROVIDER_ERROR 登录失败
AUTH_SESSION_HEALTHTIME_EXCEED 玩游戏时间过长(RC9.6.0新增)

2.4 登陆后公告检测

游戏研发在onLoginComplete: withUser:回调里面调用[LCMSDK checkAnnouncement];接口。

2.5 获取商品列表

游戏研发需要调用[LCMVCBundle getAsList:]获取商品信息,商店里展示获取的商品列表,另外玩家点击购买调用[bundle buy: withCallback:]接口。

/**
 * 【支付接入】
 * 推荐App在应用初始化的阶段就获取相关的应用内可购买道具
 * 获取可被购买的道具列表,并保存在内存中,以便之后购买
 **/
[LCMVCBundle getAsList:^(NSArray *bundles, LCMError *error) {
    if(error){
        NSLog(@"fetchVCBundle error, errorCode %ld, errorMessage: %@",(long)error.errorCode,error.errorMessage);
    }else{
        for (LCMVCBundle *vcBundle in bundles) {
            NSLog(@"%@", vcBundle.sku);
        }
    }
}];

2.6 购买商品

当玩家点击商品购买时触发[bundle buy: withCallback:]购买行为,购买失败时,游戏接入方需要弹框告知玩家对应的错误类型;当购买成功,需要研发告知游戏服务端购买成功,进行发放道具相关逻辑。

[bundle buy:@"透传参数" withCallback:^(LCMWallet *wallet, NSDictionary *payInfo, NSString *memo, LCMError *error) {
        if (error) {
            NSLog(@"支付发生错误,原因: %@",error.description);
            if (error.errorCode == 410) {
                NSLog(@"支付通道关闭");
            }
            else if (error.errorCode == 406) {
                NSLog(@"账户异常,请联系客服");
            }
            else if (error.errorType == BANK_PURCHASE_IS_LOCKED_ERROR) {
                NSLog(@"上笔订单未完成,无法创建新订单");
            }
            else if (error.errorType == BANK_PURCHASE_USER_CANCEL) {
                NSLog(@"用户取消支付");
            }
            else if (error.errorType == REAL_NAME_CANCEL_AND_NOT_SKIP) {
                NSLog(@"玩家未完成实名认证,无法进行购买");
            }
            else {// 其他错误信息-游戏请直接提示->连接苹果商店失败,请重启设备或切换网络后重新购买! error.errorMessage 提示不友好.
                NSLog(@"连接苹果商店失败,请重启设备或切换网络后重新购买!");
            }
        }
        else {
            NSLog(@"购买成功");
            // 去服务端验证订单信息、发放道具等
        }
    }];

补充LCMError错误类型:

error.errorCode 说明
406 账户异常,请联系客服
410 支付通道关闭
BANK_PURCHASE_IS_LOCKED_ERROR 上笔订单未完成,无法创建新订单
BANK_PURCHASE_USER_CANCEL 玩家取消了购买
REAL_NAME_CANCEL_AND_NOT_SKIP 玩家未完成实名认证,无法进行购买

2.6.1 查询苹果商店付款货币代码(选接)

LCM登录成功后,调用该接口;货币代码请参考 https://www.iban.hk/currency-codes

[LCMSDK queryPaymentCurrencyCode:^(NSString *currencyCode, NSLocale *priceLocal, LCMError *error) {
        if (error) {
            NSLog(@"查询商店付款货币代码失败,原因:%@", error.toNSString);
        } else {
            NSLog(@"查询商店付款货币代码成功,货币代码为:%@", currencyCode);
        }
}]; 

2.7 分享(选接,RC9.6.0新增)

国内暂时支持微信、QQ分享,海外支持facebook、Line分享;
分享不一定有回调,不可依赖分享回调,只要调用了分享,默认按成功处理。

2.7.1 接口分享

- (void)share:(NSString *)platform
{
    // 构建分享模型
    // 分享平台
    LCMSharePlatformType platformType = LCMSharePlatformWechat;// 微信
    if ([platform isEqualToString:@"QQ"]) {// QQ
        platformType = LCMSharePlatformQQ;
    }
    else if ([platform isEqualToString:@"Facebook"]) {// FB
        platformType = LCMSharePlatformFacebook;
    }
    else if ([platform isEqualToString:@"Line"]) {// Line
        platformType = LCMSharePlatformLine;
    }

    // 分享内容 - 图片分享/链接分享 - 代码示例是随机模拟
    LCMShareContentType contentType = arc4random_uniform(2) ? LCMShareContentImage : LCMShareContentURL;
    // 分享场景 - 会话分享/朋友圈分享
    LCMShareSceneType sceneType = arc4random_uniform(2) ? LCMShareSceneSession : LCMShareSceneTimeline;

    // 发起分享
    LCMShareModel *shareModel  = [LCMShareModel new];
    shareModel.platformType    = platformType;// 分享平台 微信/QQ/FB/Line
    shareModel.sceneType       = sceneType;// 分享场景
    shareModel.contentType     = contentType;// 分享内容
    shareModel.shareURL        = @"https://www.baidu.com";// 分享链接<链接分享时不可为空>
    shareModel.title           = @"标题";// 分享标题
    shareModel.descriptionText = @"描述";// 分享描述信息
    shareModel.imageData       = UIImagePNGRepresentation([UIImage imageNamed:@"bg"]);// 图片<图片分享时,不可为空>
    shareModel.thumbImageData  = UIImagePNGRepresentation([UIImage imageNamed:@"icon"]);// 图片缩略图<图片分享时,不可为空>

    // 由于微信和QQ分享结果不可信而且不一定会有回调,故只要调用了分享,默认按成功处理。所以如果游戏发奖励,调用分享后 直接发,不要依赖分享回调。
    [LCMSDK share:shareModel success:^{
        showMsg(@"分享成功");
    } failure:^(NSError *error) {
        NSString *msg = [NSString stringWithFormat:@"分享失败,原因:%@", error.userInfo];
        showMsg(msg);
    }];
}

2.7.2 截屏分享

[LCMSDK screenshotShare:^{
            NSLog(@"截屏分享成功");
        } failure:^(NSError *error) {
            NSLog(@"截屏分享失败,原因:%@", error.description);
        }];

接口调用后、分享页面如下所示:

2.7.3 获取facebook好友列表(返回的是lid列表)

    [LCMSDK getFriendsList:^(NSArray *lidList, LCMError *error) {

        if (error) {
            NSLog(@"%@",[NSString stringWithFormat:@"获取FB好友列表失败,原因:%@", error.errorMessage]);
        }
        else {
            if (lidList.count==0) {
                NSLog(@"无好友同玩该游戏");
            }else {
                NSLog(@"%@",[NSString stringWithFormat:@"获取FB好友Lid列表为:\n%@", [lidList componentsJoinedByString:@"、"]]);
            }
        }
    }];

三.其它功能

3.1 登录/退出登录

  • 登录

    [LCMSDK login];

  • 退出登录

    [LCMSDK logout];

  • 跳过登录配置(选接)

Info.plist 里配置key为 canSkipLogin,value为 YES即登录可跳过;

3.2 Menubar控制

  • 隐藏Menubar

    [LCMSDK hideMenubar];

  • 显示Menubar

    [LCMSDK showMenubar];

  • 显示Menubar,按照指定位置

    [LCMSDK showMenubarWithPosition:(int)position];

参数 说明
MENUBAR_POSITION_LEFT_TOP Menubar显示在左上角
MENUBAR_POSITION_RIGHT_TOP Menubar显示在右上角
MENUBAR_POSITION_LEFT_BOTTOM Menubar显示在左下角
MENUBAR_POSITION_RIGHT_BOTTOM Menubar显示在右下角
  • Info.plist配置MenuBarPosition(Number类型)参数,控制Menubar默认显示的位置
参数 说明
-1 Menubar默认不显示
0 Menubar默认显示在左上角
1 Menubar默认显示在右上角
2 Menubar默认显示在左下角
3 Menubar默认显示在右下角

3.3【必接】游戏事件打点

[LCMSDK setExtra:@"CreateRole" withDetail:json];详细参考

3.4【非必接】帐号绑定/载入/解绑第三方账户(Link/Load)

详细参考

3.5 调起客服

[LCMSDK showCSInViewController:0];

3.6 调起账户页面

[LCMSDK additionalFunction:STORE_ACCOUNT_MANAGER];

3.7 本地推送

详细参考

3.8 LCM SDK log开启、关闭

Info.plist配置debugLog(Boolean类型)参数,YES为开启日志,NO为关闭日志。

3.9 海外版本语言国际化配置

详细参考

3.10 客服界面错屏处理

Info.plist配置LCMBlackDeal(Boolean类型)参数YES

3.11 苹果评分

[LCMSDK requestReview:(NSString*)appID];

3.12 快捷指令

a、工程配置
    <1>info.plist配置
        在info.plist中增加NSUserActivityTypes项(Array类型),
        并在该项下增加一项 值为:包名+'.LCMShortcuts',
        例如包名为com.denachina.pickle,则添加项目为'com.denachina.pickle.LCMShortcuts'  
    <2>添加权限
       Xcode10以及之前版本,请在Capabilities中打开Siri权限
       Xcode11+,请在Signing & Capabilities中添加Siri权限
       如果添加权限失败,请找LCM支持同学,需要在苹果开发者后台开通Siri权限。
b、调用示例代码
/*@func  加载默认快接指令-简洁接口
 *@param title标题、Siri与搜索会用到
 *@param receiveBlock 用户唤起快接指令回调;假如您定义的快接方式为打开游戏Boss副本,收到此回调后,进入该Boss副本.
 *注意:必须配置快接方式类型到info.plist->NSUserActivityTypes下,格式为 包名+'.LCMShortcuts'
 */
[LCMRecommendedShortcutWrapper loadShortcuts:@"打开游戏Boss副本" receiveShortcuts:^{
        NSLog(@"收到快接指令回调,打开游戏Boss副本");
        // 游戏代码...
    }];
c、测试
游戏运行一次后,做如下操作
  <1>从苹果商店下载快捷指令APP、可以添加本游戏为快捷指令,点击所设快捷指令,可以打开游戏;
  <2>iOS9.0+ 可以在搜索(Spotlight)中 键入所设置title(示例代码为打开游戏Boss副本),可以搜索到本游戏;
  <3>打开Siri、语音说出所设置title(示例代码为打开游戏Boss副本),即可打开游戏。

3.13 App Store支付货币类型查询接口

    [LCMSDK queryPaymentCurrencyCode:^(NSString *currencyCode, NSLocale *priceLocal, LCMError *error) {
        if (error) {
            NSLog(@"查询商店付款货币代码失败,原因:%@", error.toNSString);
        } else {
            NSLog(@"查询商店付款货币代码成功,货币代码为:%@", currencyCode);
        }
    }];

3.14 游戏自定义日志上报功能 - 阿里云通道

/*
 自定义阿里云日志通道 - 选接
 @param config 阿里云日志通道参数<json格式> "{\"ALIYUN_ENDPOINT\" : \"节点\", \"ALIYUN_ACCESS_KEY_ID\" : \"KEY_ID\",\"ALIYUN_ACCESS_KEY_SECRET\" : \"SECRET\",\"ALIYUN_PROJECT\" : \"PROJECT\",\"ALIYUN_LOGSTORE\" : \"LOGSTORE\"}"
 @note 如需自定义,必须在 调用 trackGameEvent:eventInfo: 接口前设置
 */
[LCMSDK setGameTrackConfig:(NSString *)config];
 [LCMSDK trackGameEvent:"游戏自定义事件ID" eventInfos:"游戏自定义日志字符串"];

3.15 展示隐私/用户协议接口

    /*
        展示隐私协议
    */
    [LCMSDK showAgreement:LCMAgreementTypePrivacyAgreement];

    /*
        展示用户协议
    */
    [LCMSDK showAgreement:LCMAgreementTypeUserAgreement];

    /*
        展示个人信息收集清单界面
    */
    [LCMSDK showUserPersonalInfoCollectionList];

    /*
        展示第三方信息共享清单功能界面
    */
    [LCMSDK showThirdPartyInfoSharingList];

四.SDK UI自定义

4.1 激活码自定义UI

/**
 * 【onActivation】
 * LCMSDK必接接口
 * LCMSDK的激活码事件回调函数,
 * App会在登录时获取激活码信息(若配置),
 * 如果发现需要激活码再能进入,会在此回调中返回游戏相关内容,
 * 游戏需要在此回调中绘制UI请求用户输入激活码,
 * 调用[LCMSDK authCode:code]函数,将激活码告诉LCMSDK,
 * 当游戏需要LCMSDK继续之后的登录流程时,可以调用[activation continueProcessing],
 * 否则LCMSDK会停止在当前流程
 **/
- (void) onActivation:(LCMActivation *) activation{
    //使用默认UI提示用户填写激活码
    /**
     * 以下是自定义UI的代码示例
     //设置激活码到LCMSDK
     [LCMSDK authCode:code];
     //继续后续流程
     [activation continueProcessing];
     **/
    [activation showDefaultUI];//自定义UI需要注释掉该默认UI接口
}

4.2 强更自定义UI

/**
 * 【onUpdate】
 * LCMSDK必接接口
 * LCMSDK的更新事件回调函数,
 * App会在打开时获取更新信息(若配置),
 * 如果发现可用更新,会在此回调中返回游戏更新内容,
 * 游戏需要在此回调中绘制UI展现更新内容,
 * 游戏可以调用[updater install]直接跳转AppStore进行更新,
 * 当游戏需要LCMSDK继续之后的登录流程时,可以调用[updater continueProcessing],
 * 否则LCMSDK会停止在当前流程
 **/
- (void) onUpdate:(LCMUpdater *)updater{
    NSLog(@"%@", updater.toJSONString);
    //App请绘制自己的UI提供最好的用户体验,不到万不得已,请不要使用默认UI
    /**
     * 以下是自定义UI的代码示例
    if (isConfirm) {
        //判断该更新是否可跳过
        if (updater.canSkip) {
            //在可跳过的情况下,才继续后续流程,否则停止在当前流程
            [updater continueProcessing];
        }
        //不管是否可跳过,用户点击确认更新时,执行install跳转Appstore进行更新
        [updater install];
    }else{
        //用户点击取消,跳过强制更新,仅在更新被配置为可跳过的情况下才会显示取消按钮
        [updater continueProcessing];
    }
     **/
    [updater showDefaultUI];//自定义UI需要注释掉该默认UI接口
}

4.3 公告自定义UI

/**
 * 【onAnnouncement】
 * LCMSDK必接接口
 * LCMSDK的公告获取事件回调函数,
 * 注意:主动查下与登陆前公告都会回调到这个接口,
 * App会在打开时获取公告(若配置),
 * 如果发现可用公告,会在此回调中返回游戏公告内容,
 * 游戏需要在此回调中绘制UI展现公告,
 * 当游戏需要LCMSDK继续之后的登录流程时,可以调用[announcement continueProcessing],
 * 否则LCMSDK会停止在当前流程
 **/
- (void) onAnnouncement:(LCMAnnouncement *)announcement{
    NSLog(@"%@",announcement.toJSONString);
    //App请绘制自己的UI提供最好的用户体验,不到万不得已,请不要使用默认UI
    if (announcement.isBeforeLoginAnnouncement) {
        [announcement showDefaultUI:^() {}];//自定义UI需要注释掉该默认UI接口
    }else {
        //首先判断是否有登陆后公告,如果没有就不显示
        if (announcement.error && announcement.error.errorType == ANNOUNCEMENT_NONE_ERROR) {
            NSLog(@"onAnnouncement:%@", announcement.error.description);

        }else {
            [announcement showDefaultUI:^() {}];//自定义UI需要注释掉该默认UI接口
        }
    }
}

4.4 自定义web客服

a.type值为1,代表web表单客服。

[LCMSDK showCSInViewController:(NSUInteger) type;

五.常见问题

5.1 SDK初始化失败?

  • 检查一下bundle id是否正确(或是跟LCM确认下bundle id是否配置),LCM 服务器端对bundle id有校验,如果不正确会初始化失败。

5.2 证书相关问题?

  • 如果是DeNA内部的研发,证书是由LCM这边提供;外部研发需要自己公司申请证书相关(使用通配证书),游戏出包后会由LCM打包工具进行重新签名。

5.3 购买失败?

  • 检查当前设备App Store地区是否正确
  • 咨询运营检查OPE后台商品配置是否正确
  • 咨询HO同学苹果后台商品是否配置正确

5.4 报‘No LCMSTOREPROVIDER found.’错误?

  • 检查D商店是否导入,可以尝试删除重新导入
  • 检查导入的D商店库是否和appInfo.json里的region对应
  • 检查是否添加-ObjC

六.联系方式

  • LCM SDK邮箱:sdk-app_cn@dena.jp

版本:RC 9.8.0 日期: 2022.08.23

Back to top