此文档适用于使用C++接口的SDK,如使用OC接口SDK,请查看SDK接入说明文档
接入前,需要由龙图项目负责人完成渠道申报并在龙图后台进行配置,从而获取到该游戏的渠道参数、龙图的.cfg配置文件,直接加入工程(等同bundle资源).。
龙图 IOS SDK支持 iPhone、iPad、iPod Touch设备,要求armv7、armv7s或arm64架构,操作系统要求Mac要求OSX以上,Xcode要求11以上,iOS SDK要求8.0以上。
龙图iOS SDK主要由以下几部分构成,如下图:
[1] Longtulib龙图封装静态库
只支持armv7、armv7s和arm64架构,固件要求iOS8.0以上
[2] Thirdilb第三方静态库.a或Framework
龙图静态库封装调用的第三方静态库或Framework
[3] OpenSource第三方开源库
龙图SDK所使用的第三方开源库或源文件,避免SDK与游戏产生冲突
[4] Splash龙图SDK提供的闪屏支持
苹果2020年4月30日后提交的APP不再支持使用LaunchImage,启动图需要使用StoryBoard来搭建;
StoryBoard介绍:http://sdk.longtubas.com/t3/241/4774/1500008855.html
如果还需要使用SDK闪屏功能请参考如下配置:
闪屏为xcode自带闪屏显示后的闪屏,最多支持3张。使用请在info.plist中设置Longtu_Splash字段,类型Number,数量即闪屏数量(不包括xcode自带闪屏), 分辨率以及命名方式以”名称”(根据分辨率一共包含LTBase_Splash/LTBase_Splash_Pad/LTBase_Splash_pro)+”数字”的组合方式默认一张闪屏不需加数字,之后闪屏图片添加数字”2”,”3”(可参考截图和demo)。若需改变闪屏显示时间请在info.plist中设置Longtu_SplashInterval字段,类型string,建议设置范围2-5秒,闪屏默认间隔2秒。
[5]Analytics三方统计所需的静态库文件
Xcode->Project->Build Settings工程配置
[1] 添加库的连接参数
请在工程文件Build Settings处,找到Other Linker Flags,并添加以下内容
[2] 其他配置可参考下图
请将LongtuSDK文件夹拖到你的工程Groups&Files面板中,截图如下
注意:2.2.2版本开始需要删除下图中崩溃相关的LTCrashMonitor.a
其中.cfg文件为配置文件,需由运营或运营支持人员提供
添加Framework后
请注意Optional的库,除龙图SDK可选内容外,下图中所有内容都需要添加
如下图:
2.2.2版本新增库
2.1.8版本新加系统库
2.0.2新加SDK库
1.3.2新加系统库
1.3.1版本新加SDK库(必接):
1.3.0版本新加系统库
1.1.4版本新加:
需添加2个URL Schemes 如下图:
1.具体添加内容为三方参数,需和技术支持同步获取
具体方法:选中工程中的Target,选中Info标签页,找到底下的URL Types,展开,点击加号,创建URL Scheme
[1] 支持HTTP设置
ios9 下苹果要求 App 内访问网络必须使用 HTTPS ,现阶段不能马上改成 https。
请在 Info.plist 中添加 NSAppTransportSecurity 类型 Dictionary.在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型 Boolean,值设为 YES。如下图
[2] 白名单设置
单独接入appstore包时不能添加alipay的白名单,有可能被拒审!
(请保留weixin白名单配置)*
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
[3] 权限设置
使用Xcode打包时,中访问相册功能和iOS14获取idfa需要设置权限使用描述,如下图
<key>NSUserTrackingUsageDescription</key>
<string>idfa权限描述请联系运营获取</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSPhotoLibraryUsageDescription</key>
<string>需要使用相册</string>
[4] 崩溃、卡顿监控
若游戏不使用该功能,请将LTCrashMonitor.a从工程中去除。
[5] 去除系统冗余日志输出(非必须)
使用Xcode调试出现大量无用输出时请做以下设置,防止无用的系统日志在控制台输出,如下图
[1] dSYM文件
在XCODE编译项目之后,会在app旁看见一个同名的dSYM文件。dSYM文件是iOS编译后保存16进制函数地址映射信息的文件,每次应用程序build后,都会生成对应的xxx.app, xxx.app.dSYM文件。通过此文件可以将16进制地址转换成可读的函数地址,精确定位crash位置,如下图所示:
[2] 工程配置
开启内购和苹果登录前提需要苹果证书设置支持.之后再Xcode进行如下设置.
参数名称 | 必要性 | 类型 | 默认值 | 功能 |
---|---|---|---|---|
LTBase_InitOrientation | 必须 | String | UIInterface Orientation Landscape Right | 游戏初始化方向 竖屏: UIInterfaceOrientationPortrait 右横屏: UIInterfaceOrientationLandscapeRight 左横屏: UIInterfaceOrientationLandscapeLeft |
LTbase_GameResVersion | 必须 | String | 1.0 | 游戏资源版本号 |
LTbase_Debugmodel | 必须 | Boolean | YES | 出包前请将其设置成NO。 主要用于查看控制台日志。 YES:调试模式 NO:出包模式 |
LTbase_GameOnline | 必须 | Boolean | YES | 游戏类型 YES: 网游 NO:单机 |
LTbase_AutoOrientation | 非必须 | Boolean | YES | 设置SDK界面是否支持旋转 YES:支持 NO:关闭 |
LTBase_Splash | 非必须 | Number | 0 | SDK闪频数量 (不包括xcode自带闪屏) |
LTBase_SplashInterval | 非必须 | String | 2 | 龙图每张图片闪屏显示时长 (1.0-5.0秒之间) |
LTbase_FSInterval | 非必须 | String | 0 | Xcode自带闪屏延长显示时长 (1.0-5.0秒之间) |
LTbase_FVLocation | 非必须 | Number | 1 | 首次安装悬浮球显示的位置。 1:左上 2:左中 3:左下 4:右上 5:右中 6:右下 |
LTbase_ShowInitLoading | 非必须 | Boolean | NO | 是否显示登录前的Loading框 YES:显示 NO:关闭 |
LTbase_BlockInterval | 非必须 | String | 0 | 游戏卡顿监测间隔(>=5.0秒)、 如果主线程阻塞超过 该时长会发送1条卡顿日志, 去除该字段或设置为0即取消监控 |
LTbase_DefferingSG | 非必须 | String | UIRectEdgeAll | 阻塞对应区域的第一次系统手势 UIRectEdgeAll, UIRectEdgeNone, UIRectEdgeTop, UIRectEdgeLeft, UIRectEdgeBottom, UIRectEdgeRight |
LTbase_HI_AutoHidden | 非必须 | Boolean | NO | 是否自动隐藏 iPhoneX的HomeIndicator YES:隐藏 NO:显示 |
LTbase_FVLocationX | 非必须 | Number | 0 | 自定义设置 首次安装app时悬浮球坐标 坐标X |
LTbase_FVLocationY | 非必须 | Number | 0 | 自定义设置 首次安装app时悬浮球坐标 坐标Y |
LTbase_isHiddenInitUI | 非必须 | Boolean | NO | 初始化loading图是否展示,值为false或者未添加会默认显示初始化loading图,值为true会隐藏初始化loading图(不建议使用此功能,如果影响游戏展示效果可提前或者推迟调用初始化接口的时机) |
<key>LTBase_InitOrientation</key>
<string>UIInterfaceOrientationLandscapeLeft</string>
<key>LTBase_Splash</key>
<integer>0</integer>
<key>LTBase_SplashInterval</key>
<string>0</string>
<key>LTbase_AutoOrientation</key>
<true/>
<key>LTbase_BlockInterval</key>
<string>5</string>
<key>LTbase_Currency</key>
<string>填入所需购买项(选接)</string>
<key>LTbase_Debugmodel</key>
<true/>
<key>LTbase_DefferingSG</key>
<string>UIRectEdgeAll</string>
<key>LTbase_FSInterval</key>
<string>0</string>
<key>LTbase_FVLocation</key>
<integer>1</integer>
<key>LTbase_GameOnline</key>
<true/>
<key>LTbase_GameResVersion</key>
<string>1.0</string>
<key>LTbase_HI_AutoHidden</key>
<false/>
<key>LTbase_Push</key>
<true/>
<key>LTbase_ShowInitLoading</key>
<false/>
<key>LTbase_isHiddenInitUI</key>
<false/>
服务端配置:请参考 通用接入文档—> 《SDK服务端接入说明文档》
功能说明
应用启动时,初始化SDK,并添加奔溃、阻塞监控
接口定义
bool ApplicationDidFinishLaunchingWithOptions(void *application,void *launchOptions);
接口示例
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//保证这一句在最前面
LTGameSDK::GetInstance().ApplicationDidFinishLaunchingWithOptions(application, launchOptions);
//在下面添加其他逻辑
}
1、初始化第三方SDK,同时获取SDK所需要的初始化数据
2、检查版本更新,初始化内部封装了第三方的更新接口
LTGameSDK::GetInstance().RegisterLogoutCallBack(logoutCallBack);
SDK注销结果回调必须实现。
接收到此回调游戏需要退出游戏回到登录页面。
因为:
1,用户在渠道SDK悬浮框内点击回调会触发此接口
2,用户达到防沉迷标准后,SDK会主动回调此接口注销当前账号,以满足政府需求。
void Init(void* controller,LTInitParam ltInfo);
注意:
1.初始化接口在不同游戏引擎添加的位置不同,具体参看代码示例
2.游戏本身的初始化最好在SDK的初始化结束并成功后开始,因为部分渠道的SDK有自动展示LOGO的功能,如果游戏的初始化先于SDK的初始化或两者并行可能会造成渠道的LOGO展示部出来或显示时间很短的BUG
3.由于SDK已集成收集奔溃日志的功能,如果游戏使用的是U3D引擎,需要将UnityAppController.mm中的部分代码进行注释,如下图:
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
controller | 必填 | UIViewController* | 游戏rootViewcontroller |
//初始化回调函数
void initCallBack(bool result,constchar* jsonStr)
{
//返回初始化结果
}
(1)对于coco2d-x引擎:
初始化接口必须放在cocos2d::CCApplication::sharedApplication()->run();之后,且需要添加代码self.window.rootViewController = viewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//。。。
self.window.rootViewController = viewController;
[windowmakeKeyAndVisible];
cout<<"LTGameSDK LOG:游戏开始初始化!"<<endl;
cocos2d::CCApplication::sharedApplication()→run();
cout<<"LTGameSDK LOG:LongtuSDK开始初始化!"<<endl;
LTSDK::GetInstance().init(self.viewController);
}
(2)对于unity3d引擎:
初始化接口必须放在OnUnityReady();之后。
- (void)startUnity:(UIApplication*)application
{
//。。。。。。
OnUnityReady();
//龙图SDK初始化
cout<<"LTGameSDK LOG:LongtuSDK开始初始化!"<<endl;
LTSDK::GetInstance().init(self.viewController);
}
void LTSDK::init(void* rootViewController)
{
// 初始化回调设置
LTGameSDK::GetInstance().InitCallBack(initCallBack);
// 登录注册回调设置
LTGameSDK::GetInstance().RegisterLoginCallBack(loginCallBack);
// 登出回调设置
LTGameSDK::GetInstance().RegisterLogoutCallBack(logoutCallBack);
//设置购买回调
LTGameSDK::GetInstance().SetListener(this);
//初始化接口
LTGameSDK::GetInstance().Init(self.viewController);
}
功能说明
获取SDK接口是否可用
接口示例
LTGameSDK::GetInstance().GetEnableInterface();
返回数据如下,JSON格式
{
“SwitchAccount” : 1,
“Logout” : 1,
“ShowPausePage” : 0,
“EnterAppCenter” : 0,
“ShowToolBar” : 1,
“HideToolBar” : 1,
“RegisterLogin” : 1,
“EnterUserSetting” : 0,
“EnterAppBBS” : 0,
“IsLogin” : 1,
“EnterPlatform” : 1
}
1: 表示接口可用
0: 表示接口不可用
返回数据说明:
切换账号接口 可用
注销账号接口 可用
暂停页接口 不可用
游戏大厅接口 不可用
显示悬浮球接口 可用
关闭悬浮球接口 可用
注册登录接口 可用
用户设置接口 不可用
进入论坛接口 不可用
登录状态接口 可用
用户中心接口 可用
功能说明
获取SDK用户中心接口是否可用
接口示例
LTGameSDK::GetInstance().GetIsEnterPlatform();
返回bool值,yes为可用No不可用;
功能说明
获取SDK注销接口是否可用
接口示例
LTGameSDK::GetInstance().GetIsLogout();
返回bool值,yes为可用No不可用;
功能说明
获取SDK切换账号接口是否可用
接口示例
LTGameSDK::GetInstance().GetIsSwitchAccount();
返回bool值,yes为可用No不可用;
功能说明
获取当前SDK渠道信息
获取当前游戏包中的ServiceId,(游戏联运渠道ID,游戏可根据此ID区分各发行渠道)。
LTGameSDK::GetInstance().GetServiceId ();
获取当前游戏包中的ChannelId,(游戏推广渠道ID,含概CPS渠道,短链渠道等唯一标识)。
LTGameSDK::GetInstance().GetChannelId();
获取当前游戏包中的LocaleId, (游戏发行区域ID)。
LTGameSDK::GetInstance().GetLocaleId();
获取当前游戏包中的DeviceGroupId, (机型组ID)。
LTGameSDK::GetInstance().GetDeviceGroupId();
功能说明
在调用第三方app进行支付时,设置该接口,在支付完成后回调游戏。
接口定义
bool HandleOpenURL(void* url);
void HandleOpenURL(void* url, void* application);
bool HandleOpenURL(void* application,void* url,void* sourceApplication,void* annotation);
接口示例 (以下三个方法必须都添加)
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
if (LTGameSDK::GetInstance().HandleOpenURL(url)) {
returnYES;
}
returnNO;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if(LTGameSDK::GetInstance().HandleOpenURL(application,url,sourceApplication,annotation)) {
returnYES;
}
returnNO;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if(LTGameSDK::GetInstance().HandleOpenURL(app, url,
[options valueForKey:@"UIApplicationOpenURLOptionsSourceApplicationKey"],
[options valueForKey:@"UIApplicationOpenURLOptionsAnnotationKey"])) {
return YES;
}
return NO;
}
功能说明
通过从Info.plist文件中获取的Longtu_AutoOrientation参数来设置游戏是否支持自动旋转。但还需要在appDelegate.mm中设置以下方法
接口定义
unsigned int ApplicationSupportedInterfaceOrientationsForWindow(void *application,void *window);
接口示例
- (NSUInteger)application:(UIApplication *)application
supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if (LTGameSDK::GetInstance().ApplicationSupportedInterfaceOrientationsForWindow()) {
return LTGameSDK::GetInstance().
ApplicationSupportedInterfaceOrientationsForWindow(application, window);
}
returnUIInterfaceOrientationMaskAll;
}
功能说明
用于控制界面旋转,请添加至rootViewController中
接口示例
Objective-C
- (BOOL)shouldAutorotate
{
return LTGameSDK::GetInstance().ShouldAutoRotate();
}
Unity3D
BOOL ShouldAutorotate_DefaultImpl(id self_, SEL _cmd)
{
return LTGameSDK::GetInstance().ShouldAutoRotate();
}
功能说明
在游戏进入前台时候调用,暂停页已封装入此接口,请添加至AppDelegate.mm中,U3D游戏为AppController.mm中
接口示例
- (void)applicationWillEnterForeground:(UIApplication*)application
{
LTGameSDK::GetInstance().ApplicationWillEnterForeground(application);
}
功能说明
在游戏已经进入前台时候调用,请添加至AppDelegate.mm中,U3D游戏为AppController.mm中
接口示例
-(void)applicationDidBecomeActive:(UIApplication *)application{
NSLog(@"applicationDidBecomeActive");
LTGameSDK::GetInstance().ApplicationDidBecomeActive(application);
}
1.手机游戏客户端会调用龙图sdk进行sdk初始化操作
2.龙图sdk向龙图用户中心服务器发起登录/注册的请求
3.龙图用户中心服务器向龙图sdk返回token、用户信息等等
4.龙图sdk向返回游戏客户端登录结果和用户信息
5.游戏客户端上传用户信息到游戏服务器
6.服务器根据token向龙图用户中心服务器获取用户信息
7.龙图用户中心服务器向游戏服务器返回用户信息
8.游戏服务器向游戏客户端返回登录结果
功能说明
登录龙图用户中心。游戏客户端调用登录接口(RegisterLogin)前,需要通过设置登录回调接口(RegisterLoginCallBack)将回调函数指针传给SDK,登录成功后,龙图SDK会通过回调函数通知游戏客户端。
接口定义
//设置登录回调接口
void RegisterLoginCallBack(void (* pf)(bool result,const char* jsonStr,const char* serviceCode));
//登录接口
void RegisterLogin(LTUserType sdkType=kNoneType);
参数说明
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
LTUserType | 必填 | enum | 龙图官网登录类型 |
接口示例
//回调函数
void loginCallBack(bool result,const char* jsonStr,const char* serviceCode)
{
//返回登录结果
}
//设置登录回调接口
LTGameSDK::GetInstance().RegisterLoginCallBack(loginCallBack);
//登录接口
LTGameSDK::GetInstance().RegisterLogin();
其中对应的LTUserType类型
kRegister=1, //注册
kNormalLogin, //常规登陆
kPhoneLogin, //手机登陆
kEmailLogin, //邮箱登陆
kQuickLogin, //快速登陆
返回的JSON数据格式说明
登录成功时 {“userId”:”龙图平台分配的用户唯一id,区分大小写”,
“returnJson”:{第三方SDK平台返回的数据,一般情况下游戏无需关心},
“tokenId”:”龙图分配的tokenId”,
“currentUserType”:”当前用户类型 speedy=快登用户、common=普通用户名密码用户、phone=手机号注册用户、thirdHidden=第三方隐性用户”,
“userName”:”龙图平台中的用户名”}
“serviceCode”:资源版本号
登录失败时 {“desc”:”失败描述”,
“reset”:”状态码”,”status”:”1”}
注意:
功能说明
当游戏角色注册(登录)成功时设置游戏角色注册(登录)信息。
用户首次创建或注册角色并登录时,需要调用一次注册设置和一次登录设置;用户使用老角色登录,则只需要调用一次登录设置。
注:
1、游戏角色注册成功后,调用该接口设置角色注册信息。
2、游戏角色登录成功后,调用该接口设置角色登录信息,否则无法计费。
3、此类型是用于兼容第三方SDK中,角色升级的一种类型。
4、游戏内没有角色注册行为的,在游戏自动给用户创建角色的时候,即认为注册。
5、用户首次创建或注册角色并登录时,需先调用注册设置,再调用登录设置。
6、研发需要在本地做基础判断,一些特殊符号不允许出现在角色名、公会名、队伍名、联盟名等名称中,具体符号_(, | { } “ ‘ \ / @ * $ # & ! - + ( ) . ? ~ )^
接口定义
void SetGameLoginInfo(LTGameInfo ltGameInfo,LTGameType ltGameType);
参数说明
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
ltGameInfo | 必须 | LTGameInfo | 设置游戏账号信息 |
ltGameType | 必须 | LTGameType | 用户标识游戏角色注册登录状态注册:kGameRegister 登录:kGameLogin 角色升级:kGameRoleUpgrade |
LTParam参数说明
参数名称 | 重要性 | 类型 | 说明 | |
---|---|---|---|---|
mGame_RoleName | 必须 | std::string | 游戏角色名称(不支持富文本) | |
mGame_RoleId | 必须 | std::string | 游戏角色 id | |
mGame_ServerId | 必须 | std::string | 游戏服务器id | |
mGame_ServerName | 必须 | std::string | 游戏服务器名称 | |
mGame_RoleLevel | 必须 | std::string | 游戏角色等级 | |
mGame_RoleVipLevel | 必须 | std::string | 游戏角色vip等级 |
接口示例
LTGameInfo gameInfo;
gameInfo.mGame_RoleId = "123456"; //游戏角色id
gameInfo.mGame_RoleName = "Jack"; //游戏角色名称
gameInfo.mGame_ServerId = "123"; //游戏服务器id
gameInfo.mGame_ServerName = "test"; //游戏服务器名称
gameInfo.mGame_RoleLevel = "1"; //游戏角色等级
gameInfo.mGame_RoleVipLevel = "1"; //游戏角色vip等级
//游戏角色注册成功时调用
LTGameSDK::GetInstance().SetGameLoginInfo(gameInfo,kGameRegister);
//游戏角色登录成功时调用
LTGameSDK::GetInstance().SetGameLoginInfo(gameInfo,kGameLogin);
功能说明
注销当前登陆账号。游戏客户端调用注销接口(LogOut)前,需要通过设置注销回调接口(RegisterLogoutCallBack)将回调函数指针传给SDK,注销成功后,龙图SDK会通过回调函数通知游戏客户端。
接口定义
void LogOut();
接口示例
//回调函数
void logoutCallBack(bool result,constchar* jsonStr)
{
//返回的JSON数据格式说明
调用登出接口,登出成功时
{"Type":"Logout"} //如果jsonStr == NULL,默认为调用登出接口,登出成功
调用切换账号,登出成功时
{"Type":"SwitchAccount"}
}
//设置注销回调接口
LTGameSDK::GetInstance().RegisterLogoutCallBack (logoutCallBack);
//注销接口
LTGameSDK::GetInstance().LogOut();
功能说明
游戏内切换账号功能,调用接口SDK会先拉起切换页面,用户切换完成后会通过切换账号回调返回用户信息.
注意:
当前渠道带有切换账号功能时,游戏需要实现此接口逻辑进行游戏登录。切换账号分2种情况:
一是调用SDK的切换账号接口实现账号的切换,此类型的切换账号按钮是由游戏去实现,建议放到登录界面,切换账号成功后,登录数据会在此接口返回,游戏可执行游戏的登录流程,类似登录成功接口的回调。
二是渠道SDK的悬浮框或者用户中心页面带有切换账号功能,如用户点击切换账号并登录成功后,登录数据会在此接口返回,但如果当前游戏场景处于游戏中,游戏正常应该先返回到登录界面,然后再通过SDK切换账号成功返回的数据执行游戏的登录流程。
接口定义
void SwitchAccount();
接口示例
//切换账号回调
void switchAccountCallBack(bool result, const char* jsonStr)
{
cout<<"*********switchAccountCallBack********"<<endl;
cout<<jsonStr<<endl;
if(result){
Json::Reader json_reader;
Json::Value json_object;
if (!json_reader.parse(jsonStr, json_object)){
return;
}
string userId = json_object["userId"].asString();
LTSDK::GetInstance().ShowMsg(userId.c_str());
}
else{
LTSDK::GetInstance().ShowMsg("切换账号失败");
}
}
//设置注销回调接口
LTGameSDK::GetInstance().SwitchAccountCallBack(switchAccountCallBack);
//切换账号接口
LTGameSDK::GetInstance().SwitchAccount();
1.龙图sdk向龙图计费服务器发起支付请求
2.龙图计费服务器生成订单号,并向sdk返回支付结果
3.龙图计费服务器通知游戏服务器发货
4.游戏服务器发送虚拟物品至玩家手机游戏客户端
5.游戏服务器向计费服务器返回发货结果
功能说明
游戏客户端通过调用计费接口,实现游戏中的道具购买。游戏客户端调用计费接口(Purchase)前,需要继承PurchaseListener,通过设置接口(SetListener)将对象指针传给SDK,计费成功后,龙图SDK会通过OnPurchaseResult通知游戏客户端。
接口定义
void SetListener(PurchaseListener* listener);
//计费接口
void Purchase(LTPurchaseParam params);
参数说明
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
mPrice | 必填 | std::string | 商品价格,单位详见基础码表(货币编码http://sdk.longtubas.com/t3/241/4775/1500009172.html)货币类型及对应ID |
mCurrencyType | 必填 | std::string | 货币类型,详见基础码表(货币编码http://sdk.longtubas.com/t3/241/4775/1500009172.html)货币类型及对应ID |
mPropName | 必填 | std::string | 商品名称,不含数字 |
mPropId | 必填 | std::string | 游戏自定义的商品ID,必传。 |
mPropNum | 必填 | std::string | 商品数量,只能是数字 |
mPropDescribe | 非必填 | std::string | 商品描述 |
mDeleverUrl | 非必填 | std::string | 游戏发放道具服务器地址,用户支付成功后计费中心会回调此地址告知游戏进行道具发放。 可以配置到SDK后台。 |
mExtendParams | 非必填 | std::string | 游戏自定义扩展参数 |
mGameRoleLevel | 非必填 | std::string | 游戏角色等级 |
mGameRoleVipLeve | 非必填 | std::string | 游戏角色VIP等级 |
回调说明
参数名称 | 类型 | 说明 |
---|---|---|
result | bool | 是否成功(true:成功,false:失败) |
ssId | const char | 订单号,失败时可能为空 |
propId | const char | 商品ID,失败时可能为空 |
code | const char | 状态码(附录11.1) |
msg | const char | 描述信息 |
接口示例
class LTTest : public PurchaseListener
{ //通知计费结果
void OnPurchaseResult(bool result, const char* ssId, const char* propId, const char* code, const char* msg);
}
void LTTest::LTPurchase
{
LTPurchaseParam params;
params.mPrice = "100"; //商品价格
params.mCurrencyType = "1"; //货币类型,人民币为1
params.mPropName = "宝石"; //商品名称,不含数字
params.mPropId = "4261299"; //游戏自定义商品id
params.mPropNum = "100"; //商品数量,只能是数字
params.mPropDescribe = ""; //商品描述
params.mDeleverUrl = ""; //发货地址(可选)
params.mExtendParams = ""; //自定义参数
params.mGameRoleLevel = ""; //游戏角色等级(可选)
params.mGameRoleVipLevel = ""; //游戏VIP等级(可选)
LTGameSDK::GetInstance().SetListener(this);
LTGameSDK::GetInstance().Purchase(params); //购买接口
}
//回调方法
void LTSDK::OnPurchaseResult(bool result, const char *ssId, const char *propId, const char *code, const char *msg)
{
cout<<"***OnPurchaseResult:"<<msg<<endl;
NSString *ssidStr = [NSString stringWithUTF8String:ssId];//订单号
NSString *propIdStr = [NSString stringWithUTF8String:propId];//商品ID
NSString *codeStr = [NSString stringWithUTF8String:code];//状态码
NSString *msgStr = [NSString stringWithUTF8String:msg];//描述信息
NSString *des = [NSString stringWithFormat:@"result = %@ \n ssid = %@ \n propid = %@ \n code = %@ \n msg = %@" ,result ? @"yes" : @"no" , ssidStr, propIdStr, codeStr, msgStr];
if (result) {
ShowMsg([des UTF8String]);
} else {
ShowMsg([des UTF8String]);
}
}
游戏客户端通过调用礼包码接口,实现游戏中的礼包兑换。游戏客户端调用礼包码接口前,需要继承PurchaseListener,通过设置接口(SetListener)将对象指针传给SDK,计费成功后,龙图SDK会通过OnGamecodeResult通知游戏客户端。
接口定义
void SetListener(PurchaseListener* listener);
void ExchangeGameCode(const char *gameCode,const char *deliverUrl,const char *extendParams);
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
gameCode | 必填 | char* | 后台配置的礼包码 |
deliverUrl | 必填 | char* | 回调地址 |
extendParams | 必填 | char* | 拓展参数 |
接口示例
LTGameSDK::GetInstance().ExchangeGameCode([_customPayPrice.text UTF8String], "http://pay.z4v.cn/Pay_Accept/ResponseDeliver?ssid=2013030715493703719999", "");
//回调方法
void LTSDK::OnGamecodeResult(bool result, const char *code, const char *msg){
cout<<"***OnGamecodeResult:"<<msg<<endl;
NSString *codeStr = [NSString stringWithUTF8String:code];//错误码
NSString *msgStr = [NSString stringWithUTF8String:msg];//描述信息
NSString *des = [NSString stringWithFormat:@"result = %@ \n code = %@ \n msg = %@" ,result ? @"yes" : @"no" , codeStr, msgStr];
if (result) {
//sdk返回对应的code,具体信息需按照文档表 6.3 计费中心错误码处理
ShowMsg([des UTF8String]);
}else{
// 礼包码获取失败
ShowMsg([des UTF8String]);
}
}
功能说明
进入用户中心界面。根据接口GetEnableInterface()来判断当前渠道是否支持该接口。
接口示例
LTGameSDK::GetInstance().EnterPlatform();
功能说明
调用native的webview显示页面,带有刷新、前进、后退、关闭的功能
调用时传入URL即可
LTGameSDK::GetInstance().OpenWebviewWithNavbar(url);
功能说明
调用打开活动公告接口并在回调里返回公告开关信息
调用时传入获取的公告类型即可(暂只涉及活动公告)
LTGameSDK::GetInstance().GetNotice(LTNoticeType);
enum LTNoticeType{
kNoticeActivity,//活动公告
};
最后在回调里拿到相应的活动公告及登录公告的开关信息
// 公告展示回调
void noticeTypeCallBack(bool result, const char* jsonStr)
{
cout<<"*********noticeCallBack********"<<endl;
cout<<jsonStr<<endl;
Json::Reader json_reader;
Json::Value json_object;
if (!json_reader.parse(jsonStr, json_object)){
return;
}
string type = json_object["type"].asString();
string start = json_object["start"].asString();
if (start == "100") {
string url = json_object["openUrl"].asString();
LTSDK::GetInstance().ShowMsg(url.c_str());
return;
}
if (result) {//true表示请求连接成功,false表示连接请求失败
if(type == "0"){//type=0,代表登录公告,1活动公告,2活动页面
if (start == "1") {//start=1s代表页面已打开,2代表已关闭,0代表失败--100为跳转游戏内部链接同时增加返回openUrl字段
LTSDK::GetInstance().ShowMsg("登录公告打开");
}
else{
LTSDK::GetInstance().ShowMsg("登录公告关闭");
}
}
else if (type == "1"){
if (start == "1") {
LTSDK::GetInstance().ShowMsg("活动公告打开");
}
else{
LTSDK::GetInstance().ShowMsg("活动公告关闭");
}
}
else{
if (start == "1") {
LTSDK::GetInstance().ShowMsg("活动页面打开");
cout<<"*********noticeCallBack活动页面打开********"<<endl;
}
else{
LTSDK::GetInstance().ShowMsg("活动页面关闭");
cout<<"*********noticetCallBack活动页面关闭********"<<endl;
}
}
} else {
if(type == "0"){
LTSDK::GetInstance().ShowMsg("noticeCallBack登录公告失败");
}
else if (type == "1"){
LTSDK::GetInstance().ShowMsg("noticeCallBack活动公告失败");
}
else if (type == "2"){
LTSDK::GetInstance().ShowMsg("noticeCallBack活动页面失败");
}
else{
LTSDK::GetInstance().ShowMsg("noticeCallBack失败");
}
}
}
研发上报游戏现在的进度,用于SDK标记游戏现在所处进度,并进行相关操作。
以悬浮层按钮开关为例:
SDK会在进入服务器列表时打开SDK悬浮功能条,
SDK会在离开服务器选择时关闭SDK悬浮功能条,
请研发上报事件时尽量准确。
/**
* 游戏内事件,定义
*/
enum LTGameProcessEventType{
GAME_PROCESS_EVENT_TYPE_IN_SELECT_SERVERLIST, /**< 进入到选择服务器列表页面的事件。 */
GAME_PROCESS_EVENT_TYPE_OUT_SELECT_SERVERLIST, /**<离开选择服务器列表页面的事件 */
};
研发主动调用,传入不同的事件用于标记游戏现在所处进度
LTGameSDK::GetInstance().LTBaseSendGameProcess(GAME_PROCESS_EVENT_TYPE_OUT_SELECT_SERVERLIST);
功能说明:
调用接口传入活动ID和角色信息,成功后会打开外链页面
LTGameInfo gameInfo;
gameInfo.mGame_RoleLevel = "50";
gameInfo.mGame_RoleVipLevel = "0";
LTGameSDK::GetInstance().GetAvtivityView("19", gameInfo);
最后在回调里拿到相应的活动页面开关信息(公告和活动详情共用一个回调)
void noticeTypeCallBack(bool result, int type, int start)
{
cout<<"*********noticeCallBack********"<<endl;
cout<<start<<endl;
if (start == "100") {
string url = json_object["openUrl"].asString();
LTSDK::GetInstance().ShowMsg(url.c_str());
return;
}
if (result) {//true表示请求连接成功,false表示连接请求失败
if(type == 0){//type=0,代表登录公告,1活动公告,2活动详情页面
if (start == 1) {//start=1s代表页面已打开,2代表已关闭,0代表失败--100为跳转游戏内部链接同时增加返回openUrl字段
LTSDK::GetInstance().ShowMsg("登录公告打开");
}
else{
LTSDK::GetInstance().ShowMsg("登录公告关闭");
}
}
else if (type == 1){
if (start == 1) {
LTSDK::GetInstance().ShowMsg("活动公告打开");
}
else{
LTSDK::GetInstance().ShowMsg("活动公告关闭");
}
}
else{
if (start == 1) {
LTSDK::GetInstance().ShowMsg("活动详情页面打开");
cout<<"*********noticeCallBack活动详情页面打开********"<<endl;
}
else{
LTSDK::GetInstance().ShowMsg("活动页面详情关闭");
cout<<"*********noticetCallBack活动页面详情关闭********"<<endl;
}
}
} else {
if(type == 0){
LTSDK::GetInstance().ShowMsg("noticeCallBack登录公告失败");
}
else if (type == 1){
LTSDK::GetInstance().ShowMsg("noticeCallBack活动公告失败");
}
else if (type == 2){
LTSDK::GetInstance().ShowMsg("noticeCallBack活动详情页面失败");
}
else{
LTSDK::GetInstance().ShowMsg("noticeCallBack失败");
}
}
}
客服中心功能弃用,请使用aihelp客服功能。
功能说明:
调用接口设置回调,在回调中获取CDN列表
LTGameSDK::GetInstance().LTBaseGetUpdateCDNPath(UpdateCDNPathListener);
回调返回获取状态和内容
void UpdateCDNPathListener(bool result,const char * jsonStr){
cout<<"*********UpdateCDNPathListener********"<<endl;
if(result == true){
cout<<"UpdateCDNPathListener:获取成功!"<<endl;
cout<<jsonStr<<endl;
}else{
cout<<"UpdateCDNPathListener:获取失败!"<<endl;
}
}
获取服务器端 发送日志使用的Servicecode.
此接口请在登录成功后调用,不然数据不完整.
LTGameSDK::GetInstance().GetServiceCode();
获取产品snid
LTGameSDK::GetInstance().GetSnid();
接口定义
void LogEvent(const char* event_key, const char* event_paras = NULL);
/*
event_key:定义的上报key
event_paras:上报的json字符串
*/
示例
Json::Value event_paras;
event_paras["userId"] = Json::Value(LTGameSDK::GetInstance().GetUserId());
event_paras["roleId"] = Json::Value("123456");
Json::FastWriter fast_writer;
string logData = fast_writer.write(event_paras);
LTGameSDK::GetInstance().LogEvent("registration",logData.c_str());
显示隐私协议页面
LTGameSDK::GetInstance().ShowPrivacyView();
必看事项:
调用契机
1,仅在用户展示与您的应用程序的互动后才能要求评级。
2,不要中断用户,特别是当他们执行时间敏感或压力很大的任务时。例如一个购物 App 在用户正在下单的过程中弹出一个请求评分
3,不要像瘟疫。这是个比喻,意思为不要频繁请求评分,烦不胜烦!
4,不要使用按钮和其他控件来请求。因为这个 API 的响应机制受限于 App Store 策略,不受我们把控,谁都不希望点击按钮/控件之后无响应出现,搞得用户莫名其妙!
必看事项:
该接口在系统10.3及以上的设备中的同一个应用(线上)一年(365天)内只可以展示3次,是否展示由苹果自行处理不受我们控制(该接口需联网);10.3以下设备为跳转商店方式(同下接口),可多次调用,不受一年三次限制,但都受上面调用契机的限制,否则被苹果审核时发现可能会被打回拒审.
示例:
LTGameSDK::GetInstance().OpenStoreReview();
必看事项:
跳转商店方式(同下接口),可多次调用,不受一年三次限制,系统版本不限,但都受上面调用契机的限制,否则被苹果审核时发现可能会被打回拒审.
示例:
LTGameSDK::GetInstance().SkipStoreReview();
获取客户端真实IP , 登录成功以后获取。1.2.9版本增加。
LTGameSDK::GetInstance().getClientIP();
游戏自行判断下单时候充值异常(如当前充值的角色账号与登录账号关系不一致时),可选用调用此接口让SDK弹出固定的错误提示弹窗,用户点击弹窗上的确定按钮会自动退出当前账号登录让用户重新登录,也可自行提示。
LTGameSDK::GetInstance().ShowPurchaseFailedTipView();
需要和技术支持协商使用,
问卷调查ID需要在平台配置。
此功能需要和服务端配合接入。
问卷网后台配置的所有外部参数,除request_id由平台生成外,其他参数都需要通过“透传参数”传过来才能显示在答卷数据中。
接口说明
/**
* 打开问卷调查
*
* @param QuestionId 问卷id
* @param roleLv 角色等级
* @param roleVipLv 角色vip等级
* @param value 透传参数 研发自定义 可以为null (传入时格式为json字符串)
*/
void LTBaseOpenQuestionnaire(string QuestionId, string roleLv, string roleVipLv, const char* jsonStr);
调用方法:
Json::Value event_paras;
event_paras["key1"] = Json::Value("value1");
event_paras["key2"] = Json::Value("value2");
Json::FastWriter fast_writer;
string logData = fast_writer.write(event_paras);
LTGameSDK::GetInstance().LTBaseOpenQuestionnaire("1", "33", "8", logData.c_str());
接口说明:角色登出时清除当前登录的角色信息
//2022_0415 角色登出,清除角色信息
void LTSDKClearRoleData();
调用方法:
/// 角色登出
LTGameSDK::GetInstance().LTSDKClearRoleData();
接口说明:
// 获取客户端国家
string getClientLocationCountry();
调用方法:
NSString *country = [NSString stringWithUTF8String:LTGameSDK::GetInstance().getClientLocationCountry().c_str()];
接口说明:
// 获取客户端省份
string getClientLocationProvince();
调用方法:
NSString *prov = [NSString stringWithUTF8String:LTGameSDK::GetInstance().getClientLocationProvince().c_str()];
接口说明:当前仅支持登录公告样式,其他公告调用会出现异常.
//公告带服务器ID
void GetNotice(LTNoticeType noticeType,const char* gameServerId);
调用方法:
LTGameSDK::GetInstance().GetNotice(kNoticeLogin, "服务器id");
2.1.9版本新增
接口说明:调用展示论坛页面(需要在后台提前配置论坛页面).
//论坛
void LTSDKShowForumView();
调用方法:
LTGameSDK::GetInstance().LTSDKShowForumView();
2.2.4版本新增
接口说明:调用展示论坛页面(需要在后台提前配置论坛页面).
//论坛
void LTSDKShowForumView(const char *customparas);
调用方法:
LTGameSDK::GetInstance().LTSDKShowForumView("透传内容");
该接口由SDK通过服务端接口platform-app-activity提供,负责按照论坛的要求整理跳转参数,并自动跳转到论坛地址
customparas 介绍
字段 | 类型 | 介绍 |
---|---|---|
function | string | 功能标识; topicId:标识打开指定帖子,此时data中应该传帖子ID; subjectId:标识打开话题主页,此时data 中应该传话题id; encyclopedia:标识打开百科页面; gift-bag:标识打开礼包中心; userCenter:标识打开个人中心; 如果不填写该值,默认跳转到论坛首页 |
data | string | 根据不同的function传递不同的数据 |
2.3.4版本新增
接口说明:调用展示论坛页面(需要在后台提前配置论坛页面).
/// 论坛设置背景颜色并透传参数
/// - Parameters:
/// - customparas: 透传参数,可传空字符串
/// - colorHex: 16进制颜色码例如:(0xff0000为红色),使用默认颜色可传空字符串
void LTSDKShowForumView(const char *customparas, const char *colorHex);
调用方法:
LTGameSDK::GetInstance().LTSDKShowForumView("","0xff0000");
2.2.6版本新增
调用展示已收集个人信息清单页面或与第三方共享个人信息清单
接口说明:调用展示已收集个人信息清单页面.
/// 已收集个人信息清单
void LTSDKShowPersonalInfoList();//已收集个人信息清单
调用方法:
LTGameSDK::GetInstance().LTSDKShowPersonalInfoList();
接口说明:调用展示与第三方共享个人信息清单页面.
/// 与第三方共享个人信息清单
void LTSDKShowThirdInfoList();//与第三方共享个人信息清单
调用方法:
LTGameSDK::GetInstance().LTSDKShowThirdInfoList();
功能说明:
调用接口设置回调,在回调中获取论坛开关信息
LTGameSDK::GetInstance().GetOpenForumViewCallBack(GetOpenForumViewCallBack);
回调返回获取状态和内容(回调支持2.3.2及以上版本)
void GetOpenForumViewCallBack(bool isOpen){
//isOpen=true为打开,=false为关闭
NSLog(@"*********GetOpenForumViewCallBack********\n%@",isOpen ? @"open" : @"close");
}
接口说明:传入当前游戏所在控制器
/// 设置游戏控制器
/// - Parameter viewController: 控制器
void LTSDKSetSDKViewController(void* viewController);
调用方法:
LTGameSDK::GetInstance().LTSDKSetSDKViewController(控制器);
接口说明:打开选服页面
/// 打开选服页面
/// - Parameter productList: 产品数组(详细内容参见文档)
void LTSDKShowProductList(const char* productList);
调用方法:
NSMutableDictionary *mGame1 = [[NSMutableDictionary alloc] init];
[mGame1 setValue:@"510050" forKey:@"gameid"];
[mGame1 setValue:@"1002" forKey:@"snid"];
NSMutableDictionary *mGame2 = [[NSMutableDictionary alloc] init];
[mGame2 setValue:@"2000009701" forKey:@"gameid"];
[mGame2 setValue:@"1002" forKey:@"snid"];
NSString *mGameStr1 = [self convertToJsonData:mGame1];
NSString *mGameStr2 = [self convertToJsonData:mGame2];
NSMutableDictionary *mDict = [[NSMutableDictionary alloc] init];
[mDict setValue:@"20000097" forKey:@"id"];
[mDict setValue:mGameStr2 forKey:@"extendParams"];
[mDict setValue:@"16002" forKey:@"customVersion"];
NSMutableDictionary *mDict1 = [[NSMutableDictionary alloc] init];
[mDict1 setValue:@"20000041" forKey:@"id"];
[mDict1 setValue:mGameStr1 forKey:@"extendParams"];
[mDict1 setValue:@"18010" forKey:@"customVersion"];
NSMutableArray *mArr = [[NSMutableArray alloc] init];
[mArr addObject:mDict1];
[mArr addObject:mDict];
NSLog(@"reString1 = %@", mArr);
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:mArr options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"jsonString:%@",jsonString);
LTGameSDK::GetInstance().LTSDKShowProductList([jsonString UTF8String]);
//字典转字符串
- (NSString *)convertToJsonData:(NSDictionary *)dict{
if (dict == nil) {
return @"";
}
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString;
if(!jsonData) {
NSLog(@"%@",error);
jsonString = [[NSString alloc] init];
}else{
jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
NSRange range = {0,jsonString.length};
//去掉字符串中的空格
[mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
NSRange range2 = {0,mutStr.length};
//去掉字符串中的换行符
[mutStr replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
return mutStr;
}
productList 类型
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
productList | 必填 | NSArray | 产品数组 |
数组内JSON类型,请按照下表key,value传入json数组
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
id | 必填 | NSString | 产品ID |
extendParams | 可为空 | NSString | {“gameid”:”510050”,”snid”:”1002”} |
customVersion | 必填 | NSString | 自定义版本号 |
功能说明:
接收选服页面结果回调接口
遵守LTGameOCSDKDelegate
在回调里拿到选服结果(回调支持2.3.4及以上版本)
设置回调
LTGameSDK::GetInstance().SelectServerSuccessCallBack(SelectServerSuccessCallBack);
/// 选择服务器完成回调
/// @param productId 产品ID
/// @param serverId 服务器ID
/// @param roleId 角色ID(可能为空)
/// @param extendParams 透传参数
void SelectServerSuccessCallBack(const char* productId,const char* serverId,const char* roleId,const char* extendParams){
NSLog(@" 选服结果%@ ",[NSString stringWithFormat:@"productId:%@ \n serverId:%@\n roleId:%@ \n extendParams:%@",productId,serverId,roleId,extendParams]);
}
设置回调
LTGameSDK::GetInstance().SelectServerFailCallBack(SelectServerFailCallBack);
/// 选择服务器失败回调
/// @param errorCode 错误码 23为失败
void SelectServerFailCallBack(int errorCode){
NSLog(@" 选服失败%d ",errorCode);
}
龙图SDK分享功能目前整合了微信、QQ、新浪微博、Facebook、Twitter等SDK,包含文本分享、图片分享、链接分享等功能。点击链接查看详情
http://sdk.longtubas.com/t3/241/4774/1500007469.html
龙图SDK语音功能目前整合了腾讯语音SDK,包含离线语音、实时语音等功能。点击链接查看详情
http://sdk.longtubas.com/t3/241/4774/1500007728.html
整合了极验图形验证功能。点击链接查看详情
http://sdk.longtubas.com/t3/241/4774/1500007733.html
整合了AIHelpSDK,包含客服模块、FAQ模块、运营模块等功能。点击链接查看详情
http://sdk.longtubas.com/t3/241/4774/1500009871.html
龙图三方登录是一个聚合SDK,目前整合了微信、QQ、新浪微博、Facebook、Twitter等SDK,包含登录功能
http://sdk.longtubas.com/t3/241/4774/1500007469.html
状态码 | 说明 |
---|---|
101 | 连接超时 |
102 | 网络异常,请检查网络 |
103 | 数据异常 |
104 | SDK初始化参数错误 |
105 | SDK语言配置文件错误 |
106 | ltgame.cfg配置文件错误 |
107 | SDK未初始化成功 |
108 | SDK未设置登录回调 |
109 | 未设置服务器id |
110 | 未设置价格 |
111 | 未设置货币类型 |
112 | 未设置商品名称 |
113 | 未设置商品id |
114 | 未设置虚拟货币单位 |
115 | 未设置虚拟货币数量 |
116 | 未设置发货地址 |
117 | 未设虚拟货币单位 |
118 | 未设商品数量 |
119 | 用户取消支付 |
120 | 支付失败 |
121 | 支付页面加载失败 |
141 | 下单操作过于频繁 |
200 | 支付成功 |
201 | 下单成功 |
用户中心错误码 | 信息 |
---|---|
01010001 | 成功 |
01010002 | 次数已经达到上限,请12小时后再发送 |
01010003 | 该用户没有绑定手机 |
01010004 | 原密码不正确 |
01010005 | 没有找到该用户信息 |
01010006 | 令牌验证错误 |
01010007 | 验证码不正确 |
01010008 | 验证码超时 |
01010009 | 该用户已经绑定手机 |
01010010 | 用户昵称不存在 |
01010011 | 昵称已存在,请重新输入 |
01010012 | 该账号已存在 |
01010013 | Email不存在,请重新输入Email |
01010014 | 发送验证码失败 |
01010014 | 繁体-发送验证码失败 |
01010015 | 失败 |
01010016 | 邮箱验证失败 |
01010017 | 邮箱验证成功 |
01010018 | 密码修改失败 |
01010019 | 密码修改成功 |
01010020 | 昵称修改失败 |
01010021 | 昵称修改成功 |
01010022 | 手机验证码发送失败 |
01010023 | 手机验证码发送成功 |
01010024 | 发送未绑定手机验证码失败 |
01010025 | 发送未绑定手机验证码成功 |
01010026 | 用户绑定失败 |
01010027 | 用户绑定成功 |
01010028 | 手机绑定失败 |
01010029 | 手机绑定成功 |
01010030 | 邮箱绑定失败 |
01010031 | 邮箱绑定成功 |
01010032 | 手机验证码验证失败 |
01010033 | 手机验证码验证成功 |
01010034 | 重置密码失败 |
01010035 | 重置密码成功 |
01010036 | 获取用户信息失败 |
01010037 | 获取用户信息成功 |
01010038 | 该用户暂未绑定手机 |
01010039 | 该手机号已被绑定,请更换手机号 |
01010040 | 用户名不能是手机号 |
01010041 | 用户名不能是邮箱 |
01010043 | 邮箱绑定失败 |
01010044 | 密码修改失败,新密码与原密码相同 |
01010045 | 用户密码为空 |
01010046 | 登录密码不正确 |
01010047 | 手机解绑失败 |
01010048 | 第三方用户已绑定 |
01010049 | 账号为6-18位,数字、字母、”_” |
01010050 | 密码为6-14位,数字、字母组合 |
01010051 | 该账号不存在 |
01010052 | 昵称不合法 |
01010053 | 接口参数不正确,请确认 |
01010054 | 输入的身份证号码格式有误 |
01010055 | 当前用户已做过验证 |
01010056 | 真实姓名格式有误 |
01010057 | 角色信息参数有误 |
01010058 | 参数不全或不完整 |
01010059 | 用户名未作更改 |
01010060 | 未获取到用户信息 |
01010061 | 游戏服Id不得为空 |
01010062 | 用户Id不能为空 |
01010063 | 产品接口未配置 |
01010064 | 调用查询角色接口出错 |
01010065 | 未查询到角色 |
01020001 | 成功 |
01020002 | 密码错误,请重试 |
01020003 | 密码错误,请重试 |
01020004 | 注册失败 |
01020005 | 失败 |
01020006 | 该账号已存在 |
01020007 | 账号为6-18位,数字、字母、”_” |
01020008 | 限制登录 |
01020009 | 限制首登 |
01020010 | 限制初始化 |
01020011 | 当前玩家的手持设备的IP地址已经被游戏封停 |
01020012 | 玩家的手持设备已经被游戏封停 |
01020013 | 当前玩家账号已经被游戏封停 |
01020014 | 没有找到该用户信息 |
01020015 | 查询激活信息失败 |
01020016 | 激活的tokenId不正确 |
01020017 | 用户激活失败 |
01020018 | 激活码无效 |
01020019 | 密码为6-14位,数字、字母组合 |
01020020 | 请使用已激活的账号登录 |
01020021 | 激活码已经被使用 |
01020022 | 您已经激活过其他设备,不能在多台设备上激活 |
01020023 | 用户密码不能为空 |
01020024 | 该账号不存在 |
01020025 | 内测阶段,暂不支持第三方登录 |
01020026 | 您的账号存在安全隐患,请联系客服:4000688900 |
01020027 | 没有该用户信息 |
01020028 | 设备信息获取失败 |
01020029 | 验证码有误 |
01020030 | 验证码已过期 |
01020031 | 注册手机号不能为空 |
01020032 | 验证码不能为空 |
01020033 | 该手机号已被绑定,请更换手机号 |
01020034 | 登录失败,请使用账号密码重试! |
01030000 | 心跳处理成功 |
01030001 | 心跳处理失败 |
01030002 | sessionId为空 |
01030003 | session已过期 |
01040000 | 成功 |
03010000 | 已经被激活 |
03010001 | 角色查询参数不全 |
03010002 | 参数不全 |
03010003 | 角色已注册 |
03010004 | 注册发生错误 |
计费 错误码 | 信息 |
---|---|
21000 | 成功 |
21001 | 请求的json串格式不正确 |
21002 | json对象格式不正确 |
21003 | json字符串转换为对象错误 |
21004 | 道具格式不正确 |
21005 | 返回bean格式不正确 |
21006 | 没有筛出计费点 |
21007 | 驱动格式不正确 |
21099 | 全局异常错误 |
21100 | common节点格式不正确 |
21101 | options节点格式不正确 |
21102 | common中interfaceId不能为空 |
21103 | tokenId格式不正确 |
21104 | serviceId格式不正确 |
21105 | deviceGroupId格式不正确 |
21106 | localeId格式不正确 |
21107 | pCode格式不正确 |
21108 | netSource格式不正确 |
21120 | device格式不正确 |
21121 | mac格式不正确 |
21122 | 手机号码错误 |
21123 | 发货地址格式不正确 |
21130 | 批价ID格式不正确 |
21131 | 道具ID格式不正确 |
21132 | sdkVersion格式不正确 |
21133 | userId格式不正确 |
21134 | roleId格式不正确 |
21135 | roleName格式不正确 |
21136 | gameType格式不正确 |
21137 | gameServerId格式不正确 |
21138 | gameClientVersion格式不正确 |
21139 | 当前业务下没有该道具 |
21140 | 计费点ID格式不正确 |
21141 | 充值金额格式不正确 |
21142 | 货币类型格式不正确 |
21143 | gameServerId在平台没有启用,需要在平台上配置游戏服ID |
21144 | 游戏产品不存在 |
21145 | 平台操作失败. |
21146 | 请求报文头格式不正确 |
21147 | 手机平台ID格式不正确 |
21148 | 设备名称格式不正确 |
21149 | 设备系统版本号格式不正确 |
21150 | 设备分辨率格式不正确 |
21151 | 设备UDID格式不正确 |
21152 | 运营商格式不正确 |
21153 | 设备厂商格式不正确 |
21154 | 手机号格式不正确 |
21155 | 用户ID格式不正确 |
21156 | 代计费功能同步渠道异常 |
21157 | 超过用户日最大计费金额 |
21158 | 超过用户月最大计费金额 |
21159 | 黑名单用户 |
21160 | 充值失败 |
21161 | 超过计费点日最大计费金额 |
21162 | 超过计费点月最大计费金额 |
21163 | 道具名称不能为空 |
21164 | 通知发货成功 |
21165 | 计费失败 |
21166 | 等待支付结果 |
21167 | 指令错误 |
21168 | 已经订购,无需重复订购(包月) |
21169 | 黑名单用户 |
21170 | 虚拟货币单位格式不正确 |
21171 | 虚拟货币数量格式不正确 |
21172 | 虚拟货币单位非法 |
21173 | 虚拟货币数量非法 |
21174 | 货币格式非法 |
21175 | 发货地址在mis上没有配置 |
21176 | SDK同步_验签失败 |
21177 | SDK同步_订单缓存不存在 |
21178 | SDK同步_签名信息格式不正确 |
21179 | 官网_订单号格式不正确 |
21180 | 官网_订单缓存不存在 |
21181 | 官网_充值卡号格式不正确 |
21182 | 官网_充值卡类型格式不正确 |
21183 | 官网_充值卡密码格式不正确 |
21184 | 官网_银行类型格式不正确 |
21185 | 官网_计费点ID格式不正确 |
21185 | 礼包码不得为空 |
21186 | 发货失败 |
21187 | 礼包码不存在或不可用 |
21188 | 礼包码已过期 |
21189 | 礼包码未领取 |
21190 | 礼包码已使用 |
21191 | 该用户已兑换过礼包码 |
21192 | 该设备已兑换过礼包码 |
21193 | 礼包活动暂停中 |
21194 | 礼包码已经用完 |
21195 | 网络异常 |
21196 | 服务内部错误 |
21197 | 传入的礼包码有错误 |
21198 | 传入的礼包ID有错误 |
21199 | 用户未登录 |
21200 | 兑换超过用户最大限制 |
21201 | 游戏产品有误 |
21202 | 策略关系不存在 |
21203 | 联运渠道或推广渠道有误 |
21204 | 推广渠道有误 |
21205 | 机型组有误 |
21206 | 语言有误 |
21207 | 逻辑服策略不存在 |
21208 | 逻辑服有误 |
21209 | 已配置回调地址,sdk同步数据不予处理 |
21210 | 官网充值支付类型格式不正确 |
21211 | 官网充值支付校验类型格式不正确 |
21212 | 官网充值支付校验码格式不正确 |
21213 | 官网充值支付角色不存在 |
21214 | 官网_用户ID格式不正确 |
21215 | 官网_查询起始时间格式不正确 |
21216 | 官网_查询起结束时间式不正确 |
21217 | 官网_分页信息格式不正确 |
21218 | 官网_分页信息每页数量信息格式不正确 |
21219 | 官网_分页信息当前页参数格式不正确 |
21220 | 官网_分页信息当前日期范围不正确 |
21221 | 手机同步订单号和计费点ID不能同时为空 |
21222 | 游戏奖励活动不存在 |
21223 | 游戏奖励活动状态未开启 |
21224 | 不在游戏活动有效期 |
21225 | 用户已领取活动奖励 |
21226 | 未查询到玩家活动充值记录 |
21227 | 用户天兑换次数超出上限 |
21228 | 用户周兑换次数超出上限 |
21229 | 用户月兑换次数超出上限 |
23153 | 官网_第三方订单号不能为空 |
23152 | 官网_实际支付金额不能为空 |
23154 | 签名不能为空 |
23155 | 该笔订单已发货 |
23156 | 离线计费缓存为空 |
23157 | 礼包码未到生效时间 |
22000 | app_product_id格式不正确 |
货币ID | 货币名称 | 货币单位 |
---|---|---|
1 | 人民币 | 分 |
2 | 美元 | 美分 |
3 | 日元 | 円 |
4 | 港币 | 分 |
5 | 英镑 | 便士 |
6 | 新加坡币 | 分 |
7 | 越南盾 | 盾 |
8 | 台币 | 元 |
9 | 韩元 | 元 |
10 | 泰铢 | 萨当 |
苹果2020年4月30日后提交的APP不再支持使用LaunchImage,启动图需要使用StoryBoard来搭建;
该文档对启动图StoryBoard做个简单使用说明
http://sdk.longtubas.com/t3/241/4774/1500008855.html
2021年12月08号,苹果推出 App Store 产品页的新功能,在 App Store 中开发者可以针对 app 产品页的不同版本上使用不同的图标、截屏和 app 预览,通过 A/B Test 找出效果最佳的版本
http://sdk.longtubas.com/t3/241/4774/1500010244.html
Apple 正在大力推动 APP 开发者在深层链接上有更好的体验。所有的消息都围绕着深层链接技术。与此同时, Apple 推出通用链接:一种能够方便的通过传统 HTTP 链接来启动 APP, 使用相同的网址打开网站和 APP
http://sdk.longtubas.com/t3/241/4774/1500010117.html
上海中清龙图软件有限公司