海外整合SDK iOS接入文档

1 接入指南

1.1 获取配置文件

接入前,需要由掌趣项目负责人完成渠道申报并在掌趣后台进行配置,从而获取到该游戏的渠道参数、掌趣配置文件。

1.2 掌趣SDK构成

掌趣 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] 根据具体需求动态添加相应的第三方库

1.3 搭建开发环境

1.3.1 工程配置

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] 其他编译设置

1.3.2 Framework添加及配置

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

1.3.3 语言配置

Info.plist文件中设置初始语言

  1. <key>CFBundleDevelopmentRegion</key>
  2. <string>EN</string>
参数名 说明
Localization native development region 繁体 CHT
韩语 KOREA
泰语 THAI
英文 EN
越南 VN

1.3.4 iOS13暗黑模式

  1. <key>UIUserInterfaceStyle</key>
  2. <string>Light</string>

1.3.5 iOS9、iOS10配置

[1] 支持HTTP设置
ios9 下苹果要求 App 内访问网络必须使用 HTTPS ,现阶段不能马上改成 https。
请在 Info.plist 中添加 NSAppTransportSecurity 类型 Dictionary.在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型 Boolean,值设为 YES。如下图


[2] 白名单设置

1.3.6 dSYM符号化文件配置

[1] dSYM文件
在XCODE编译项目之后,会在app旁看见一个同名的dSYM文件。dSYM文件是iOS编译后保存16进制函数地址映射信息的文件,每次应用程序build后,都会生成对应的xxx.app, xxx.app.dSYM文件。通过此文件可以将16进制地址转换成可读的函数地址,精确定位crash位置,如下图所示:



[2] 工程配置

1.4 配置第三方SDK

1.4.1 Facebook配置

[1] 配置Info.plist文件

  1. <key>FacebookAppID</key>
  2. <string>142XXXXXXX8453</string>
  3. <key>FacebookClientToken</key>
  4. <string>dce6XXXXXXXXXXXXXXXXXXXXb7df862d</string>
  5. <key>FacebookDisplayName</key>
  6. <string>XXXXXXX</string>
  7. <key>LSApplicationCategoryType</key>
  8. <string></string>
  9. <key>LSApplicationQueriesSchemes</key>
  10. <array>
  11. <string>fbapi</string>
  12. <string>fbauth</string>
  13. <string>fbauth2</string>
  14. <string>fbshareextension</string>
  15. </array>

[2] 配置Url Scheme

  1. <key>CFBundleURLTypes</key>
  2. <array>
  3. <dict>
  4. <key>CFBundleTypeRole</key>
  5. <string>Editor</string>
  6. <key>CFBundleURLName</key>
  7. <string></string>
  8. <key>CFBundleURLSchemes</key>
  9. <array>
  10. <string>fb+FacebookAppID</string>
  11. </array>
  12. </dict>
  13. </array>

1.4.2 Twitter配置

[1] 配置Info.plist文件

  1. <key>APIKey</key>
  2. <string>rS2LXXXXXXXXXXXXX8hlOBiQ0q</string>
  3. <key>APISecret</key>
  4. <string>JGHItgXXXXXXXXXXXXXXXXXXXXXXXXXXXXXdnKC</string>

[2] 配置Url Scheme

  1. <key>CFBundleURLTypes</key>
  2. <array>
  3. <dict>
  4. <key>CFBundleTypeRole</key>
  5. <string>Editor</string>
  6. <key>CFBundleURLSchemes</key>
  7. <array>
  8. <string>twitterkit-APIKey</string>
  9. </array>
  10. </dict>
  11. </array>

1.4.3 VK配置

[1] 配置Info.plist文件

  1. <key>VKAppID</key>
  2. <string>801xxx90</string>

[2] 配置Url Scheme

  1. <key>CFBundleURLTypes</key>
  2. <array>
  3. <dict>
  4. <key>CFBundleTypeRole</key>
  5. <string>Editor</string>
  6. <key>CFBundleURLName</key>
  7. <string>vk7740809</string>
  8. <key>CFBundleURLSchemes</key>
  9. <array>
  10. <string>vk+VKAppID</string>
  11. </array>
  12. </dict>
  13. </array>

1.4.4 OpenInstall配置

[1] 配置Info.plist文件

  1. <key>com.openinstall.APP_KEY</key>
  2. <string>exxxxxe</string>

1.5 接入准备

服务端配置:请参考 通用接入文档—> 《SDK服务端接入说明文档》

2 初始化

2.1 启动接口

功能说明
应用启动时,初始化SDK
接口定义

  1. void Ourpalm_Application_DidFinishLaunchingWithOptions(void *application,void *launchOptions);

接口示例

  1. - (BOOL)application:(UIApplication *)application
  2. didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  3. {
  4. //注意这里不可添加其他代码
  5. Ourpalm_Application_DidFinishLaunchingWithOptions(application,launchOptions);
  6. //…
  7. }

2.2 初始化接口

功能说明
1、初始化第三方SDK,同时获取SDK所需要的初始化数据
2、检查版本更新,初始化内部封装了第三方的更新接口
接口定义

  1. void Ourpalm_Init(const char* jsonParams);

参数说明

参数名称 重要性 类型 说明
gameVer 必填 const char* 游戏版本号
gameResVer 必填 const char* 游戏资源版本号

接口示例

  1. //初始化回调函数
  2. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  3. {
  4. if (strcmp(methodName, "Callback_Ourpalm_Init") == 0) {
  5. //初始化回调
  6. }
  7. }
  1. SetGameEngineMessageListener((void*)Ourpalm_GameEntryCallback);
  2. Json::Value initParam;
  3. initParam["gameVer"] = Json::Value("1.0");
  4. initParam["gameResVer"] = Json::Value("1.0");
  5. Json::FastWriter fast_writer;
  6. string jsonInitParam = fast_writer.write(initParam);
  7. Ourpalm_Init(jsonInitParam.c_str());

2.3 获取SDK接口信息

功能说明
获取当前SDK接口哪些接口可用

接口定义

  1. const char* Ourpalm_GetEnableInterface();

接口示例

  1. Ourpalm_GetEnableInterface();

返回数据如下,JSON格式

  1. {"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: 表示接口不可用

例如以上返回数据说明:显示隐藏工具栏接口不需要调用,登录、注销、切换账号、用户中心接口需要调用。

2.4 获取渠道信息接口

功能说明
获取当前SDK渠道信息。

(1)获取业务ID

  1. const char* Ourpalm_GetServiceId();

(2)获取渠道ID

  1. const char* Ourpalm_GetChannelId();

(3)获取渠道名称

  1. const char* Ourpalm_GetChannelName();

(4)获取机型组ID

  1. const char* Ourpalm_GetDeviceGroupId();

(5)获取语言ID

  1. const char* Ourpalm_GetLocaleId();

2.5 设置openURL

功能说明
在调用第三方app进行登录或分享时,通过设置该接口,便可在登录或分享完成后直接返回到游戏中。
接口定义

  1. bool Ourpalm_Application_OpenUrl_SourceApplication_Annotation(void* application,void* url,void* sourceApplication,void* annotation);
  2. bool Ourpalm_Application_OpenUrl_Options(void *application,void* url,void *options);

接口示例

  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  2. sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  3. {
  4. Ourpalm_Application_OpenUrl_SourceApplication_Annotation(application, url, sourceApplication, annotation);
  5. return YES;
  6. }
  7. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
  8. {
  9. Ourpalm_Application_OpenUrl_Options(application, url, options);
  10. return YES;
  11. }

接口定义

  1. bool Ourpalm_Application_ContinueUserActivity_RestorationHandler(void *application,void* userActivity);

3 登录功能

3.1 登录流程


1.手机游戏客户端会调用掌趣sdk进行sdk初始化操作
2.掌趣sdk向掌趣用户中心服务器发起登录/注册的请求
3.掌趣用户中心服务器向掌趣sdk返回token、用户信息等等
4.掌趣sdk向返回游戏客户端登录结果和用户信息
5.游戏客户端上传用户信息到游戏服务器
6.服务器根据token向掌趣用户中心服务器获取用户信息
7.掌趣用户中心服务器向游戏服务器返回用户信息
8.游戏服务器向游戏客户端返回登录结果

3.2 登录接口

功能说明
登录掌趣用户中心。游戏客户端调用登录接口(RegisterLogin)前,需要通过设置登录回调接口(RegisterLoginCallBack)将回调函数指针传给SDK,登录成功后,掌趣SDK会通过回调函数通知游戏客户端。

接口定义

  1. void Ourpalm_Login();

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_Ourpalm_Login") == 0) {
  4. //登录回调
  5. }
  6. }
  7. //登录接口
  8. Ourpalm_Login();

返回的JSON数据格式说明
登录成功时

  1. {
  2. "userId":"掌趣平台分配的用户唯一id,区分大小写",
  3. "tokenId":"掌趣分配的tokenId",
  4. }

登录失败时

  1. {
  2. "desc":"失败描述",
  3. "reset":"状态码","status":"1"
  4. }

注意:
1.返回失败时,SDK会弹出提示框!对于请求超时(状态码为101),不会弹出提示框,游戏可自动重新连接或自己添加提示框。
2.用户ID区分大小写,相同字母和数字、大小写不同的用户ID代表的是两个不同的用户账号。因此,游戏在使用和存储掌趣用户ID时,务必要严格区分大小写,以免造成游戏内账号和角色的混乱等问题。
3.如果游戏有自己的用户ID,必须和掌趣用户中心的用户ID一一对应,不得出现一对多或者多对一的情况。也不得根据其他条件,组合生成新的用户ID,否则将会出现账号丢失的情况。

3.3 设置角色信息

功能说明
当游戏角色注册(登录)成功时设置游戏角色注册(登录)信息。

注:
1、游戏角色注册成功后,调用该接口设置角色注册信息。
2、游戏角色登录成功后,调用该接口设置角色登录信息,否则无法计费。

接口定义

  1. void Ourpalm_SetGameInfo(int type,const char* jsonParams);

接口定义

参数名称 重要性 类型 说明
type 必须 int 用户标识游戏角色注册登录状态注册:1 登录:2
jsonParams 必须 const char* 角色信息

接口示例

  1. Json::Value gameInfo;
  2. gameInfo["roleID"] = "123"; //角色id
  3. gameInfo["roleName"] = gameRoleName; //角色名
  4. gameInfo["serverID"] = "9999"; //游戏服id
  5. gameInfo["gameServerName"] = "s1"; //游戏服名称
  6. gameInfo["rolelv"] = "1"; //角色等级
  7. gameInfo["roleviplv"] = "1"; //角色vip等级
  8. Json::FastWriter fast_writer;
  9. string jsonParams = fast_writer.write(gameInfo);
  10. //角色注册
  11. Ourpalm_SetGameInfo(1, jsonParams.c_str());
  12. //角色登录
  13. Ourpalm_SetGameInfo(2, jsonParams.c_str());

3.4 注销接口

功能说明
注销当前登陆账号。

接口定义

  1. void Ourpalm_Logout();

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_Ourpalm_Logout") == 0) {
  4. //注销回调
  5. }
  6. }
  7. //注销接口
  8. Ourpalm_Logout();

3.5 切换账号

功能说明
注销当前登录账号,切换成功后会调用注销回调函数通知游戏客户端。

接口定义

  1. void Ourpalm_SwitchAccount();

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_SwitchingAccount") == 0) {
  4. //切换回调
  5. }
  6. }
  7. //切换接口
  8. Ourpalm_SwitchAccount();

返回的JSON数据格式说明
登录成功时

  1. {
  2. "userId":"掌趣平台分配的用户唯一id,区分大小写",
  3. "tokenId":"掌趣分配的tokenId",
  4. }

3.6 开启新游客接口

功能说明
调用此接口后,游客客户端再次调用登录接口时会生成新的游客快登账号。

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. Json::Reader json_reader;
  4. Json::Value json_object;
  5. if (!json_reader.parse(param, json_object)){
  6. return;
  7. }
  8. string idStr = json_object["id"].asString();
  9. if (strcmp(methodName, "Callback_Ourpalm_Channel_Spreads") == 0) {
  10. if (strcmp(idStr.c_str(), "Callback_PlayAgain") == 0) {
  11. }
  12. }
  13. }
  14. //开启新游客接口
  15. Ourpalm_Channel_Spreads("PlayAgain");

4 支付功能

4.1 支付流程


1.掌趣sdk向掌趣计费服务器发起支付请求
2.掌趣计费服务器生成订单号,并向sdk返回支付结果
3.掌趣计费服务器通知游戏服务器发货
4.游戏服务器发送虚拟物品至玩家手机游戏客户端
5.游戏服务器向计费服务器返回发货结果

4.2 支付接口

功能说明
游戏客户端通过调用计费接口,实现游戏中的道具购买。

接口定义

  1. 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\”}

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_Ourpalm_Pay") == 0) {
  4. //支付回调
  5. }
  6. }
  7. void OPSDK::pay()
  8. {
  9. //消耗性
  10. const char* propId = "com.fingerfun.coc.ios.diamond_1";
  11. const char* chargeCash = "99";
  12. const char* currencyType = "2";
  13. const char* propName = "Handful of Diamonds";
  14. const char* propCount = "1";
  15. const char* propDes = "Handful of Diamonds";
  16. const char* Gameurl = "http://pay.gamebean.net/OurPalm_Pay_Accept/ResponseDeliver?ssid=2013030715493703719999";
  17. Json::Value extendParams;
  18. extendParams["Params"] = "Params";//游戏自定义参数,选填,透传参数
  19. extendParams["serverID"] = "9999";//游戏服ID,必填
  20. extendParams["roleID"] = "1000000";//角色ID,必填
  21. extendParams["rolelv"] = "rolelv";//角色等级
  22. extendParams["roleviplv"] = "roleviplv";//角色VIP等级
  23. extendParams["roleName"] = "roleName";//角色名称
  24. extendParams["gameServerName"] = "gameServerName";//游戏服名称
  25. Json::Value purchaseInfo;
  26. purchaseInfo["package_id"] = "礼包ID";
  27. purchaseInfo["order_funnel_id "] = "研发生成的付费会话唯一id";
  28. purchaseInfo["dev_order_id "] = "研发订单号id";
  29. extendParams["purchaseInfo"] = purchaseInfo;//选填
  30. Json::FastWriter fast_writer;
  31. string jsonExtendParams = fast_writer.write(extendParams);
  32. Ourpalm_Pay(propId, chargeCash, currencyType, propName, propCount, propDes, Gameurl, jsonExtendParams.c_str());
  33. }

数据示例:

  1. {
  2. "channelOrderId": "2000000399537533",//第三方订单号
  3. "code": "200", //购买成功
  4. "desc": "",
  5. "pdid": "buy1", //商品id
  6. "ssId": "",
  7. "success": "1"
  8. }

4.3 恢复购买接口

  1. void Ourpalm_RestorePayments(const char* propId);

4.4 获取商品信息接口

功能说明:
游戏调用此接口后,可以返回AppStore商品id对应的商品信息(商品ID、商品价格、商品货币单位、商品title、商品描述),注意需要游戏传入AppStore后台配置的商品id。

  1. void Ourpalm_Channel_Spreads(const char* key, const char* jsonExtendParams);

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. Json::Reader json_reader;
  4. Json::Value json_object;
  5. if (!json_reader.parse(param, json_object)){
  6. return;
  7. }
  8. string idStr = json_object["id"].asString();
  9. if (strcmp(methodName, "Callback_Ourpalm_Channel_Spreads") == 0) {
  10. if (strcmp(idStr.c_str(), "SkuDetails") == 0) {
  11. }
  12. }
  13. }
  14. void OPSDK::getPropInfo
  15. {
  16. Json::Value propList;
  17. propList.append("dingyue3");
  18. propList.append("dingyue4");
  19. Json::FastWriter fast_writer;
  20. string jsonExtendParams = fast_writer.write(propList);
  21. Ourpalm_Channel_Spreads("SkuDetails",jsonExtendParams.c_str());
  22. }

数据示例

  1. {
  2. "code": "0",
  3. "desc": "",
  4. "id": "SkuDetails",
  5. "result": [{
  6. "description": "",
  7. "price": "¥1.00",
  8. "priceCurrencyCode": "CNY",
  9. "productId": "com.tmsk.dpcq3d.apps.dingyue3",
  10. "title": ""
  11. }, {
  12. "description": "",
  13. "price": "¥1.00",
  14. "priceCurrencyCode": "CNY",
  15. "productId": "com.tmsk.dpcq3d.apps.dingyue3",
  16. "title": ""
  17. }],
  18. "success": "1"
  19. }

5 礼包码功能

功能说明
兑换礼包码
接口定义

  1. void Ourpalm_GiftExchange(const char* giftCode, const char* deleverUrl, const char* extendParams);

参数说明

参数名称 重要性 类型 说明
giftCode 必填 const char * 礼包码
deleverUrl 必填 const char * 礼包码发货地址
extendParams 非必填 const char * 游戏自定义参数

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. Json::Reader json_reader;
  4. Json::Value json_object;
  5. if (!json_reader.parse(param, json_object)){
  6. return;
  7. }
  8. string tmp = json_object["success"].asString();
  9. int success = atoi(tmp.c_str());
  10. if (strcmp(methodName, "Callback_GiftExchange") == 0) {
  11. string packageId = json_object["packageId"].asString();//礼包码ID
  12. string extendParams = json_object["extendParams"].asString();//游戏透传参数
  13. }
  14. }
  15. void OPSDK:: ExchangeGameCode()
  16. {
  17. const char* gamecode = "";
  18. const char* deleverUrl = "http://wwww;
  19. const char* extendParams = "";
  20. Ourpalm_GiftExchange(gamecode,deleverUrl,extendParams);
  21. }

6 appstore促销码领取接口

功能说明
用于玩家在appstore兑换促销码后,领取相关道具时使用的接口,需要在角色登录后才可进行调用
参数说明
参数名称 重要性 类型 说明
deliverUrl 必填 string * 游戏发货地址

  1. void Ourpalm_GetPromotionCode(const char* deliverUrl);

7 客服功能

7.1 AIhelp客服

7.1.1 AIHelp H5版接口

  1. Ourpalm_EnterServiceQuestion();

7.1.2 AIHelp SDK版接口

7.1.2.1 添加SDK

7.1.2.2 设置参数


appId、domainName由AIHelp平台获取

7.1.2.3 帮助中心接口

参数说明:

参数名 类型 用途 注解
entranceId string 自定义入口 ID AIHelp 后台配置的自定义入口 ID
userTags string 用户标签 在具体为用户配置标签时,需要确保已经提前在 AIHelp 后台配置好了对应的标签内容
customData string 玩家信息 自定义用户数据
  1. void OPSDK::openFAQs()
  2. {
  3. Json::Value aiHelpjson;
  4. //AIHelp 后台配置的自定义入口 ID
  5. aiHelpjson["entranceId"] = "E001";
  6. //用户标签。在具体为用户配置标签时,需要确保已经提前在 AIHelp 后台配置好了对应的标签内容
  7. aiHelpjson["userTags"] = "vip,suggestion";
  8. //自定义用户数据
  9. Json::Value customData;
  10. customData["baseLevel"] = "123";
  11. customData["loadingProgress"] = "25";
  12. Json::FastWriter fast_writer;
  13. string customDataStr = fast_writer.write(customData);
  14. aiHelpjson["customData"] = customDataStr;
  15. string jsonStr = fast_writer.write(aiHelpjson);
  16. Ourpalm_Channel_Spreads("aihelp_openFAQs", jsonStr.c_str());
  17. }
7.1.2.4 智能客服接口

参数说明:

参数名 类型 用途 注解
entranceId string 自定义入口 ID AIHelp 后台配置的自定义入口 ID
userTags string 用户标签 在具体为用户配置标签时,需要确保已经提前在 AIHelp 后台配置好了对应的标签内容
customData string 玩家信息 自定义用户数据
  1. void OPSDK::openServiceDialog()
  2. {
  3. Json::Value aiHelpjson;
  4. //AIHelp 后台配置的自定义入口 ID
  5. aiHelpjson["entranceId"] = "CS01";
  6. //用户标签。在具体为用户配置标签时,需要确保已经提前在 AIHelp 后台配置好了对应的标签内容
  7. aiHelpjson["userTags"] = "vip";
  8. //自定义用户数据
  9. Json::Value customData;
  10. customData["baseLevel"] = "123";
  11. customData["loadingProgress"] = "25";
  12. Json::FastWriter fast_writer;
  13. string customDataStr = fast_writer.write(customData);
  14. aiHelpjson["customData"] = customDataStr;
  15. string jsonStr = fast_writer.write(aiHelpjson);
  16. Ourpalm_Channel_Spreads("aihelp_openServiceDialog", jsonStr.c_str());
  17. }

8 推送功能

功能说明
掌趣APNS推送所必须的接口添加,请在AppDelegate.mm中添加以下方法:

  1. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
  2. {
  3. Ourpalm_AppliactionDidRegisterForRemoteNotificationsWithDeviceToken(application, deviceToken);
  4. }
  5. - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
  6. {
  7. Ourpalm_AppliactionDidFailToRegisterForRemoteNotificationsWithError(application, error);
  8. }
  9. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
  10. {
  11. Ourpalm_AppliactionDidReceiveRemoteNotification(application, userInfo);
  12. }

9 删除账号

9.2 删除接口

接口定义:
销毁账号接口

  1. void Ourpalm_CloseAccountWithUserInfo();

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_CloseAccountWithUserInfo") == 0) {
  4. //删除账号回调
  5. }
  6. }
  7. void OPSDK::deleteAccount()
  8. {
  9. Ourpalm_CloseAccountWithUserInfo();
  10. }

10 设置语言接口

  1. // 俄语 ru_RU
  2. // 法语 fr_FR
  3. // 德语 de_DE
  4. // 西班牙 es_ES
  5. // 葡萄牙语 pt_BR
  6. // 意大利语 it_IT
  7. // 繁体 zh_HK
  8. // 泰语 th_TH
  9. // 印尼 in_ID
  10. // 韩语 ko_KR
  11. // 日语 ja_JP
  12. // 土耳其语 tr_TR
  13. // 简体中文 zh_CN
  14. // 英语-菲律宾 en_PH
  15. // 英语-新加坡 en_SG
  16. // 英国-英语 en_GB
  17. // 英语-其他国家 en_XX
  18. // 泰语 th_TH
  19. // 印尼语 in_ID
  20. // 简体中文-马来西亚 zh_MY
  21. // 越南-越南语 vi_VN
  22. Ourpalm_SetLanguage("zh_CN");

11 admob广告接口

11.1 设置广告参数

(1)Info.plist文件配置参数

  1. <key>GADApplicationIdentifier</key>
  2. <string>ca-app-pub-xxxx~xxxx</string>

(2)admob.plist文件配置广告ID

  1. <key>AdUnitID</key>
  2. <string>ca-app-pub-xxxx/xxxx</string>

(3)info.plist文件配置广告SKAdNetwork

  1. <key>SKAdNetworkItems</key>
  2. <array>
  3. <dict>
  4. <key>SKAdNetworkIdentifier</key>
  5. <string>cstr6suwn9.skadnetwork</string>
  6. </dict>
  7. <dict>
  8. <key>SKAdNetworkIdentifier</key>
  9. <string>4fzdc2evr5.skadnetwork</string>
  10. </dict>
  11. <dict>
  12. <key>SKAdNetworkIdentifier</key>
  13. <string>4pfyvq9l8r.skadnetwork </string>
  14. </dict>
  15. <dict>
  16. <key>SKAdNetworkIdentifier</key>
  17. <string>2fnua5tdw4.skadnetwork</string>
  18. </dict>
  19. <dict>
  20. <key>SKAdNetworkIdentifier</key>
  21. <string>ydx93a7ass.skadnetwork</string>
  22. </dict>
  23. <dict>
  24. <key>SKAdNetworkIdentifier</key>
  25. <string>5a6flpkh64.skadnetwork</string>
  26. </dict>
  27. <dict>
  28. <key>SKAdNetworkIdentifier</key>
  29. <string>p78axxw29g.skadnetwork</string>
  30. </dict>
  31. <dict>
  32. <key>SKAdNetworkIdentifier</key>
  33. <string>v72qych5uu.skadnetwork</string>
  34. </dict>
  35. <dict>
  36. <key>SKAdNetworkIdentifier</key>
  37. <string>ludvb6z3bs.skadnetwork</string>
  38. </dict>
  39. <dict>
  40. <key>SKAdNetworkIdentifier</key>
  41. <string>cp8zw746q7.skadnetwork</string>
  42. </dict>
  43. <dict>
  44. <key>SKAdNetworkIdentifier</key>
  45. <string>c6k4g5qg8m.skadnetwork</string>
  46. </dict>
  47. <dict>
  48. <key>SKAdNetworkIdentifier</key>
  49. <string>s39g8k73mm.skadnetwork</string>
  50. </dict>
  51. <dict>
  52. <key>SKAdNetworkIdentifier</key>
  53. <string>3qy4746246.skadnetwork</string>
  54. </dict>
  55. <dict>
  56. <key>SKAdNetworkIdentifier</key>
  57. <string>3sh42y64q3.skadnetwork</string>
  58. </dict>
  59. <dict>
  60. <key>SKAdNetworkIdentifier</key>
  61. <string>f38h382jlk.skadnetwork</string>
  62. </dict>
  63. <dict>
  64. <key>SKAdNetworkIdentifier</key>
  65. <string>hs6bdukanm.skadnetwork</string>
  66. </dict>
  67. <dict>
  68. <key>SKAdNetworkIdentifier</key>
  69. <string>prcb7njmu6.skadnetwork</string>
  70. </dict>
  71. <dict>
  72. <key>SKAdNetworkIdentifier</key>
  73. <string>v4nxqhlyqp.skadnetwork</string>
  74. </dict>
  75. <dict>
  76. <key>SKAdNetworkIdentifier</key>
  77. <string>wzmmz9fp6w.skadnetwork</string>
  78. </dict>
  79. <dict>
  80. <key>SKAdNetworkIdentifier</key>
  81. <string>yclnxrl5pm.skadnetwork</string>
  82. </dict>
  83. <dict>
  84. <key>SKAdNetworkIdentifier</key>
  85. <string>t38b2kh725.skadnetwork</string>
  86. </dict>
  87. <dict>
  88. <key>SKAdNetworkIdentifier</key>
  89. <string>7ug5zh24hu.skadnetwork</string>
  90. </dict>
  91. <dict>
  92. <key>SKAdNetworkIdentifier</key>
  93. <string>9rd848q2bz.skadnetwork</string>
  94. </dict>
  95. <dict>
  96. <key>SKAdNetworkIdentifier</key>
  97. <string>y5ghdn5j9k.skadnetwork</string>
  98. </dict>
  99. <dict>
  100. <key>SKAdNetworkIdentifier</key>
  101. <string>n6fk4nfna4.skadnetwork</string>
  102. </dict>
  103. <dict>
  104. <key>SKAdNetworkIdentifier</key>
  105. <string>v9wttpbfk9.skadnetwork</string>
  106. </dict>
  107. <dict>
  108. <key>SKAdNetworkIdentifier</key>
  109. <string>n38lu8286q.skadnetwork</string>
  110. </dict>
  111. <dict>
  112. <key>SKAdNetworkIdentifier</key>
  113. <string>47vhws6wlr.skadnetwork</string>
  114. </dict>
  115. <dict>
  116. <key>SKAdNetworkIdentifier</key>
  117. <string>kbd757ywx3.skadnetwork</string>
  118. </dict>
  119. <dict>
  120. <key>SKAdNetworkIdentifier</key>
  121. <string>9t245vhmpl.skadnetwork</string>
  122. </dict>
  123. <dict>
  124. <key>SKAdNetworkIdentifier</key>
  125. <string>a2p9lx4jpn.skadnetwork</string>
  126. </dict>
  127. <dict>
  128. <key>SKAdNetworkIdentifier</key>
  129. <string>22mmun2rn5.skadnetwork</string>
  130. </dict>
  131. <dict>
  132. <key>SKAdNetworkIdentifier</key>
  133. <string>4468km3ulz.skadnetwork</string>
  134. </dict>
  135. <dict>
  136. <key>SKAdNetworkIdentifier</key>
  137. <string>2u9pt9hc89.skadnetwork</string>
  138. </dict>
  139. <dict>
  140. <key>SKAdNetworkIdentifier</key>
  141. <string>8s468mfl3y.skadnetwork</string>
  142. </dict>
  143. <dict>
  144. <key>SKAdNetworkIdentifier</key>
  145. <string>av6w8kgt66.skadnetwork</string>
  146. </dict>
  147. <dict>
  148. <key>SKAdNetworkIdentifier</key>
  149. <string>klf5c3l5u5.skadnetwork</string>
  150. </dict>
  151. <dict>
  152. <key>SKAdNetworkIdentifier</key>
  153. <string>ppxm28t8ap.skadnetwork</string>
  154. </dict>
  155. <dict>
  156. <key>SKAdNetworkIdentifier</key>
  157. <string>424m5254lk.skadnetwork</string>
  158. </dict>
  159. <dict>
  160. <key>SKAdNetworkIdentifier</key>
  161. <string>ecpz2srf59.skadnetwork</string>
  162. </dict>
  163. <dict>
  164. <key>SKAdNetworkIdentifier</key>
  165. <string>uw77j35x4d.skadnetwork</string>
  166. </dict>
  167. <dict>
  168. <key>SKAdNetworkIdentifier</key>
  169. <string>mlmmfzh3r3.skadnetwork</string>
  170. </dict>
  171. <dict>
  172. <key>SKAdNetworkIdentifier</key>
  173. <string>578prtvx9j.skadnetwork</string>
  174. </dict>
  175. <dict>
  176. <key>SKAdNetworkIdentifier</key>
  177. <string>4dzt52r2t5.skadnetwork</string>
  178. </dict>
  179. <dict>
  180. <key>SKAdNetworkIdentifier</key>
  181. <string>gta9lk7p23.skadnetwork</string>
  182. </dict>
  183. <dict>
  184. <key>SKAdNetworkIdentifier</key>
  185. <string>e5fvkxwrpn.skadnetwork</string>
  186. </dict>
  187. <dict>
  188. <key>SKAdNetworkIdentifier</key>
  189. <string>8c4e2ghe7u.skadnetwork</string>
  190. </dict>
  191. <dict>
  192. <key>SKAdNetworkIdentifier</key>
  193. <string>zq492l623r.skadnetwork</string>
  194. </dict>
  195. <dict>
  196. <key>SKAdNetworkIdentifier</key>
  197. <string>3rd42ekr43.skadnetwork</string>
  198. </dict>
  199. <dict>
  200. <key>SKAdNetworkIdentifier</key>
  201. <string>3qcr597p9d.skadnetwork</string>
  202. </dict>
  203. </array>

11.2 广告回调

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName.c_str(), "Callback_AdmobRewardedAd") == 0) {
  4. string adState = json_object["adState"].asString();
  5. if (strcmp(adState, "PreparedFailed") == 0) {
  6. //广告准备失败
  7. }else if (strcmp(adState, "PreparedSuccess") == 0){
  8. //广告准备成功
  9. }if (strcmp(adState, "Show") == 0) {
  10. //广告开始展示
  11. }else if (strcmp(adState, "Clicked") == 0){
  12. //广告已被点击
  13. }else if (strcmp(adState, "Closed") == 0){
  14. //广告窗口已关闭
  15. }else if (strcmp(adState, "VideoAdCompleted") == 0){
  16. //广告结束播放
  17. }else if (strcmp(adState, "ShowFailed") == 0){
  18. //广告播放失败
  19. }
  20. }
  21. }

11.3 展示广告

  1. Ourpalm_Channel_Spreads("ShowAdmobRewardedAd");

12 统计和打点日志

12.1 游戏打点日志接口

此接口用于发送游戏自定义日志,以及广告统计打点日志

函数原型

  1. void Ourpalm_SendGameInfoLog(string logID, string logKey, string json);

函数原型

参数名 类型 用途 注解
logID string 日志id 由平台定义,游戏自定义为”1003”
logKey string 日志关键字 游戏自定义为”role-act”
json string 日志内容 json格式字符串。根据具体用途自定义包含哪些字段

注意事项

  1. - 这些参数值和结构,由平台定义,研发需按平台要求的结构传。
  2. - 注意1,确保启动游戏的时候正常调用了PCSDK初始化方法后,再调用发日志接口;启动游戏时调用的PCSDK初始化方法有别于安装时调用的方法,无须设置 disable_sdk_act_log 这个参数。
  3. - 注意2actId 为事件ID,只支持字母,数字,下划线命名,不支持中文。
  4. - 注意3actName 为事件名称,支持中文。
  5. - 注意4detail 为需要随本次发生事件一并记录的额外信息,可以是普通字符串,也可以是json字符串,不要包含竖线 | ,总长度不要超过 1000 个字符。

代码示例

  1. //发送游戏日志-->登陆场景加载成功
  2. Json::Value event_paras;
  3. event_paras["roleLevel"] = "0";
  4. event_paras["roleVipLevel"] = "0";
  5. event_paras["actId"] = "LoginSceneLoaded";
  6. event_paras["actName"] = "登陆场景加载成功";
  7. event_paras["detail"] = "begin";
  8. Json::FastWriter fast_writer;
  9. string json = fast_writer.write(event_paras);
  10. 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 自定义交互事件

12.2 广告打点日志接口

12.2.1 广告打点事件日志发送接口

此接口用于发送广告事件打点日志

函数原型

  1. void Ourpalm_SendAnalyticsInfoLog(const char* logKey, const char* json);

函数原型

参数名 类型 用途 注解
logKey const char* 日志关键字 由广告BI部门定义的广告事件key
json const char* 日志内容 json格式字符串。根据具体用途自定义包含哪些字段

注意事项

  1. - 这些参数值和结构,由广告BI部门定义,研发需按要求的结构传。

代码示例

更多广告打点相关示例请参阅:

  1. //注册日志(账号首次登陆该游戏,唯一不可重复)
  2. Json::Value event_paras;
  3. Json::FastWriter fast_writer;
  4. string json = fast_writer.write(event_paras);
  5. Ourpalm_SendAnalyticsInfoLog("registration", json.c_str());
  6. //特殊自定义日志-购买二次回传(如需使用,请提前联系平台对接人进行配置)
  7. //举例:充值0.99美元,需要事件参数
  8. Json::Value event_paras;
  9. event_paras["price"] = Json::Value("0.99");
  10. event_paras["currency"] = Json::Value("USD");
  11. event_paras["uni_roleId"] = Json::Value("test_uni_roleId");
  12. Json::FastWriter fast_writer;
  13. string json = fast_writer.write(event_paras);
  14. Ourpalm_SendAnalyticsInfoLog("customIAP", json.c_str());

12.2.2 appsflyer广告打点事件中添加自定义字段接入方法

接入说明:
appsflyer支持在打点事件中添加游戏自定义属性,游戏可以在自定义广告打点事件中添加如下四个定义好的自定义属性:
uni_accountId(账号ID)
uni_roleId(角色ID)

接口示例:

  1. Json::Value event_paras;
  2. event_paras["uni_accountId"] = Json::Value("test_uni_accountId");
  3. event_paras["uni_roleId"] = Json::Value("test_uni_roleId");
  4. Json::FastWriter fast_writer;
  5. string json = fast_writer.write(event_paras);
  6. Ourpalm_SendAnalyticsInfoLog("custom1", json);

使用说明:
1、上面四个字段名是固定的,不能改,游戏可以选择其中几个传入,不是每个字段都需要传入,如果研发同学要新加字段,
需要提前联系技术平台,平台添加完成后才能二次打包测试。
2、所有想添加自定义属性的打点事件都需要参照上面的方法单独传入自定义字段。

12.3 appsflyer接入

12.3.1 appsflyer-获取AFID

  1. 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文件中配置

  1. <key>NSAdvertisingAttributionReportEndpoint</key>
  2. <string>https://appsflyer-skadnetwork.com/</string>

12.3.3 生成appsflyer用户邀请链接

请注意:部分参数请与广告部门同事进行获取和确认(参数后有备注)
AF官方文档:点击跳转
接口范例:

  1. Json::Value event_paras;
  2. event_paras["inviteOneLink"] = "inviteOneLink";//广告同事提供
  3. event_paras["deep_link_value"] = "deep_link_value";//广告同事提供
  4. event_paras["deep_link_sub1"] = "deep_link_sub1";//广告同事提供
  5. event_paras["deep_link_sub2"] = "deep_link_sub2";//广告同事提供
  6. event_paras["af_sub1"] = "af_sub1";//广告同事提供
  7. event_paras["summer_sale"] = "summer_sale";//广告同事提供
  8. event_paras["mobile_share"] = "mobile_share";//广告同事提供
  9. Json::FastWriter fast_writer;
  10. string json = fast_writer.write(event_paras);
  11. Ourpalm_Channel_Spreads("appsflyer_Link_url", json.c_str());
  12. 注意事项:
  13. mapkey-value类型和参数名字 必须严格按照范例传入
  14. 回调范例:
  15. case "Callback_Ourpalm_Channel_Spreads":
  16. {
  17. if (id.equals("appsFlyer_LinkUrl")) {
  18. String url = callback.GetValue("result");
  19. }
  20. }

12.3.3 深度链接激活回调

  1. case "Callback_Ourpalm_Channel_Spreads":
  2. {
  3. if (id == "appsFlyer_onConversionDataSuccess")
  4. {
  5. //激活回调返回数据参考:{"install_time":"2023-05-09 03:01:10.454","af_status":"Organic","af_message":"organic install","is_first_launch":true}
  6. var result = callback.GetValue("result");
  7. }
  8. }
  1. case "Callback_Ourpalm_Channel_Spreads":
  2. {
  3. if (callback.GetValue("id") == "appsFlyer_onDeepLinking")
  4. {
  5. //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}
  6. var result = callback.GetValue("result");
  7. }
  8. }

12.4 数数SDK

因为数数SDK比较独立,没有对其接口进行封装的必要,游戏可以自行接入。

参考链接:数数SDK

注意,具体需要使用的数数sdk版本,以平台BI的要求为准

12.5 打点所需的信息获取接口

12.5.1 接口说明

使用自定义接口Ourpalm_Channel_Spreads获取这些信息,列表如下:

id 含义
getAppsFlyerID appsflyer_id
getAppInstanceId firebase的appInstanceId
getBaseDeviceInfo 基础设备信息集合(BaseDeviceInfo)

代码示例

  1. char* appsFlyerID = Ourpalm_Channel_Spreads("getAppsFlyerID");
  2. string appsFlyerIDString = appsFlyerID;
  3. Ourpalm_NativeFree(appsFlyerID);//注意释放内存,防止内存泄漏
  4. cout<<"appsFlyerID="<<appsFlyerIDString<<endl;
  5. char* appInstanceId = Ourpalm_Channel_Spreads("getAppInstanceId");
  6. string appInstanceIdString = appInstanceId;
  7. Ourpalm_NativeFree(appInstanceId);//注意释放内存,防止内存泄漏
  8. cout<<"appInstanceId="<<appInstanceIdString<<endl;
  9. char* baseDeviceInfo = Ourpalm_Channel_Spreads("getBaseDeviceInfo");
  10. string baseDeviceInfoString = baseDeviceInfo;
  11. Ourpalm_NativeFree(baseDeviceInfo);//注意释放内存,防止内存泄漏
  12. cout<<"baseDeviceInfo="<<baseDeviceInfoString<<endl;
  13. char* baseAppInfo = Ourpalm_Channel_Spreads("getBaseAppInfo");
  14. string baseAppInfoString = baseAppInfo;
  15. Ourpalm_NativeFree(baseAppInfo);//注意释放内存,防止内存泄漏
  16. cout<<"baseAppInfo="<<baseAppInfoString<<endl;

12.5.2 基础设备信息(BaseDeviceInfo)

包含信息如下表所列:

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

13 网络检测接口

  1. void Ourpalm_NetworkDiagnosis(const char* checkTargetArray, const char* extParams, const char* isDisplay);

参数1:checkTargetArray 参数为检测目标的地址的数组

  1. [
  2. {"http_url":"待检测的url","host":"host地址","http":"1"},
  3. {"host":"ip地址","tcp_port":端口号,"tcp_ping":"1"}
  4. ]

参数2:extParams 参数为检测信息中可附带的额外信息,没有的值可为空(“”)

  1. {"reason":"serverlist","serverId":"10001","userId":"0000011101"}

参数3:isDisplay :游戏调用时传 “0”, 游戏是无感上传

14 分享接口

14.1 Facebook分享

14.1.1 分享链接

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_FacebookShareLink") == 0) {
  4. }
  5. }
  6. void OPSDK::shareLink()
  7. {
  8. Json::Value shareJson;
  9. shareJson["shareType"] = "shareFacebookLink";
  10. shareJson["link"] = "http://98kof.game-bean.com";
  11. Json::FastWriter fast_writer;
  12. string shareStr = fast_writer.write(shareJson);
  13. Ourpalm_Share(shareStr.c_str());
  14. }

14.1.2 分享图片

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_FacebookShareImage") == 0) {
  4. }
  5. }
  6. void OPSDK::shareLink()
  7. {
  8. Json::Value shareJson;
  9. shareJson["shareType"] = "shareFacebookImage";
  10. //网络图片
  11. // shareJson["picture"] = Json::Value("http://content.game-bean.com/image/98kof/pc/pc_banner01.jpg");
  12. //本地图片
  13. NSString *filePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"localPic.png"];
  14. shareJson["imageUrl"] = [filePath UTF8String];
  15. Json::FastWriter fast_writer;
  16. string shareStr = fast_writer.write(shareJson);
  17. Ourpalm_Share(shareStr.c_str());
  18. }

14.1.3 邀请好友

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_FacebookShareInvite") == 0) {
  4. }
  5. }
  6. void OPSDK::inviteFriend()
  7. {
  8. Json::Value shareJson;
  9. shareJson["shareType"] = "shareFacebookInvite";
  10. shareJson["title"] = Json::Value("title"); //标题
  11. shareJson["message"] = Json::Value("message"); //消息
  12. Json::FastWriter fast_writer;
  13. string shareStr = fast_writer.write(shareJson);
  14. Ourpalm_Share(shareStr.c_str());
  15. }

14.2 Twitter分享

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_TwitterShare") == 0) {
  4. }
  5. }
  6. void OPSDK::twitterShare()
  7. {
  8. //分享
  9. Json::Value shareJson;
  10. shareJson["shareType"] = "shareTwitter";
  11. shareJson["link"] = "http://www.google.com";
  12. shareJson["imageUrl"] = "http://cmscdn.gamebean.com/original/CMSsave/film/0/preview/100_1.jpg?tmp=1560906675000";
  13. shareJson["description"] = "xxxtwitter分享测试!xxxxx";
  14. Json::FastWriter fast_writer;
  15. string shareStr = fast_writer.write(shareJson);
  16. Ourpalm_Share(shareStr.c_str());
  17. }

14.3 OpenInstall分享

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_ShareOpenInstall") == 0) {
  4. }
  5. }
  6. void OPSDK::shareOpenInstall()
  7. {
  8. Json::Value shareJson;
  9. shareJson["shareType"] = "shareOpenInstall";
  10. shareJson["text"] = Json::Value("分享文本");
  11. shareJson["sharekey"] = Json::Value("abcdef");
  12. Json::FastWriter fast_writer;
  13. string shareStr = fast_writer.write(shareJson);
  14. Ourpalm_Share(shareStr.c_str());
  15. }

15 其他功能接口

15.1 ServiceCode接入流程

功能说明
获取ServiceCode用于服务端日志统计
1.将OPGameKit.framework添加至工程中
2.在调用SDK初始化接口后调用以下方法即可,详情可参见demo
接口示例

  1. const char* gameResVersion = "1.0"; //游戏资源版本号
  2. OPGameKit::GetInstance().GetServiceCode(gameResVersion);

15.2 设置工具栏接口

功能说明
设置工具栏的显示状态和位置

接口示例

  1. Ourpalm_Channel_Spreads("ShowToolBar");
  2. Ourpalm_Channel_Spreads("HideToolBar");

15.3 进入平台中心接口

功能说明
进入平台中心的首页界面

15.3.1 绑定回调接口说明

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对应参数值,范例如下:

  1. facebook范例:
  2. {"token_for_business":"AbwRsy594dBTNzKJ","name":"指针","picture":{"data":{"height":600,"is_silhouette":false,
  3. "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"}
  4. twitter 范例:
  5. {"userId":"1438080497515515908","name":"leecm","screen_name":"leecm_test"}
  6. vk 范例:没有返回用户名字,注意判断
  7. {"accessToken":"..."}
  8. email 范例:
  9. {"name":"liguangcai@ourpalm.com"}
  10. account 范例:
  11. {"name":"luginsssass"}

15.3.2 解绑回调接口说明

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”

15.3.3 接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_Ourpalm_AccountBind") == 0) {
  4. //绑定回调
  5. }else if (strcmp(methodName, "Callback_Ourpalm_AccountUnBind") == 0) {
  6. //解绑回调
  7. }
  8. }
  9. Ourpalm_GoCenter();

15.4 显示暂停页面接口

功能说明
在游戏暂停或者从后台恢复的时候显示暂停页

接口示例

  1. -(void)applicationWillEnterForeground:(UIApplication*)application
  2. {
  3. Ourpalm_ApplicationWillEnterForeground();
  4. }

15.5 打开指定页面接口

功能说明
打开指定页面接口(可用于论坛、社区、活动)

接口示例

  1. Ourpalm_Channel_Spreads("ShowWebview",(void*)"http://bbs.0708.com");

15.6 应用内评分接口

功能说明
用户在应用内为app评分,无需跳转appstore

接口示例

  1. Ourpalm_Channel_Spreads("showAppReview");

15.7 隐私协议接口

功能说明
如果玩家当前ip是欧盟或美国,SDK会自动弹出隐私协议弹窗。

隐私弹窗点击“不同意”、“同意”、隐私协议更新或不需要展示隐私协议时,游戏都会收到此回调。
同时,游戏必须等待协议回调通知,然后才能调用登录和打点等其它SDK功能

可选值 意义 说明
0 点击隐私弹窗同意按钮 显示弹窗并且用户点击了同意协议
1 不用展示隐私弹窗 不需要展示协议、或者用户已经同意过协议
2 点击隐私弹窗拒绝按钮 显示弹窗并且用户点击了不同意协议
3 隐私协议更新,并点击隐私弹窗同意按钮 隐私协议内容有变化,并且用户又同意了新版本的协议
4 该产品没有配置隐私协议功能

说明:
如果回调通知为2(用户拒绝),游戏需要主动退出进程
如果回调结果为其他值,游戏可以继续执行登录和打点
(注意:游戏可能在进入游戏后再次收到此回调(例如隐私协议更新时),注意处理此情况)

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "ShowPrivacyProtocol") == 0) {
  4. //隐私协议回调
  5. int code = json_object["code"].asInt();
  6. string msg;
  7. switch (code) {
  8. case 0:
  9. msg = "点击隐私弹窗同意按钮(0)";
  10. break;
  11. case 1:
  12. msg = "不需要展示协议、或者用户已经同意过协议(1)";
  13. break;
  14. case 2:
  15. msg = "显示弹窗并且用户点击了不同意协议(2)";
  16. break;
  17. case 3:
  18. msg = "隐私协议内容有变化,并且用户又同意了新版本的协议(3)";
  19. break;
  20. case 4:
  21. msg = "该产品没有配置隐私协议功能(4)";
  22. break;
  23. default:
  24. break;
  25. }
  26. }
  27. }

15.8 绑定邮箱接口

15.8.1 绑定邮箱

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_ShowBindEmail") == 0) {
  4. }
  5. }
  6. void OPSDK::ShowBindEmail()
  7. {
  8. Ourpalm_Channel_Spreads("ShowBindEmail");
  9. }

数据示例:

  1. {
  2. "code": "0",
  3. "data": {
  4. "curBindingPlatform": "email",
  5. "emailAccount": "xxxxxx@126.com"
  6. },
  7. "id": "Callback_CheckBindEmail",
  8. "success": "1"
  9. }

15.8.2 检测是否绑定邮箱

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_CheckBindEmail") == 0) {
  4. }
  5. }
  6. void OPSDK::CheckBindEmail()
  7. {
  8. Ourpalm_Channel_Spreads("CheckBindEmail");
  9. }

数据示例:

  1. {
  2. "code": "0",
  3. "data": {
  4. "curBindingPlatform": "email",
  5. "emailAccount": "xxxxxx@126.com" //如果emailAccount为空字符串代表未绑定邮箱
  6. },
  7. "id": "Callback_CheckBindEmail",
  8. "success": "1"
  9. }

16 API接口

16.1 官网账号相关接口

16.1.1 绑定接口

功能说明
游客账号绑定账号密码

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_bindOurpalmAccount") == 0) {
  4. }
  5. }
  6. void OPSDK::bindOurpalmAccount(const char* userName,const char* userPwd,const char* confirmPwd)
  7. {
  8. Json::Value json;
  9. json["accountName"] = userName;
  10. json["pwd"] = userPwd;
  11. json["confirmPwd"] = confirmPwd;
  12. Json::FastWriter fast_writer;
  13. string jsonStr = fast_writer.write(json);
  14. Ourpalm_Channel_Spreads(API_bindOurpalmAccount,jsonStr.c_str());
  15. }

16.1.2 修改密码接口

功能说明
修改官网账号密码

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_modifyAccountPwd") == 0) {
  4. }
  5. }
  6. void OPSDK::modifyAccountPwd(const char* userName,const char* oldPwd,const char* newPwd)
  7. {
  8. Json::Value json;
  9. json["accountName"] = userName;
  10. json["oldPwd"] = oldPwd;
  11. json["newPwd"] = newPwd;
  12. Json::FastWriter fast_writer;
  13. string jsonStr = fast_writer.write(json);
  14. Ourpalm_Channel_Spreads(API_modifyAccountPwd,jsonStr.c_str());
  15. }

16.1.3 重置密码接口

功能说明
当用户忘记密码时,已绑定邮箱的官网账号,可以通过此接口重置密码

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_resetAccountPwd") == 0) {
  4. }
  5. }
  6. void OPSDK::resetAccountPwd(const char* email,const char* code)
  7. {
  8. Json::Value json;
  9. json["emailName"] = email;
  10. json["code"] = code;//邮箱验证码:可通过16.2.1 获取邮箱验证码
  11. Json::FastWriter fast_writer;
  12. string jsonStr = fast_writer.write(json);
  13. Ourpalm_Channel_Spreads(API_resetAccountPwd,jsonStr.c_str());
  14. }

16.1.4 切换接口

功能说明
使用官网账号进行切换

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_SwitchingAccount") == 0) {
  4. }
  5. }
  6. void OPSDK::switchOurpalmAccount(const char* userName,const char* pwd)
  7. {
  8. Json::Value json;
  9. json["accountName"] = userName;
  10. json["pwd"] = pwd;
  11. Json::FastWriter fast_writer;
  12. string jsonStr = fast_writer.write(json);
  13. Ourpalm_Channel_Spreads(API_switchOurpalmAccount,jsonStr.c_str());
  14. }

16.2 邮箱相关接口

16.2.1 获取邮箱验证码接口

功能说明
发送邮箱验证码

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_sendEmailCode") == 0) {
  4. }
  5. }
  6. void OPSDK::sendEmailCode(const char* email,const char* usage)
  7. {
  8. Json::Value json;
  9. json["email"] = email;
  10. json["usage"] = usage;//参看usage参数说明
  11. Json::FastWriter fast_writer;
  12. string jsonStr = fast_writer.write(json);
  13. Ourpalm_Channel_Spreads(API_sendEmailCode,jsonStr.c_str());
  14. }

usage 参数说明

usage 含义
bind 在绑定邮箱时获取邮箱验证码
unbind 在解绑邮箱时获取邮箱验证码
resetAccountPwd 在重置账号密码时获取邮箱验证码
resetEmailPwd 在重置邮箱密码时获取邮箱验证码

16.2.2 绑定接口

功能说明
用户绑定邮箱账号

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_bindEmailAccount") == 0) {
  4. }
  5. }
  6. void OPSDK::bindEmailAccount(const char* emailName,const char* pwd,const char* code)
  7. {
  8. Json::Value json;
  9. json["emailName"] = emailName;
  10. json["pwd"] = pwd;
  11. json["code"] = code;//邮箱验证码:可通过16.2.1 获取邮箱验证码
  12. Json::FastWriter fast_writer;
  13. string jsonStr = fast_writer.write(json);
  14. Ourpalm_Channel_Spreads(API_bindEmailAccount,jsonStr.c_str());
  15. }

16.2.3 解绑接口

功能说明
用户解绑邮箱

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_unBindEmailAccount") == 0) {
  4. }
  5. }
  6. void OPSDK::unBindEmailAccount(const char* emailName,const char* code)
  7. {
  8. Json::Value json;
  9. json["emailName"] = emailName;
  10. json["code"] = code;//邮箱验证码:可通过16.2.1 获取邮箱验证码
  11. Json::FastWriter fast_writer;
  12. string jsonStr = fast_writer.write(json);
  13. Ourpalm_Channel_Spreads(API_unBindEmailAccount,jsonStr.c_str());
  14. }

16.2.4 修改邮箱密码接口

功能说明
修改邮箱密码

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_modifyEmailPwd") == 0) {
  4. }
  5. }
  6. void OPSDK::modifyEmailPwd(const char* email,const char* oldPwd,const char* newPwd)
  7. {
  8. Json::Value json;
  9. json["emailName"] = email;
  10. json["oldPwd"] = oldPwd;
  11. json["newPwd"] = newPwd;
  12. Json::FastWriter fast_writer;
  13. string jsonStr = fast_writer.write(json);
  14. Ourpalm_Channel_Spreads(API_modifyEmailPwd,jsonStr.c_str());
  15. }

16.2.5 重置邮箱密码接口

功能说明
用户忘记邮箱账号密码时,可通过此接口重置邮箱密码

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_resetEmailPwd") == 0) {
  4. }
  5. }
  6. void OPSDK::resetEmailPwd(const char* email,const char* code)
  7. {
  8. Json::Value json;
  9. json["emailName"] = email;
  10. json["code"] = code;
  11. Json::FastWriter fast_writer;
  12. string jsonStr = fast_writer.write(json);
  13. Ourpalm_Channel_Spreads(API_resetEmailPwd,jsonStr.c_str());
  14. }

16.2.6 切换接口

功能说明
使用邮箱账号进行切换

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_SwitchingAccount") == 0) {
  4. }
  5. }
  6. void OPSDK::switchEmailAccount(const char* emailName,const char* pwd)
  7. {
  8. Json::Value json;
  9. json["emailName"] = emailName;
  10. json["pwd"] = pwd;
  11. Json::FastWriter fast_writer;
  12. string jsonStr = fast_writer.write(json);
  13. Ourpalm_Channel_Spreads(API_switchEmailAccount,jsonStr.c_str());
  14. }

16.3 第三方账号相关接口

16.3.1 绑定接口

功能说明
绑定第三方账号,facebook, apple, vk, twitter, gamecenter

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_bindThirdAccount") == 0) {
  4. }
  5. }
  6. void OPSDK::bindThirdAccount(const char* accountType)
  7. {
  8. //accountType: facebook, apple, vk, twitter, gamecenter
  9. Json::Value json;
  10. json["accountType"] = accountType;
  11. Json::FastWriter fast_writer;
  12. string jsonStr = fast_writer.write(json);
  13. Ourpalm_Channel_Spreads(API_bindThirdAccount,jsonStr.c_str());
  14. }

16.3.2 解绑接口

功能说明
解绑绑定第三方账号,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”

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_unBindThirdAccount") == 0) {
  4. }
  5. }
  6. void OPSDK::unBindThirdAccount(const char* accountType)
  7. {
  8. //accountType: facebook, apple, vk, twitter, gamecenter
  9. Json::Value json;
  10. json["accountType"] = accountType;
  11. Json::FastWriter fast_writer;
  12. string jsonStr = fast_writer.write(json);
  13. Ourpalm_Channel_Spreads(API_unBindThirdAccount,jsonStr.c_str());
  14. }

16.3.3 切换接口

功能说明
切换第三方账号,facebook, apple, vk, twitter, gamecenter

接口示例

  1. void Ourpalm_GameEntryCallback(const char* methodName,const char* param)
  2. {
  3. if (strcmp(methodName, "Callback_SwitchingAccount") == 0) {
  4. }
  5. }
  6. void OPSDK::switchThirdAccount(const char* accountType)
  7. {
  8. //accountType: facebook, apple, vk, twitter, gamecenter
  9. Json::Value json;
  10. json["accountType"] = accountType;
  11. Json::FastWriter fast_writer;
  12. string jsonStr = fast_writer.write(json);
  13. Ourpalm_Channel_Spreads(API_switchThirdAccount,jsonStr.c_str());
  14. }

17 附录

17.1 客户端错误码

状态码 说明
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 下单成功

17.2 用户中心错误码

跳转查询

17.3 计费中心错误码

跳转查询

17.4 货币类型及对应ID

货币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 哥伦比亚比索