{{ errorTipText }}
接入前,需要由掌趣项目负责人完成渠道申报并在掌趣后台进行配置,从而获取到该游戏的渠道参数、掌趣配置文件。
掌趣 IOS SDK支持 iPhone、iPad、iPod Touch设备,要求arm64架构,操作系统要求Mac要求Lion以上,Xcode要求14以上,iOS SDK要求9.0以上。
掌趣iOS SDK主要由以下几部分构成,如下图:
[1] Ourpalmlib掌趣封装静态库
arm64架构,固件要求iOS9.0以上
[2] Thirdilb第三方静态库.a或Framework
掌趣静态库封装调用的第三方静态库或Framework
[3] OpenSource第三方开源库
掌趣SDK所使用的第三方开源库或源文件,避免SDK与游戏产生冲突
[4] 根据具体需求动态添加相应的第三方库
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
AdServices.framework
iAd.framework
AppTrackingTransparency.framework
Info.plist文件中设置初始语言
<key>CFBundleDevelopmentRegion</key><string>EN</string>
| 参数名 | 说明 |
|---|---|
| Localization native development region | 繁体 CHT 韩语 KOREA 泰语 THAI 英文 EN 越南 VN |
<key>UIUserInterfaceStyle</key><string>Light</string>
[1] 支持HTTP设置
ios9 下苹果要求 App 内访问网络必须使用 HTTPS ,现阶段不能马上改成 https。
请在 Info.plist 中添加 NSAppTransportSecurity 类型 Dictionary.在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型 Boolean,值设为 YES。如下图
[2] 白名单设置
[1] dSYM文件
在XCODE编译项目之后,会在app旁看见一个同名的dSYM文件。dSYM文件是iOS编译后保存16进制函数地址映射信息的文件,每次应用程序build后,都会生成对应的xxx.app, xxx.app.dSYM文件。通过此文件可以将16进制地址转换成可读的函数地址,精确定位crash位置,如下图所示:

[2] 工程配置
[1] 配置Info.plist文件
<key>FacebookAppID</key><string>142XXXXXXX8453</string><key>FacebookClientToken</key><string>dce6XXXXXXXXXXXXXXXXXXXXb7df862d</string><key>FacebookDisplayName</key><string>XXXXXXX</string><key>LSApplicationCategoryType</key><string></string><key>LSApplicationQueriesSchemes</key><array><string>fbapi</string><string>fbauth</string><string>fbauth2</string><string>fbshareextension</string></array>
[2] 配置Url Scheme
<key>CFBundleURLTypes</key><array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLName</key><string></string><key>CFBundleURLSchemes</key><array><string>fb+FacebookAppID</string></array></dict></array>
[1] 配置Info.plist文件
<key>APIKey</key><string>rS2LXXXXXXXXXXXXX8hlOBiQ0q</string><key>APISecret</key><string>JGHItgXXXXXXXXXXXXXXXXXXXXXXXXXXXXXdnKC</string>
[2] 配置Url Scheme
<key>CFBundleURLTypes</key><array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLSchemes</key><array><string>twitterkit-APIKey</string></array></dict></array>
[1] 配置Info.plist文件
<key>VKAppID</key><string>801xxx90</string>
[2] 配置Url Scheme
<key>CFBundleURLTypes</key><array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLName</key><string>vk7740809</string><key>CFBundleURLSchemes</key><array><string>vk+VKAppID</string></array></dict></array>
[1] 配置Info.plist文件
<key>com.openinstall.APP_KEY</key><string>exxxxxe</string>
服务端配置:请参考 通用接入文档—> 《SDK服务端接入说明文档》
功能说明
应用启动时,初始化SDK
接口定义
void Ourpalm_Application_DidFinishLaunchingWithOptions(void *application,void *launchOptions);
接口示例
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions{//注意这里不可添加其他代码Ourpalm_Application_DidFinishLaunchingWithOptions(application,launchOptions);//…}
功能说明
1、初始化第三方SDK,同时获取SDK所需要的初始化数据
2、检查版本更新,初始化内部封装了第三方的更新接口
接口定义
void Ourpalm_Init(const char* jsonParams);
参数说明
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| gameVer | 必填 | const char* | 游戏版本号 |
| gameResVer | 必填 | const char* | 游戏资源版本号 |
接口示例
//初始化回调函数void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_Ourpalm_Init") == 0) {//初始化回调}}
SetGameEngineMessageListener((void*)Ourpalm_GameEntryCallback);Json::Value initParam;initParam["gameVer"] = Json::Value("1.0");initParam["gameResVer"] = Json::Value("1.0");Json::FastWriter fast_writer;string jsonInitParam = fast_writer.write(initParam);Ourpalm_Init(jsonInitParam.c_str());
功能说明
获取当前SDK接口哪些接口可用
接口定义
const char* Ourpalm_GetEnableInterface();
接口示例
Ourpalm_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渠道信息。
(1)获取业务ID
const char* Ourpalm_GetServiceId();
(2)获取渠道ID
const char* Ourpalm_GetChannelId();
(3)获取渠道名称
const char* Ourpalm_GetChannelName();
(4)获取机型组ID
const char* Ourpalm_GetDeviceGroupId();
(5)获取语言ID
const char* Ourpalm_GetLocaleId();
功能说明
在调用第三方app进行登录或分享时,通过设置该接口,便可在登录或分享完成后直接返回到游戏中。
接口定义
bool Ourpalm_Application_OpenUrl_SourceApplication_Annotation(void* application,void* url,void* sourceApplication,void* annotation);bool Ourpalm_Application_OpenUrl_Options(void *application,void* url,void *options);
接口示例
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)urlsourceApplication:(NSString *)sourceApplication annotation:(id)annotation{Ourpalm_Application_OpenUrl_SourceApplication_Annotation(application, url, sourceApplication, annotation);return YES;}- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{Ourpalm_Application_OpenUrl_Options(application, url, options);return YES;}
接口定义
bool Ourpalm_Application_ContinueUserActivity_RestorationHandler(void *application,void* userActivity);

1.手机游戏客户端会调用掌趣sdk进行sdk初始化操作
2.掌趣sdk向掌趣用户中心服务器发起登录/注册的请求
3.掌趣用户中心服务器向掌趣sdk返回token、用户信息等等
4.掌趣sdk向返回游戏客户端登录结果和用户信息
5.游戏客户端上传用户信息到游戏服务器
6.服务器根据token向掌趣用户中心服务器获取用户信息
7.掌趣用户中心服务器向游戏服务器返回用户信息
8.游戏服务器向游戏客户端返回登录结果
功能说明
登录掌趣用户中心。游戏客户端调用登录接口(RegisterLogin)前,需要通过设置登录回调接口(RegisterLoginCallBack)将回调函数指针传给SDK,登录成功后,掌趣SDK会通过回调函数通知游戏客户端。
接口定义
void Ourpalm_Login();
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_Ourpalm_Login") == 0) {//登录回调}}//登录接口Ourpalm_Login();
返回的JSON数据格式说明
登录成功时
{"userId":"掌趣平台分配的用户唯一id,区分大小写","tokenId":"掌趣分配的tokenId",}
登录失败时
{"desc":"失败描述","reset":"状态码","status":"1"}
注意:
1.返回失败时,SDK会弹出提示框!对于请求超时(状态码为101),不会弹出提示框,游戏可自动重新连接或自己添加提示框。
2.用户ID区分大小写,相同字母和数字、大小写不同的用户ID代表的是两个不同的用户账号。因此,游戏在使用和存储掌趣用户ID时,务必要严格区分大小写,以免造成游戏内账号和角色的混乱等问题。
3.如果游戏有自己的用户ID,必须和掌趣用户中心的用户ID一一对应,不得出现一对多或者多对一的情况。也不得根据其他条件,组合生成新的用户ID,否则将会出现账号丢失的情况。
功能说明
当游戏角色注册(登录)成功时设置游戏角色注册(登录)信息。
注:
1、游戏角色注册成功后,调用该接口设置角色注册信息。
2、游戏角色登录成功后,调用该接口设置角色登录信息,否则无法计费。
接口定义
void Ourpalm_SetGameInfo(int type,const char* jsonParams);
接口定义
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| type | 必须 | int | 用户标识游戏角色注册登录状态注册:1 登录:2 |
| jsonParams | 必须 | const char* | 角色信息 |
接口示例
Json::Value gameInfo;gameInfo["roleID"] = "123"; //角色idgameInfo["roleName"] = gameRoleName; //角色名gameInfo["serverID"] = "9999"; //游戏服idgameInfo["gameServerName"] = "s1"; //游戏服名称gameInfo["rolelv"] = "1"; //角色等级gameInfo["roleviplv"] = "1"; //角色vip等级Json::FastWriter fast_writer;string jsonParams = fast_writer.write(gameInfo);//角色注册Ourpalm_SetGameInfo(1, jsonParams.c_str());//角色登录Ourpalm_SetGameInfo(2, jsonParams.c_str());
功能说明
注销当前登陆账号。
接口定义
void Ourpalm_Logout();
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_Ourpalm_Logout") == 0) {//注销回调}}//注销接口Ourpalm_Logout();
功能说明
注销当前登录账号,切换成功后会调用注销回调函数通知游戏客户端。
接口定义
void Ourpalm_SwitchAccount();
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_SwitchingAccount") == 0) {//切换回调}}//切换接口Ourpalm_SwitchAccount();
返回的JSON数据格式说明
登录成功时
{"userId":"掌趣平台分配的用户唯一id,区分大小写","tokenId":"掌趣分配的tokenId",}
功能说明
调用此接口后,游客客户端再次调用登录接口时会生成新的游客快登账号。
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){Json::Reader json_reader;Json::Value json_object;if (!json_reader.parse(param, json_object)){return;}string idStr = json_object["id"].asString();if (strcmp(methodName, "Callback_Ourpalm_Channel_Spreads") == 0) {if (strcmp(idStr.c_str(), "Callback_PlayAgain") == 0) {}}}//开启新游客接口Ourpalm_Channel_Spreads("PlayAgain");

1.掌趣sdk向掌趣计费服务器发起支付请求
2.掌趣计费服务器生成订单号,并向sdk返回支付结果
3.掌趣计费服务器通知游戏服务器发货
4.游戏服务器发送虚拟物品至玩家手机游戏客户端
5.游戏服务器向计费服务器返回发货结果
功能说明
游戏客户端通过调用计费接口,实现游戏中的道具购买。
接口定义
void Ourpalm_Pay(const char* propId, const char* chargeCash, const char* currencyType, const char* propName,const char* propCount, const char* propDes, const char* Gameurl, const char* jsonExtendParams);
参数说明
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| propId | 必须 | const char* | 游戏自定义的道具ID 必传。 |
| chargeCash | 必须 | const char* | 道具价格,单位为分。 |
| currencyType | 必须 | const char* | 货币类型(1人民币2美元3日元4港币5英镑6新加坡币7越南盾8台币9韩元) |
| propName | 必须 | const char* | 道具名称 |
| propCount | 必须 | const char* | 道具数量 |
| propDes | 必须 | const char* | 道具描述 |
| Gameurl | 必须 | const char* | 游戏发放道具服务器地址,用户支付成功后掌趣计费中心会回调此地址告知游戏进行道具发放。 |
| jsonExtendParams.userId | 必须 | const char* | 掌趣SDK登录成功后返回的userId |
| jsonExtendParams.roleId | 必须 | const char* | 玩家角色id |
| jsonExtendParams.rolelv | 必须 | const char* | 角色等级,请传数字,如游戏中无角色等级可以传null |
| jsonExtendParams.serverId | 必须 | const char* | 玩家登录的游戏服id |
| jsonExtendParams.gameServerName | 必须 | const char* | 玩家登录的游戏服务器名 |
| jsonExtendParams.roleviplv | 必须 | const char* | 角色VIP等级,请传数字,如游戏中无角色VIP等级可以传null |
| jsonExtendParams.Params | 可选 | const char* | 游戏自定义数据,支付成功后,计费中心会将此字段数据回传给游戏服务器。 |
| jsonExtendParams.purchaseinfo | 必须 | const char* | 买量BI要求的自定义数据,json字符串,需要携礼包ID、研发生成的付费会话唯一ID、研发订单ID等,{\”order_funnel_id\”:\”95b49366-acb8-41a1-ba94-5577bd362074\”,\”package_id\”:\”200279\”,\”dev_order_id\”:\”36291\”} |
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_Ourpalm_Pay") == 0) {//支付回调}}void OPSDK::pay(){//消耗性const char* propId = "com.fingerfun.coc.ios.diamond_1";const char* chargeCash = "99";const char* currencyType = "2";const char* propName = "Handful of Diamonds";const char* propCount = "1";const char* propDes = "Handful of Diamonds";const char* Gameurl = "http://pay.gamebean.net/OurPalm_Pay_Accept/ResponseDeliver?ssid=2013030715493703719999";Json::Value extendParams;extendParams["Params"] = "Params";//游戏自定义参数,选填,透传参数extendParams["serverID"] = "9999";//游戏服ID,必填extendParams["roleID"] = "1000000";//角色ID,必填extendParams["rolelv"] = "rolelv";//角色等级extendParams["roleviplv"] = "roleviplv";//角色VIP等级extendParams["roleName"] = "roleName";//角色名称extendParams["gameServerName"] = "gameServerName";//游戏服名称Json::Value purchaseInfo;purchaseInfo["package_id"] = "礼包ID";purchaseInfo["order_funnel_id "] = "研发生成的付费会话唯一id";purchaseInfo["dev_order_id "] = "研发订单号id";extendParams["purchaseInfo"] = purchaseInfo;//选填Json::FastWriter fast_writer;string jsonExtendParams = fast_writer.write(extendParams);Ourpalm_Pay(propId, chargeCash, currencyType, propName, propCount, propDes, Gameurl, jsonExtendParams.c_str());}
数据示例:
{"channelOrderId": "2000000399537533",//第三方订单号"code": "200", //购买成功"desc": "","pdid": "buy1", //商品id"ssId": "","success": "1"}
void Ourpalm_RestorePayments(const char* propId);
功能说明:
游戏调用此接口后,可以返回AppStore商品id对应的商品信息(商品ID、商品价格、商品货币单位、商品title、商品描述),注意需要游戏传入AppStore后台配置的商品id。
void Ourpalm_Channel_Spreads(const char* key, const char* jsonExtendParams);
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){Json::Reader json_reader;Json::Value json_object;if (!json_reader.parse(param, json_object)){return;}string idStr = json_object["id"].asString();if (strcmp(methodName, "Callback_Ourpalm_Channel_Spreads") == 0) {if (strcmp(idStr.c_str(), "SkuDetails") == 0) {}}}void OPSDK::getPropInfo{Json::Value propList;propList.append("dingyue3");propList.append("dingyue4");Json::FastWriter fast_writer;string jsonExtendParams = fast_writer.write(propList);Ourpalm_Channel_Spreads("SkuDetails",jsonExtendParams.c_str());}
数据示例
{"code": "0","desc": "","id": "SkuDetails","result": [{"description": "","price": "¥1.00","priceCurrencyCode": "CNY","productId": "com.tmsk.dpcq3d.apps.dingyue3","title": ""}, {"description": "","price": "¥1.00","priceCurrencyCode": "CNY","productId": "com.tmsk.dpcq3d.apps.dingyue3","title": ""}],"success": "1"}
功能说明
兑换礼包码
接口定义
void Ourpalm_GiftExchange(const char* giftCode, const char* deleverUrl, const char* extendParams);
参数说明
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| giftCode | 必填 | const char * | 礼包码 |
| deleverUrl | 必填 | const char * | 礼包码发货地址 |
| extendParams | 非必填 | const char * | 游戏自定义参数 |
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){Json::Reader json_reader;Json::Value json_object;if (!json_reader.parse(param, json_object)){return;}string tmp = json_object["success"].asString();int success = atoi(tmp.c_str());if (strcmp(methodName, "Callback_GiftExchange") == 0) {string packageId = json_object["packageId"].asString();//礼包码IDstring extendParams = json_object["extendParams"].asString();//游戏透传参数}}void OPSDK:: ExchangeGameCode(){const char* gamecode = "";const char* deleverUrl = "http://wwww;const char* extendParams = "";Ourpalm_GiftExchange(gamecode,deleverUrl,extendParams);}
功能说明
用于玩家在appstore兑换促销码后,领取相关道具时使用的接口,需要在角色登录后才可进行调用
参数说明
参数名称 重要性 类型 说明
deliverUrl 必填 string * 游戏发货地址
void Ourpalm_GetPromotionCode(const char* deliverUrl);
Ourpalm_EnterServiceQuestion();

appId、domainName由AIHelp平台获取
参数说明:
| 参数名 | 类型 | 用途 | 注解 |
|---|---|---|---|
| entranceId | string | 自定义入口 ID | AIHelp 后台配置的自定义入口 ID |
| userTags | string | 用户标签 | 在具体为用户配置标签时,需要确保已经提前在 AIHelp 后台配置好了对应的标签内容 |
| customData | string | 玩家信息 | 自定义用户数据 |
void OPSDK::openFAQs(){Json::Value aiHelpjson;//AIHelp 后台配置的自定义入口 IDaiHelpjson["entranceId"] = "E001";//用户标签。在具体为用户配置标签时,需要确保已经提前在 AIHelp 后台配置好了对应的标签内容aiHelpjson["userTags"] = "vip,suggestion";//自定义用户数据Json::Value customData;customData["baseLevel"] = "123";customData["loadingProgress"] = "25";Json::FastWriter fast_writer;string customDataStr = fast_writer.write(customData);aiHelpjson["customData"] = customDataStr;string jsonStr = fast_writer.write(aiHelpjson);Ourpalm_Channel_Spreads("aihelp_openFAQs", jsonStr.c_str());}
参数说明:
| 参数名 | 类型 | 用途 | 注解 |
|---|---|---|---|
| entranceId | string | 自定义入口 ID | AIHelp 后台配置的自定义入口 ID |
| userTags | string | 用户标签 | 在具体为用户配置标签时,需要确保已经提前在 AIHelp 后台配置好了对应的标签内容 |
| customData | string | 玩家信息 | 自定义用户数据 |
void OPSDK::openServiceDialog(){Json::Value aiHelpjson;//AIHelp 后台配置的自定义入口 IDaiHelpjson["entranceId"] = "CS01";//用户标签。在具体为用户配置标签时,需要确保已经提前在 AIHelp 后台配置好了对应的标签内容aiHelpjson["userTags"] = "vip";//自定义用户数据Json::Value customData;customData["baseLevel"] = "123";customData["loadingProgress"] = "25";Json::FastWriter fast_writer;string customDataStr = fast_writer.write(customData);aiHelpjson["customData"] = customDataStr;string jsonStr = fast_writer.write(aiHelpjson);Ourpalm_Channel_Spreads("aihelp_openServiceDialog", jsonStr.c_str());}
功能说明
掌趣APNS推送所必须的接口添加,请在AppDelegate.mm中添加以下方法:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{Ourpalm_AppliactionDidRegisterForRemoteNotificationsWithDeviceToken(application, deviceToken);}- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{Ourpalm_AppliactionDidFailToRegisterForRemoteNotificationsWithError(application, error);}- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{Ourpalm_AppliactionDidReceiveRemoteNotification(application, userInfo);}
接口定义:
销毁账号接口
void Ourpalm_CloseAccountWithUserInfo();
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_CloseAccountWithUserInfo") == 0) {//删除账号回调}}void OPSDK::deleteAccount(){Ourpalm_CloseAccountWithUserInfo();}
// 俄语 ru_RU// 法语 fr_FR// 德语 de_DE// 西班牙 es_ES// 葡萄牙语 pt_BR// 意大利语 it_IT// 繁体 zh_HK// 泰语 th_TH// 印尼 in_ID// 韩语 ko_KR// 日语 ja_JP// 土耳其语 tr_TR// 简体中文 zh_CN// 英语-菲律宾 en_PH// 英语-新加坡 en_SG// 英国-英语 en_GB// 英语-其他国家 en_XX// 泰语 th_TH// 印尼语 in_ID// 简体中文-马来西亚 zh_MY// 越南-越南语 vi_VNOurpalm_SetLanguage("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 Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName.c_str(), "Callback_AdmobRewardedAd") == 0) {string adState = json_object["adState"].asString();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){//广告播放失败}}}
Ourpalm_Channel_Spreads("ShowAdmobRewardedAd");
此接口用于发送游戏自定义日志,以及广告统计打点日志
函数原型
void Ourpalm_SendGameInfoLog(string logID, string logKey, string json);
函数原型
| 参数名 | 类型 | 用途 | 注解 |
|---|---|---|---|
| logID | string | 日志id | 由平台定义,游戏自定义为”1003” |
| logKey | string | 日志关键字 | 游戏自定义为”role-act” |
| json | string | 日志内容 | json格式字符串。根据具体用途自定义包含哪些字段 |
注意事项
- 这些参数值和结构,由平台定义,研发需按平台要求的结构传。- 注意1,确保启动游戏的时候正常调用了PCSDK初始化方法后,再调用发日志接口;启动游戏时调用的PCSDK初始化方法有别于安装时调用的方法,无须设置 disable_sdk_act_log 这个参数。- 注意2,actId 为事件ID,只支持字母,数字,下划线命名,不支持中文。- 注意3,actName 为事件名称,支持中文。- 注意4,detail 为需要随本次发生事件一并记录的额外信息,可以是普通字符串,也可以是json字符串,不要包含竖线 | ,总长度不要超过 1000 个字符。
代码示例
//发送游戏日志-->登陆场景加载成功Json::Value event_paras;event_paras["roleLevel"] = "0";event_paras["roleVipLevel"] = "0";event_paras["actId"] = "LoginSceneLoaded";event_paras["actName"] = "登陆场景加载成功";event_paras["detail"] = "begin";Json::FastWriter fast_writer;string json = fast_writer.write(event_paras);Ourpalm_SendGameInfoLog("1003", "role-act", json.c_str());
logId和LogKey对应表
| logId | Logkey | 描述 |
|---|---|---|
| 8 | role-credit | 玩家充值日志 |
| 9 | role-item-update | 玩家虚拟物品变更 |
| 10 | role-prop-update | 玩家属性变更 |
| 1001 | role-task | 任务 |
| 1002 | role-stage | 副本,场景 |
| 1003 | role-act | 自定义事件 |
| 2001 | role-interact | 自定义交互事件 |
此接口用于发送广告事件打点日志
函数原型
void Ourpalm_SendAnalyticsInfoLog(const char* logKey, const char* json);
函数原型
| 参数名 | 类型 | 用途 | 注解 |
|---|---|---|---|
| logKey | const char* | 日志关键字 | 由广告BI部门定义的广告事件key |
| json | const char* | 日志内容 | json格式字符串。根据具体用途自定义包含哪些字段 |
注意事项
- 这些参数值和结构,由广告BI部门定义,研发需按要求的结构传。
代码示例
更多广告打点相关示例请参阅:
//注册日志(账号首次登陆该游戏,唯一不可重复)Json::Value event_paras;Json::FastWriter fast_writer;string json = fast_writer.write(event_paras);Ourpalm_SendAnalyticsInfoLog("registration", json.c_str());//特殊自定义日志-购买二次回传(如需使用,请提前联系平台对接人进行配置)//举例:充值0.99美元,需要事件参数Json::Value event_paras;event_paras["price"] = Json::Value("0.99");event_paras["currency"] = Json::Value("USD");event_paras["uni_roleId"] = Json::Value("test_uni_roleId");Json::FastWriter fast_writer;string json = fast_writer.write(event_paras);Ourpalm_SendAnalyticsInfoLog("customIAP", json.c_str());
接入说明:
appsflyer支持在打点事件中添加游戏自定义属性,游戏可以在自定义广告打点事件中添加如下四个定义好的自定义属性:
uni_accountId(账号ID)
uni_roleId(角色ID)
接口示例:
Json::Value event_paras;event_paras["uni_accountId"] = Json::Value("test_uni_accountId");event_paras["uni_roleId"] = Json::Value("test_uni_roleId");Json::FastWriter fast_writer;string json = fast_writer.write(event_paras);Ourpalm_SendAnalyticsInfoLog("custom1", json);
使用说明:
1、上面四个字段名是固定的,不能改,游戏可以选择其中几个传入,不是每个字段都需要传入,如果研发同学要新加字段,
需要提前联系技术平台,平台添加完成后才能二次打包测试。
2、所有想添加自定义属性的打点事件都需要参照上面的方法单独传入自定义字段。
string appsFlyerId = Ourpalm_Channel_Spreads("getAppsFlyerID");
onelink完整接入流程参见:
https://ourpalm.feishu.cn/wiki/wikcnICNWvGeTWxHInGANeD06Vc
如果是apk包,请研发同学提供apk包的SHA256码,如果是aab包,需要运营同学登录google Play Console后台-设置-应用完整性-应用签名 copy SHA-256证书指纹;
市场同学配置后,会提供applink及url sheme参数,研发同学参照上面文档4.4 Step4(To研发):调试“调起并打开APP”功能部分,
在游戏母包manifest配置文件中,主activity需要新增两个intent-filter节点。
游戏母包添加完成后,二次打包测试,通过市场同学提供的onelink,调试【点击链接后“未安装APP则打开商店、已安装APP则打开APP”】。
(IOS) 设置广告归因回调地址
Info.plist文件中配置
<key>NSAdvertisingAttributionReportEndpoint</key><string>https://appsflyer-skadnetwork.com/</string>
请注意:部分参数请与广告部门同事进行获取和确认(参数后有备注)
AF官方文档:点击跳转
接口范例:
Json::Value event_paras;event_paras["inviteOneLink"] = "inviteOneLink";//广告同事提供event_paras["deep_link_value"] = "deep_link_value";//广告同事提供event_paras["deep_link_sub1"] = "deep_link_sub1";//广告同事提供event_paras["deep_link_sub2"] = "deep_link_sub2";//广告同事提供event_paras["af_sub1"] = "af_sub1";//广告同事提供event_paras["summer_sale"] = "summer_sale";//广告同事提供event_paras["mobile_share"] = "mobile_share";//广告同事提供Json::FastWriter fast_writer;string json = fast_writer.write(event_paras);Ourpalm_Channel_Spreads("appsflyer_Link_url", json.c_str());注意事项:map的key-value类型和参数名字 必须严格按照范例传入回调范例:case "Callback_Ourpalm_Channel_Spreads":{if (id.equals("appsFlyer_LinkUrl")) {String url = callback.GetValue("result");}}
case "Callback_Ourpalm_Channel_Spreads":{if (id == "appsFlyer_onConversionDataSuccess"){//激活回调返回数据参考:{"install_time":"2023-05-09 03:01:10.454","af_status":"Organic","af_message":"organic install","is_first_launch":true}var result = callback.GetValue("result");}}
case "Callback_Ourpalm_Channel_Spreads":{if (callback.GetValue("id") == "appsFlyer_onDeepLinking"){//deeplink返回数据参考:{ "af_dp":"com.fingerfun.coc.ios%3A%2F%2F","path":"\/YeOs","media_source":"appsflyer_sdk_test_int","scheme":"https","link":"https:\/\/my-ourpalm.onelink.me\/YeOs?pid=appsflyer_sdk_test_int&is_retargeting=true&clickid=079a4034-b873-4295-baa4-7c36d3872bc4&af_dp=com.fingerfun.coc.ios%253A%252F%252F&af_force_deeplink=true&AID=eeb42833-ac0c-4572-84e9-f87d92fd526c","host":"my-ourpalm.onelink.me","AID":"eeb42833-ac0c-4572-84e9-f87d92fd526c","is_deferred":false}var result = callback.GetValue("result");}}
因为数数SDK比较独立,没有对其接口进行封装的必要,游戏可以自行接入。
参考链接:数数SDK
注意,具体需要使用的数数sdk版本,以平台BI的要求为准
使用自定义接口Ourpalm_Channel_Spreads获取这些信息,列表如下:
| id | 含义 |
|---|---|
| getAppsFlyerID | appsflyer_id |
| getAppInstanceId | firebase的appInstanceId |
| getBaseDeviceInfo | 基础设备信息集合(BaseDeviceInfo) |
代码示例
char* appsFlyerID = Ourpalm_Channel_Spreads("getAppsFlyerID");string appsFlyerIDString = appsFlyerID;Ourpalm_NativeFree(appsFlyerID);//注意释放内存,防止内存泄漏cout<<"appsFlyerID="<<appsFlyerIDString<<endl;char* appInstanceId = Ourpalm_Channel_Spreads("getAppInstanceId");string appInstanceIdString = appInstanceId;Ourpalm_NativeFree(appInstanceId);//注意释放内存,防止内存泄漏cout<<"appInstanceId="<<appInstanceIdString<<endl;char* baseDeviceInfo = Ourpalm_Channel_Spreads("getBaseDeviceInfo");string baseDeviceInfoString = baseDeviceInfo;Ourpalm_NativeFree(baseDeviceInfo);//注意释放内存,防止内存泄漏cout<<"baseDeviceInfo="<<baseDeviceInfoString<<endl;char* baseAppInfo = Ourpalm_Channel_Spreads("getBaseAppInfo");string baseAppInfoString = baseAppInfo;Ourpalm_NativeFree(baseAppInfo);//注意释放内存,防止内存泄漏cout<<"baseAppInfo="<<baseAppInfoString<<endl;
包含信息如下表所列:
| id | 含义 | 备注 |
|---|---|---|
| platform_id | 操作系统 | 0:Android, 1: IOS, 2: PC |
| device_id | 设备ID | sdk生成的随机设备ID |
| is_emulator | 是否运行在模擬器环境 | “0”或”1”,需要特殊权限,暂不可用 |
| cpuInfo | 设备cpu参数 | RAM\CPU核数\CPU频率\CPU芯片 |
| company | 设备厂商 | oUa中的”手机品牌” |
| resolution | 像素 | 设备分辨率(宽*高) |
| androidId | deviceAndroidId | 安卓设备有,其它设备为空或者”0” |
| idfa | ios设备IDFA | ios设备独有,其他设备为空或者”0” |
| idfv | ios设备IDFV | ios设备独有,其他设备为空或者”0” |
| oaid | 华为广告标识符 | 部分安卓设备有,其他设备为空或者”0” |
| appInstanceId | firebase appInstanceId | firebase appInstanceId |
| appsflyerId | appsflyerId | |
| adjust_adid | adjust_adid | |
| advertisingId | GAID |
void Ourpalm_NetworkDiagnosis(const char* checkTargetArray, const char* extParams, const char* isDisplay);
参数1:checkTargetArray 参数为检测目标的地址的数组
[{"http_url":"待检测的url","host":"host地址","http":"1"},{"host":"ip地址","tcp_port":端口号,"tcp_ping":"1"}]
参数2:extParams 参数为检测信息中可附带的额外信息,没有的值可为空(“”)
{"reason":"serverlist","serverId":"10001","userId":"0000011101"}
参数3:isDisplay :游戏调用时传 “0”, 游戏是无感上传
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_FacebookShareLink") == 0) {}}void OPSDK::shareLink(){Json::Value shareJson;shareJson["shareType"] = "shareFacebookLink";shareJson["link"] = "http://98kof.game-bean.com";Json::FastWriter fast_writer;string shareStr = fast_writer.write(shareJson);Ourpalm_Share(shareStr.c_str());}
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_FacebookShareImage") == 0) {}}void OPSDK::shareLink(){Json::Value shareJson;shareJson["shareType"] = "shareFacebookImage";//网络图片// shareJson["picture"] = Json::Value("http://content.game-bean.com/image/98kof/pc/pc_banner01.jpg");//本地图片NSString *filePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"localPic.png"];shareJson["imageUrl"] = [filePath UTF8String];Json::FastWriter fast_writer;string shareStr = fast_writer.write(shareJson);Ourpalm_Share(shareStr.c_str());}
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_FacebookShareInvite") == 0) {}}void OPSDK::inviteFriend(){Json::Value shareJson;shareJson["shareType"] = "shareFacebookInvite";shareJson["title"] = Json::Value("title"); //标题shareJson["message"] = Json::Value("message"); //消息Json::FastWriter fast_writer;string shareStr = fast_writer.write(shareJson);Ourpalm_Share(shareStr.c_str());}
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_TwitterShare") == 0) {}}void OPSDK::twitterShare(){//分享Json::Value shareJson;shareJson["shareType"] = "shareTwitter";shareJson["link"] = "http://www.google.com";shareJson["imageUrl"] = "http://cmscdn.gamebean.com/original/CMSsave/film/0/preview/100_1.jpg?tmp=1560906675000";shareJson["description"] = "xxxtwitter分享测试!xxxxx";Json::FastWriter fast_writer;string shareStr = fast_writer.write(shareJson);Ourpalm_Share(shareStr.c_str());}
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_ShareOpenInstall") == 0) {}}void OPSDK::shareOpenInstall(){Json::Value shareJson;shareJson["shareType"] = "shareOpenInstall";shareJson["text"] = Json::Value("分享文本");shareJson["sharekey"] = Json::Value("abcdef");Json::FastWriter fast_writer;string shareStr = fast_writer.write(shareJson);Ourpalm_Share(shareStr.c_str());}
功能说明
获取ServiceCode用于服务端日志统计
1.将OPGameKit.framework添加至工程中
2.在调用SDK初始化接口后调用以下方法即可,详情可参见demo
接口示例
const char* gameResVersion = "1.0"; //游戏资源版本号OPGameKit::GetInstance().GetServiceCode(gameResVersion);
功能说明
设置工具栏的显示状态和位置
接口示例
Ourpalm_Channel_Spreads("ShowToolBar");Ourpalm_Channel_Spreads("HideToolBar");
功能说明
进入平台中心的首页界面
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_Ourpalm_AccountBind” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0”,取消:”2” |
| jsonParams.code | string | 错误码 |
| jsonParams.desc | string | 结果状态说明 |
| jsonParams.userId | string | 掌趣userid,成功时才有此字段 |
| jsonParams.bindType | string | 绑定类型,成功时才有此字段,可能的值: “google”, “facebook”, “vk”, “twitter”, “gamecenter”,”email”及“account” |
| jsonParams.bindPlatformJson | string | 此绑定方式可提供的额外数据,成功时才有此字段 |
不同绑定类型,bindPlatformJson对应参数值,范例如下:
facebook范例:{"token_for_business":"AbwRsy594dBTNzKJ","name":"指针","picture":{"data":{"height":600,"is_silhouette":false,"url":"https:\/\/platform-lookaside.fbsbx.com\/platform\/profilepic\/?asid=1801576980023900&gaming_photo_type=unified_picture&ext=1639723523&hash=AeSpx1PW3H4p6XbHTs4","width":600}},"id":"1801576980023900","originalProductUserId":"1801576980023900"}twitter 范例:{"userId":"1438080497515515908","name":"leecm","screen_name":"leecm_test"}vk 范例:没有返回用户名字,注意判断{"accessToken":"..."}email 范例:{"name":"liguangcai@ourpalm.com"}account 范例:{"name":"luginsssass"}
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_Ourpalm_AccountUnBind” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0”,取消:”2” |
| jsonParams.code | string | 错误码 |
| jsonParams.desc | string | 结果状态说明 |
| jsonParams.userId | string | 掌趣userid,成功时才有此字段 |
| jsonParams.unBindType | string | 绑定类型,成功时才有此字段,可能的值: “google”, “facebook”, “vk”, “twitter”, “gamecenter”,”email”及“account” |
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_Ourpalm_AccountBind") == 0) {//绑定回调}else if (strcmp(methodName, "Callback_Ourpalm_AccountUnBind") == 0) {//解绑回调}}Ourpalm_GoCenter();
功能说明
在游戏暂停或者从后台恢复的时候显示暂停页
接口示例
-(void)applicationWillEnterForeground:(UIApplication*)application{Ourpalm_ApplicationWillEnterForeground();}
功能说明
打开指定页面接口(可用于论坛、社区、活动)
接口示例
Ourpalm_Channel_Spreads("ShowWebview",(void*)"http://bbs.0708.com");
功能说明
用户在应用内为app评分,无需跳转appstore
接口示例
Ourpalm_Channel_Spreads("showAppReview");
功能说明
如果玩家当前ip是欧盟或美国,SDK会自动弹出隐私协议弹窗。
隐私弹窗点击“不同意”、“同意”、隐私协议更新或不需要展示隐私协议时,游戏都会收到此回调。
同时,游戏必须等待协议回调通知,然后才能调用登录和打点等其它SDK功能
| 可选值 | 意义 | 说明 |
|---|---|---|
| 0 | 点击隐私弹窗同意按钮 | 显示弹窗并且用户点击了同意协议 |
| 1 | 不用展示隐私弹窗 | 不需要展示协议、或者用户已经同意过协议 |
| 2 | 点击隐私弹窗拒绝按钮 | 显示弹窗并且用户点击了不同意协议 |
| 3 | 隐私协议更新,并点击隐私弹窗同意按钮 | 隐私协议内容有变化,并且用户又同意了新版本的协议 |
| 4 | 该产品没有配置隐私协议功能 |
说明:
如果回调通知为2(用户拒绝),游戏需要主动退出进程
如果回调结果为其他值,游戏可以继续执行登录和打点
(注意:游戏可能在进入游戏后再次收到此回调(例如隐私协议更新时),注意处理此情况)
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "ShowPrivacyProtocol") == 0) {//隐私协议回调int code = json_object["code"].asInt();string msg;switch (code) {case 0:msg = "点击隐私弹窗同意按钮(0)";break;case 1:msg = "不需要展示协议、或者用户已经同意过协议(1)";break;case 2:msg = "显示弹窗并且用户点击了不同意协议(2)";break;case 3:msg = "隐私协议内容有变化,并且用户又同意了新版本的协议(3)";break;case 4:msg = "该产品没有配置隐私协议功能(4)";break;default:break;}}}
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_ShowBindEmail") == 0) {}}void OPSDK::ShowBindEmail(){Ourpalm_Channel_Spreads("ShowBindEmail");}
数据示例:
{"code": "0","data": {"curBindingPlatform": "email","emailAccount": "xxxxxx@126.com"},"id": "Callback_CheckBindEmail","success": "1"}
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_CheckBindEmail") == 0) {}}void OPSDK::CheckBindEmail(){Ourpalm_Channel_Spreads("CheckBindEmail");}
数据示例:
{"code": "0","data": {"curBindingPlatform": "email","emailAccount": "xxxxxx@126.com" //如果emailAccount为空字符串代表未绑定邮箱},"id": "Callback_CheckBindEmail","success": "1"}
功能说明
游客账号绑定账号密码
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_bindOurpalmAccount") == 0) {}}void OPSDK::bindOurpalmAccount(const char* userName,const char* userPwd,const char* confirmPwd){Json::Value json;json["accountName"] = userName;json["pwd"] = userPwd;json["confirmPwd"] = confirmPwd;Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_bindOurpalmAccount,jsonStr.c_str());}
功能说明
修改官网账号密码
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_modifyAccountPwd") == 0) {}}void OPSDK::modifyAccountPwd(const char* userName,const char* oldPwd,const char* newPwd){Json::Value json;json["accountName"] = userName;json["oldPwd"] = oldPwd;json["newPwd"] = newPwd;Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_modifyAccountPwd,jsonStr.c_str());}
功能说明
当用户忘记密码时,已绑定邮箱的官网账号,可以通过此接口重置密码
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_resetAccountPwd") == 0) {}}void OPSDK::resetAccountPwd(const char* email,const char* code){Json::Value json;json["emailName"] = email;json["code"] = code;//邮箱验证码:可通过16.2.1 获取邮箱验证码Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_resetAccountPwd,jsonStr.c_str());}
功能说明
使用官网账号进行切换
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_SwitchingAccount") == 0) {}}void OPSDK::switchOurpalmAccount(const char* userName,const char* pwd){Json::Value json;json["accountName"] = userName;json["pwd"] = pwd;Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_switchOurpalmAccount,jsonStr.c_str());}
功能说明
发送邮箱验证码
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_sendEmailCode") == 0) {}}void OPSDK::sendEmailCode(const char* email,const char* usage){Json::Value json;json["email"] = email;json["usage"] = usage;//参看usage参数说明Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_sendEmailCode,jsonStr.c_str());}
usage 参数说明
| usage | 含义 |
|---|---|
| bind | 在绑定邮箱时获取邮箱验证码 |
| unbind | 在解绑邮箱时获取邮箱验证码 |
| resetAccountPwd | 在重置账号密码时获取邮箱验证码 |
| resetEmailPwd | 在重置邮箱密码时获取邮箱验证码 |
功能说明
用户绑定邮箱账号
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_bindEmailAccount") == 0) {}}void OPSDK::bindEmailAccount(const char* emailName,const char* pwd,const char* code){Json::Value json;json["emailName"] = emailName;json["pwd"] = pwd;json["code"] = code;//邮箱验证码:可通过16.2.1 获取邮箱验证码Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_bindEmailAccount,jsonStr.c_str());}
功能说明
用户解绑邮箱
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_unBindEmailAccount") == 0) {}}void OPSDK::unBindEmailAccount(const char* emailName,const char* code){Json::Value json;json["emailName"] = emailName;json["code"] = code;//邮箱验证码:可通过16.2.1 获取邮箱验证码Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_unBindEmailAccount,jsonStr.c_str());}
功能说明
修改邮箱密码
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_modifyEmailPwd") == 0) {}}void OPSDK::modifyEmailPwd(const char* email,const char* oldPwd,const char* newPwd){Json::Value json;json["emailName"] = email;json["oldPwd"] = oldPwd;json["newPwd"] = newPwd;Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_modifyEmailPwd,jsonStr.c_str());}
功能说明
用户忘记邮箱账号密码时,可通过此接口重置邮箱密码
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_resetEmailPwd") == 0) {}}void OPSDK::resetEmailPwd(const char* email,const char* code){Json::Value json;json["emailName"] = email;json["code"] = code;Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_resetEmailPwd,jsonStr.c_str());}
功能说明
使用邮箱账号进行切换
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_SwitchingAccount") == 0) {}}void OPSDK::switchEmailAccount(const char* emailName,const char* pwd){Json::Value json;json["emailName"] = emailName;json["pwd"] = pwd;Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_switchEmailAccount,jsonStr.c_str());}
功能说明
绑定第三方账号,facebook, apple, vk, twitter, gamecenter
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_bindThirdAccount") == 0) {}}void OPSDK::bindThirdAccount(const char* accountType){//accountType: facebook, apple, vk, twitter, gamecenterJson::Value json;json["accountType"] = accountType;Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_bindThirdAccount,jsonStr.c_str());}
功能说明
解绑绑定第三方账号,facebook, apple, vk, twitter, gamecenter
| key | key-类型 | |
|---|---|---|
| jsonParams.success | string | 成功:”1”,失败:”0”,取消:”2” |
| jsonParams.code | string | 错误码 |
| jsonParams.desc | string | 结果状态说明 |
| jsonParams.unBindType | string | 解绑类型,成功时才有此字段,可能的值: “google”, “facebook”, “vk”, “twitter”, “gamecenter”,”email”及“account” |
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_unBindThirdAccount") == 0) {}}void OPSDK::unBindThirdAccount(const char* accountType){//accountType: facebook, apple, vk, twitter, gamecenterJson::Value json;json["accountType"] = accountType;Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_unBindThirdAccount,jsonStr.c_str());}
功能说明
切换第三方账号,facebook, apple, vk, twitter, gamecenter
接口示例
void Ourpalm_GameEntryCallback(const char* methodName,const char* param){if (strcmp(methodName, "Callback_SwitchingAccount") == 0) {}}void OPSDK::switchThirdAccount(const char* accountType){//accountType: facebook, apple, vk, twitter, gamecenterJson::Value json;json["accountType"] = accountType;Json::FastWriter fast_writer;string jsonStr = fast_writer.write(json);Ourpalm_Channel_Spreads(API_switchThirdAccount,jsonStr.c_str());}
| 状态码 | 说明 |
|---|---|
| 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 | 哥伦比亚比索 | 分 |