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商店游戏接入,需要将SocialProvider
、StoreProvider/login/Google
、StoreProvider/login/Facebook
、ShareProvider/Facebook
、PublicThirdLib/Facebook
删掉。
2. 对于海外D商店游戏接入,需要将SocialProvider
、StoreProvider/login/Wechat
、StoreProvider/login/QQ
、ShareProvider/Wechat
、ShareProvider/TencentQQ
、PublicThirdLib/TencentQQ
、PublicThirdLib/Wechat
、 RiskControlProvider/TongDunRiskControl
、 RiskControlProvider/TengXunFaceVerifyRiskControl
删掉。
3. 对于海外无商店游戏接入,需要将StoreProvider
、ShareProvider/Wechat
、ShareProvider/TencentQQ
、PublicThirdLib/TencentQQ
、PublicThirdLib/Wechat
、 RiskControlProvider/TongDunRiskControl
、 RiskControlProvider/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