日期 | 版本号 | 修改说明 | 作者 |
---|---|---|---|
2017/10/11 | V4.5.0 | 文档创建 | 尹鑫 |
2018/4/26 | V4.5.0 | 添加新功能,打开指定页面接口 | 尹鑫 |
2020/6/28 | V4.9.0 | 新增appstore促销码领取接口 | 尹鑫 |
接入前,需要由掌趣项目负责人完成渠道申报并在掌趣后台进行配置,从而获取到该游戏的渠道参数、掌趣配置文件。
掌趣 IOS SDK支持 iPhone、iPad、iPod Touch设备,要求armv7、armv7s或arm64架构,操作系统要求Mac要求Lion以上,Xcode要求6以上,iOS SDK要求6.0以上。
掌趣iOS SDK主要由以下几部分构成,如下图:
[1] Ourpalmlib掌趣封装静态库
只支持armv7和arm64架构,固件要求iOS7.0以上
[2] Thirdilb第三方静态库.a或Framework
掌趣静态库封装调用的第三方静态库或Framework
[3] OpenSource第三方开源库
掌趣SDK所使用的第三方开源库或源文件,避免SDK与游戏产生冲突
Xcode->Project->Build Settings工程配置
[1] 添加库的连接参数
请在工程文件Build Settings处,找到Other Linker Flags,并添加以下内容
[2] 请将Apple LLVM 5.0 – Language – C++中C++ Standard Library项修改为以下内容
注意:
(1)Compiler Default的默认值在xcode5中为libstdc++,但在xcode6中的默认值为libc++。
(2)如果游戏需要支持C++11的新特性,C++ Standard Library需要设置为libc++,如下图,并且需要使用llvm文件中的静态库
[3] 其他编译设置
Accelerate.framework
libresolv.9.tbd
AddressBook.framework
MessageUI.framework
AudioToolbox.framework
AVFoundation.framework
StoreKit.framework
EventKitUI.framework
EventKit.framework
libsqlite3.tbd
Security.framework
SystemConfiguration.framework
CoreTelephony.framework
CFNetwork.framework
AdSupport.framework
参数名 | 说明 |
---|---|
Localization native development region | 繁体 CHT 韩语 KOREA 泰语 THAI 英文 EN 越南 VN |
<key>UIUserInterfaceStyle</key>
<string>Light</string>
参数名 | 说明 |
---|---|
Ourpalm_FBMode |
[1] 支持HTTP设置
ios9 下苹果要求 App 内访问网络必须使用 HTTPS ,现阶段不能马上改成 https。
请在 Info.plist 中添加 NSAppTransportSecurity 类型 Dictionary.在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型 Boolean,值设为 YES。如下图
[2] 白名单设置
[3] 相册权限设置
使用Xcode8打包时,中访问相册功能需要设置权限使用描述,如下图
[4] 去除系统冗余日志输出(非必须)
使用Xcode8调试时请做以下设置,防止无用的系统日志在控制台输出,如下图
[1] dSYM文件
在XCODE编译项目之后,会在app旁看见一个同名的dSYM文件。dSYM文件是iOS编译后保存16进制函数地址映射信息的文件,每次应用程序build后,都会生成对应的xxx.app, xxx.app.dSYM文件。通过此文件可以将16进制地址转换成可读的函数地址,精确定位crash位置,如下图所示:
[2] 工程配置
服务端配置:请参考 通用接入文档—> 《SDK服务端接入说明文档》
功能说明
应用启动时,初始化SDK,并添加奔溃、阻塞监控
接口定义
bool ApplicationDidFinishLaunchingWithOptions(void *application,void *launchOptions);
接口示例
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//注意这里不可添加其他代码
OPGameSDK::GetInstance().ApplicationDidFinishLaunchingWithOptions(application, launchOptions);
//…
}
功能说明
1、初始化第三方SDK,同时获取SDK所需要的初始化数据
2、检查版本更新,初始化内部封装了第三方的更新接口
接口定义
void Init(void* controller,OPInitParam opInfo);
注意:
1.初始化接口在不同游戏引擎添加的位置不同,具体参看代码示例
2.游戏本身的初始化最好在SDK的初始化结束并成功后开始,因为部分渠道的SDK有自动展示LOGO的功能,如果游戏的初始化先于SDK的初始化或两者并行可能会造成渠道的LOGO展示部出来或显示时间很短的BUG
3.由于SDK已集成收集奔溃日志的功能,如果游戏使用的是U3D引擎,需要将UnityAppController.mm中的部分代码进行注释,如下图:
参数说明
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
controller | 必填 | UIViewController* | 游戏rootViewcontroller |
opInfo | 必填 | OPInitParam | 用于初始化的参数类 |
OPInitParam参数说明
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
mDebugModel | 必填 | std::string | 是否开启测试模式 |
mGameOnline | 必填 | bool | 游戏类型(false:单机 true:网游) |
mGameResVersion | 非必填 | std::string | 游戏资源版本号 |
mAutoOrientation | 非必填 | std::string | 是否允许自动旋转,默认为true |
mScreenOrientation | 非必填 | OPScreenOrientation | 界面初始化方向,默认为横屏 |
mUseAPIInterface | 非必填 | bool | 设置掌趣官网登录(true:使用API接口,false:使用官网界面 |
接口示例
//初始化回调函数
void initCallBack(bool result,const char* jsonStr)
{
//返回初始化结果
}
(1)对于coco2d-x引擎:
初始化接口必须放在cocos2d::CCApplication::sharedApplication()->run();之后,且需要添加代码self.window.rootViewController = viewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//。。。
[windowmakeKeyAndVisible];
//
CGRect rect = [[UIScreen mainScreen] bounds];
bool Ourpalm_Splash = false; //是否显示闪屏
if (Ourpalm_Splash) {
UIImageView *splashImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Ourpalm_Splash"]];
//横屏
splashImageView.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
//竖屏
//splashImageView.frame = CGRectMake(0, 0, rect.size.width, rect.size.height);
[self.window.rootViewController.view addSubview:splashImageView];
[splashImageView release];
[UIView animateWithDuration:3 animations:^{
} completion:^(BOOL finished) {
[splashImageView removeFromSuperview];
cout<<"OPGameSDK LOG:闪屏结束,OurplamSDK开始初始化!"<<endl;
OPSDK::GetInstance().init(self.viewController);
[NSThread sleepForTimeInterval:3.0];
cout<<"OPGameSDK LOG:游戏开始初始化!"<<endl;
cocos2d::CCApplication::sharedApplication()->run();
}];
}else{
cout<<"OPGameSDK LOG:OurplamSDK开始初始化!"<<endl;
OPSDK::GetInstance().init(self.viewController);
[NSThread sleepForTimeInterval:3.0];
cout<<"OPGameSDK LOG:游戏开始初始化!"<<endl;
cocos2d::CCApplication::sharedApplication()-<run();
}
}
(2)对于unity3d引擎:
初始化接口必须放在OnUnityReady();之后。
- (void)startUnity:(UIApplication*)application
{
//。。。。。。
OnUnityReady();
//掌趣SDK初始化
CGRect rect = [[UIScreen mainScreen] bounds];
bool Ourpalm_Splash = false; //是否显示闪屏
if (Ourpalm_Splash) {
UIImageView *splashImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Ourpalm_Splash"]];
//横屏
splashImageView.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
//竖屏
//splashImageView.frame = CGRectMake(0, 0, rect.size.width, rect.size.height);
[self.window.rootViewController.view addSubview:splashImageView];
[splashImageView release];
[UIView animateWithDuration:3 animations:^{
} completion:^(BOOL finished) {
[splashImageView removeFromSuperview];
cout<<"OPGameSDK LOG:闪屏结束,OurplamSDK开始初始化!"<<endl;
OPSDK::GetInstance().init(self.viewController);
[NSThread sleepForTimeInterval:3.0];
cout<<"OPGameSDK LOG:游戏开始初始化!"<<endl;
//…….
}];
}else{
cout<<"OPGameSDK LOG:OurplamSDK开始初始化!"<<endl;
OPSDK::GetInstance().init(self.viewController);
[NSThread sleepForTimeInterval:3.0];
cout<<"OPGameSDK LOG:游戏开始初始化!"<<endl;
//…….
}
}
void OPSDK::init(void* rootViewController)
{
OPInitParamopInfo;
opInfo.mDebugModel = false; //debug模式,注意游戏提交ipa时一定要设置为false
opInfo.mGameResVersion = "1.0";//游戏资源版本号
opInfo.mGameOnline = true;//游戏类型(false:单机 true:网游)
opInfo.mAutoOrientation = true; //是否自动旋转
opInfo.mScreenOrientation = OPOrientationLandscapeRight; //界面初始化方向
opInfo.mUseAPIInterface = false; //设置掌趣官网登录(true:使用API接口,false:使用官网界面)
// 初始化回调设置
OPGameSDK::GetInstance().InitCallBack(initCallBack);
}
功能说明
获取当前SDK接口哪些接口可用
接口定义
const char* GetEnableInterface();
接口示例
OPGameSDK::GetInstance().GetEnableInterface();
返回数据如下,JSON格式
{"EnterAppBBS":0,"EnterAppCenter":0,"EnterPlatform":1,"EnterUserSetting":1,"HideToolBar":0,"IsLogin":1,"Logout":1,"RegisterLogin":1,"ShowPausePage":0,"ShowToolBar":0,"SwitchAccount":1,"UserFeedback":0}
1: 表示接口可用
0: 表示接口不可用
例如以上返回数据说明:显示隐藏工具栏接口不需要调用,登录、注销、切换账号、用户中心接口需要调用。
功能说明
获取当前SDK渠道信息。
接口定义
const char* GetChannelInfo();
接口示例
OPGameSDK::GetInstance().GetChannelInfo();
返回数据如下,JSON格式
{
"channelId":"3101430031014300", //渠道ID
"channelName":"appstore", //渠道名称
"deviceGroupId":"0002", //机型组ID
"localeId":"01", //语言ID
"serviceId":"1000053831014300000" //业务ID
}
为了方便游戏接入,提供以下接口获取:
(1)获取业务ID
OPGameSDK::GetInstance().GetServiceId();
(2)获取渠道ID
OPGameSDK::GetInstance().GetChannelId();
(3)获取渠道名称
OPGameSDK::GetInstance().GetChannelName();
(4)获取机型组ID
OPGameSDK::GetInstance().GetDeviceGroupId();
(5)获取语言ID
OPGameSDK::GetInstance().GetLocaleId();
功能说明
在调用第三方app进行登录或分享时,通过设置该接口,便可在登录或分享完成后直接返回到游戏中。
接口定义
bool HandleOpenURL(void* url);
bool HandleOpenURL(void* application,void* url,void* sourceApplication,void* annotation);
接口示例
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
if (OPGameSDK::GetInstance().HandleOpenURL(url)) {
return YES;
}
return NO;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if(OPGameSDK::GetInstance().HandleOpenURL(application,url,sourceApplication,annotatio)) {
return YES;
}
return NO;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if (OPGameSDK::GetInstance().HandleOpenURL(application,url,options)) {
return YES;
}
return NO;
}
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));
//登录接口
void RegisterLogin(OPUserType sdkType=kNoneType);
参数说明
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
OPUserType | 必填 | enum | 掌趣官网登录类型 |
接口示例
//回调函数
void loginCallBack(bool result,const char* jsonStr)
{
//返回登录结果
}
//设置登录回调接口
OPGameSDK::GetInstance().RegisterLoginCallBack(loginCallBack);
//登录接口
OPGameSDK::GetInstance().RegisterLogin();
返回的JSON数据格式说明
登录成功时
{
"id":"掌趣平台分配的用户唯一id,区分大小写",
"returnJson":{第三方SDK平台返回的数据,一般情况下游戏无需关心},
"tokenId":"掌趣分配的tokenId",
"userName":"掌趣平台中的用户名"
}
登录失败时
{
"desc":"失败描述",
"reset":"状态码","status":"1"
}
注意:
1.返回失败时,SDK会弹出提示框!对于请求超时(状态码为101),不会弹出提示框,游戏可自动重新连接或自己添加提示框。
2.用户ID区分大小写,相同字母和数字、大小写不同的用户ID代表的是两个不同的用户账号。因此,游戏在使用和存储掌趣用户ID时,务必要严格区分大小写,以免造成游戏内账号和角色的混乱等问题。
3.如果游戏有自己的用户ID,必须和掌趣用户中心的用户ID一一对应,不得出现一对多或者多对一的情况。也不得根据其他条件,组合生成新的用户ID,否则将会出现账号丢失的情况。
功能说明
当游戏角色注册(登录)成功时设置游戏角色注册(登录)信息。
注:
1、游戏角色注册成功后,调用该接口设置角色注册信息。
2、游戏角色登录成功后,调用该接口设置角色登录信息,否则无法计费。
接口定义
void SetGameLoginInfo(OPGameInfo opGameInfo,OPGameType opGameType);
接口定义
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
opGameInfo | 必须 | OPGameInfo | 设置游戏账号信息 |
opGameType | 必须 | OPGameType | 用户标识游戏角色注册登录状态注册:kGameRegister 登录:kGameLogin |
OPParam参数说明
参数名称 | 重要性 | 类型 | 说明 | |
---|---|---|---|---|
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等级 |
接口示例
OPGameInfo 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等级
//游戏角色注册成功时调用
OPGameSDK::GetInstance().SetGameLoginInfo(gameInfo,kGameRegister);
//游戏角色登录成功时调用
OPGameSDK::GetInstance().SetGameLoginInfo(gameInfo,kGameLogin);
功能说明
注销当前登陆账号。游戏客户端调用注销接口(LogOut)前,需要通过设置注销回调接口(RegisterLogoutCallBack)将回调函数指针传给SDK,注销成功后,掌趣SDK会通过回调函数通知游戏客户端。
接口定义
void LogOut();
接口示例
//回调函数
void logoutCallBack(bool result,const char* jsonStr)
{
//返回的JSON数据格式说明
调用登出接口,登出成功时
{"Type":"Logout"} //如果jsonStr == NULL,默认为调用登出接口,登出成功
调用切换账号,登出成功时
{"Type":"SwitchAccount"}
}
//设置注销回调接口
OPGameSDK::GetInstance().RegisterLogoutCallBack (logoutCallBack);
//注销接口
OPGameSDK::GetInstance().LogOut();
功能说明
注销当前登录账号,切换成功后会调用注销回调函数通知游戏客户端。
接口定义
void SwitchAccount();
接口示例
//回调函数
void logoutCallBack(bool result,const char* jsonStr)
{
//返回的JSON数据格式说明
调用登出接口,登出成功时
{"Type":"Logout"} //如果jsonStr == NULL,默认为调用登出接口,登出成功
调用切换账号,登出成功时
{"Type":"SwitchAccount"}
}
//设置注销回调接口
OPGameSDK::GetInstance().RegisterLoginCallBack (logoutCallBack);
//切换账号接口
OPGameSDK::GetInstance().SwitchAccount();
1.掌趣sdk向掌趣计费服务器发起支付请求
2.掌趣计费服务器生成订单号,并向sdk返回支付结果
3.掌趣计费服务器通知游戏服务器发货
4.游戏服务器发送虚拟物品至玩家手机游戏客户端
5.游戏服务器向计费服务器返回发货结果
功能说明
游戏客户端通过调用计费接口,实现游戏中的道具购买。游戏客户端调用计费接口(Purchase)前,需要继承IAPListener,通过设置接口(SetListener)将对象指针传给SDK,计费成功后,掌趣SDK会通过OnIAPResult通知游戏客户端。
接口定义
void SetListener(IAPListener* listener);
//计费接口
void BuyIAP(OPIAPParam params);
参数说明
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
mPrice | 必填 | std::string | 商品价格,单位详见3.4货币类型及对应ID |
mCurrencyType | 必填 | std::string | 货币类型,详见3.4货币类型及对应ID |
mPropName | 必填 | std::string | 商品名称,不含数字 |
mPropId | 必填 | std::string | 游戏自定义的商品ID,必传。 |
mPropNum | 必填 | std::string | 商品数量,只能是数字 |
mPropDescribe | 非必填 | std::string | 商品描述 |
mDeleverUrl | 必填 | std::string | 发货地址 |
mExtendParams | 非必填 | std::string | 游戏自定义扩展参数 |
mGameRoleLevel | 非必填 | std::string | 游戏角色等级 |
mGameRoleVipLeve | 非必填 | std::string | 游戏角色VIP等级 |
接口示例
class OPTest : public IAPListener
{ //通知计费结果
void OnIAPResult(bool result, const char* jsonStr);
}
void OPTest::OPPurchase
{
OPIAPParam 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等级(可选)
OPGameSDK::GetInstance().SetListener(this);
OPGameSDK::GetInstance().BuyIAP(params); //购买接口
}
注:1、Android端和iOS端返回错误码不一致。2、Android返回参数key为小写{String ssid, String pbid},iOS端返回json中的key为小驼峰{ “desc”:成功描述,”propId”:”道具ID”,”reset”:”120”,”ssId”:”订单号}
OPGameSDK::GetInstance().RestorePayments("ubi.heroes.0.99d");
功能说明
兑换礼包码
接口定义
void ExchangeGameCode(const char *gamecode,const char *deleverUrl,const char *extendParams);
参数说明
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
gamecode | 必填 | const char * | 礼包码 |
deleverUrl | 必填 | const char * | 礼包码发货地址 |
extendParams | 非必填 | const char * | 游戏自定义参数 |
接口示例
void OPSDK::OnGamecodeResult(bool result, const char* jsonStr)
{
// 返回礼包码兑换结果
}
void OPSDK:: ExchangeGameCode()
{
const char* gamecode = "";
const char* deleverUrl = "http://wwww;
const char* extendParams = "";
OPGameSDK::GetInstance().ExchangeGameCode(gamecode,deleverUrl,extendParams);
}
功能说明
用于玩家在appstore兑换促销码后,领取相关道具时使用的接口,需要在角色登录后才可进行调用
参数说明
参数名称 重要性 类型 说明
deliverUrl 必填 string * 游戏发货地址
OPGameSDK::GetInstance().GetPromotionCode("https://global-1000112300.gamebean.net/index.php?mod=http&act=Account.ouCallBack&ver=current");
功能说明
在登录游戏后,调用此接口打开用户反馈界面
游戏需要自己设计UI展示以及展示位置,当用户点击此按钮时,调用接口,打开客服反馈页面。
工程配置
添加客服SDK(OPFeedbackSDK.a)及资源(ourpalm_fbres.bundle),如下图
接口定义
void UserFeedback();
接口示例
OPGameSDK::GetInstance().UserFeedback();
OPGameSDK::GetInstance().ChannelSpreads("ShowFAQ",nil);
NSArray *array = [[NSArray alloc] initWithObjects:@"odin-hs-open",@"odin-close", nil];
OPGameSDK::GetInstance().ChannelSpreads("ShowConversation",(void*)array);
NSString *faqId = @"31";
NSArray *array = [[NSArray alloc] initWithObjects:@"odin-hs-open",@"odin-close", nil];
OPGameSDK::GetInstance().ChannelSpreads("ShowSingleFAQ",faqId,(void*)array);
NSString *faqId = @"29";
NSArray *array = [[NSArray alloc] initWithObjects:@"odin-hs-open",@"odin-close", nil];
OPGameSDK::GetInstance().ChannelSpreads("ShowFAQSection",faqId,(void*)array);
游戏未登录时,需要通过此接口设置用户信息
NSMutableDictionary *dic = [[[NSMutableDictionary alloc] init] autorelease];
[dic setObject:@"用户名称" forKey:@"userName"];
[dic setObject:@"用户ID" forKey:@"userId"];
[dic setObject:@"角色ID" forKey:@"roleId"];
[dic setObject:@"角色名称" forKey:@"roleName"];
[dic setObject:@"角色等级" forKey:@"roleLevel"];
[dic setObject:@"游戏服ID" forKey:@"serverId"];
OPGameSDK::GetInstance().ChannelSpreads("SetFAQUserInfo",dic);
功能说明
掌趣APNS推送所必须的接口添加,请在AppDelegate.mm中添加以下方法:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
OPGameSDK::GetInstance().AppliactionDidRegisterForRemoteNotificationsWithDeviceToken(application, deviceToken);
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
OPGameSDK::GetInstance().AppliactionDidFailToRegisterForRemoteNotificationsWithError(application, error);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
OPGameSDK::GetInstance().AppliactionDidReceiveRemoteNotification(application, userInfo);
}
接口定义:
检测当前账号是否可删除
bool CanShowDeleteAccount();
接口定义:
销毁账号接口
void DeleteAccount(void* func);
接口示例
//删除账号回调
void deleteAccountCallback(bool result,const char* jsonStr)
{
if (result) {
OPSDK::GetInstance().ShowMsg("删除账号成功");
}else{
OPSDK::GetInstance().ShowMsg("删除账号失败");
}
}
void OPSDK::deleteAccount()
{
if (OPGameSDK::GetInstance().CanShowDeleteAccount()) {
OPGameSDK::GetInstance().DeleteAccount((void*)deleteAccountCallback);
}else{
OPSDK::GetInstance().ShowMsg("游客账号不支持删除账号!");
}
}
// 俄语 ru_RU
// 法语 fr_FR
// 德语 de_DE
// 西班牙 es_ES
// 葡萄牙语 pt_BR
// 英国英语 en_GB
// 意大利语 it_IT
// 繁体 zh_HK
// 泰语 th_TH
// 印尼 in_ID
// 韩语 ko_KR
// 日语 ja_JP
// 土耳其语 tr_TR
// 简体中文 zh_CN
// 英语-菲律宾 en_PH
// 英语-新加坡 en_SG
// 泰语 th_TH
// 印尼语 in_ID
// 简体中文-马来西亚 zh_MY
// 英语-其他国家 en_XX
// 越南-越南语 vi_VN
OPGameSDK::GetInstance().ChannelSpreads("SetLanguage",(void*)"zh_CN");
(1)Info.plist文件配置参数
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxx~xxxx</string>
(2)admob.plist文件配置广告ID
<key>AdUnitID</key>
<string>ca-app-pub-xxxx/xxxx</string>
(3)info.plist文件配置广告SKAdNetwork
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4fzdc2evr5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4pfyvq9l8r.skadnetwork </string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2fnua5tdw4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5a6flpkh64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v72qych5uu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ludvb6z3bs.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cp8zw746q7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c6k4g5qg8m.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s39g8k73mm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qy4746246.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3sh42y64q3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f38h382jlk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hs6bdukanm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>prcb7njmu6.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v4nxqhlyqp.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wzmmz9fp6w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>yclnxrl5pm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>t38b2kh725.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9rd848q2bz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>y5ghdn5j9k.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n6fk4nfna4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v9wttpbfk9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n38lu8286q.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>47vhws6wlr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a2p9lx4jpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4468km3ulz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2u9pt9hc89.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8s468mfl3y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>av6w8kgt66.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>klf5c3l5u5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ppxm28t8ap.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>424m5254lk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ecpz2srf59.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>uw77j35x4d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mlmmfzh3r3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>578prtvx9j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4dzt52r2t5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gta9lk7p23.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>e5fvkxwrpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8c4e2ghe7u.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zq492l623r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3rd42ekr43.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qcr597p9d.skadnetwork</string>
</dict>
</array>
void adResultCallBack(const char* adState,const char* adDesc)
{
cout<<"adState="<<adState<<" adDesc="<<adDesc<<endl;
if (strcmp(adState, "PreparedFailed") == 0) {
//广告准备失败
}else if (strcmp(adState, "PreparedSuccess") == 0){
//广告准备成功
}if (strcmp(adState, "Show") == 0) {
//广告开始展示
}else if (strcmp(adState, "Clicked") == 0){
//广告已被点击
}else if (strcmp(adState, "Closed") == 0){
//广告窗口已关闭
}else if (strcmp(adState, "VideoAdCompleted") == 0){
//广告结束播放
}else if (strcmp(adState, "ShowFailed") == 0){
//广告播放失败
}
}
OPGameSDK::GetInstance().ChannelSpreads("SetAdmobAdResultCallback",(void*)adResultCallBack);
OPGameSDK::GetInstance().ChannelSpreads("ShowAdmobRewardedAd");
功能说明
获取ServiceCode用于服务端日志统计
1.将OPGameKit.framework添加至工程中
2.在调用SDK初始化接口后调用以下方法即可,详情可参见demo
接口示例
const char* gameResVersion = "1.0"; //游戏资源版本号
OPGameKit::GetInstance().GetServiceCode(gameResVersion);
功能说明
设置工具栏的显示状态和位置
接口定义
//显示工具栏
void ShowToolBar(OPToolBarPlace toolBarPlace);
//隐藏工具栏
void HideToolBar();
接口示例
OPGameSDK::GetInstance().ShowToolBar(OPToolBarAtTopLeft);
OPGameSDK::GetInstance().HideToolBar();
功能说明
进入平台中心的首页界面
接口定义
void EnterPlatform();
接口示例
OPGameSDK::GetInstance().EnterPlatform();
功能说明
在游戏暂停或者从后台恢复的时候显示暂停页
接口定义
void ShowPausePage();
接口示例
-(void)applicationWillEnterForeground:(UIApplication*)application
{
OPGameSDK::GetInstance().ShowPausePage();
}
功能说明
打开指定页面接口(可用于论坛、社区、活动)
接口示例
OPGameSDK::GetInstance().ChannelSpreads("ShowWebview",(void*)"http://bbs.0708.com");
功能说明
如果玩家当前ip是欧盟或美国,SDK会自动弹出隐私协议弹窗。
隐私弹窗点击“不同意”、“同意”、隐私协议更新或不需要展示隐私协议时,游戏都会收到此回调。
同时,游戏必须等待协议回调通知,然后才能调用登录和打点等其它SDK功能
特别注意:
如果游戏自己实现了IDFA授权功能,则需要主动调用以下接口,具体参看示例
OPGameSDK::GetInstance().ChannelSpreads(“EnableATTracking”);
可选值 | 意义 | 说明 |
---|---|---|
0 | 点击隐私弹窗同意按钮 | 显示弹窗并且用户点击了同意协议 |
1 | 不用展示隐私弹窗 | 不需要展示协议、或者用户已经同意过协议 |
2 | 点击隐私弹窗拒绝按钮 | 显示弹窗并且用户点击了不同意协议 |
3 | 隐私协议更新,并点击隐私弹窗同意按钮 | 隐私协议内容有变化,并且用户又同意了新版本的协议 |
4 | 该产品没有配置隐私协议功能 |
说明:
如果回调通知为2(用户拒绝),游戏需要主动退出进程
如果回调结果为其他值,游戏可以继续执行登录和打点
(注意:游戏可能在进入游戏后再次收到此回调(例如隐私协议更新时),注意处理此情况)
接口示例
// 隐私协议回调函数
void privacyCallBack(int code)
{
if (code == 0 || code == 1) {
//如果游戏自己实现了IDFA授权功能,则参看以下示例
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
OPGameSDK::GetInstance().ChannelSpreads("EnableATTracking");
}];
} else {
OPGameSDK::GetInstance().ChannelSpreads("EnableATTracking");
}
}
}
//设置用户协议回调
OPGameSDK::GetInstance().ChannelSpreads("SetPrivacyCallback",(void*)privacyCallBack);
状态码 | 说明 |
---|---|
101 | 连接超时 |
102 | 网络异常,请检查网络 |
103 | 数据异常 |
104 | SDK初始化参数错误 |
105 | SDK语言配置文件错误 |
106 | Ourpalm.cfg配置文件错误 |
107 | SDK未初始化成功 |
108 | SDK未设置登录回调 |
109 | 未设置服务器id |
110 | 未设置价格 |
111 | 未设置货币类型 |
112 | 未设置商品名称 |
113 | 未设置商品id |
114 | 未设置虚拟货币单位 |
115 | 未设置虚拟货币数量 |
116 | 未设置发货地址 |
117 | 未设虚拟货币单位 |
118 | 未设商品数量 |
119 | 用户取消支付 |
120 | 支付失败 |
121 | 支付页面加载失败 |
200 | 支付成功 |
201 | 下单成功 |
货币ID是没有限定位数的纯自增值,详情:货币类型详情列表
货币ID | 货币名 | 货币单位 |
---|---|---|
1 | 人民币 | 分 |
2 | 美元 | 美分 |
3 | 日元 | 円 |
4 | 港币 | 分 |
5 | 英镑 | 便士 |
6 | 新加坡币 | 分 |
7 | 越南盾 | 盾 |
8 | 台币 | 元 |
9 | 韩元 | 分 |
10 | 泰铢 | 萨当 |
14 | 马来西亚林令吉 | 分 |
17 | 菲律宾币 | 仙 |
19 | 印尼卢比 | 卢比 |
21 | 柬埔寨瑞尔 | 瑞尔 |
22 | 加拿大元 | 分 |
28 | 巴西雷亚尔 | 分 |
29 | 智利比索 | 分 |
32 | 欧元 | 分 |
67 | 墨西哥比索 | 分 |
70 | 秘鲁新索尔 | 分 |
93 | 哥斯达黎加科朗 | 分 |
95 | 俄罗斯卢布 | 戈比 |
110 | 巴拉圭瓜尼 | 分 |
122 | 缅甸元 | 分 |
125 | 哥伦比亚比索 | 分 |