小游戏 UnitySDK接入文档

1 接入指南

1.1 获取配置文件

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

1.2 添加掌趣SDK

将掌趣SDK添加到Assets目录下,如下图:

掌趣SDK主要由以下几部分构成
[1] Assets/OurpalmSDK 掌趣封装DLL库
[2] Assets/Resources 掌趣后台获取的掌趣配置文件

2 初始化

2.1 更新接口

功能说明
执行sdk的相关业务功能

接口示例

  1. void Update()
  2. {
  3. OPGameSDK.Update(this, System.DateTime.Now);
  4. }

2.2 初始化接口

功能说明
初始化第三方SDK,同时获取SDK所需要的初始化数据

接口定义

  1. void Ourpalm_Init(string jsonParams);

参数说明

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

接口示例

  1. //初始化回调函数
  2. private static void Ourpalm_GameEntryCallback(string methodName, string param)
  3. {
  4. if (methodName.Equals("Callback_Ourpalm_Init"))
  5. {
  6. //初始化回调
  7. }
  8. }
  1. OPGameSDK.SetGameEngineMessageListener(Ourpalm_GameEntryCallback);
  2. Ourpalm_WebGL.Ourpalm_SetLogs(1);
  3. Hashtable initParams = new Hashtable();
  4. initParams["gameVer"] = "1.0"; // 必传
  5. initParams["gameResVer"] = "1.0"; // 必传
  6. OPGameSDK.Ourpalm_Init(MiniJSON.jsonEncode(initParams), channel);

2.3 获取渠道信息接口

功能说明
获取当前SDK渠道信息。
(1)获取产品ID
功能说明
获取当前游戏包中的产品ID,对应dev后台的产品ID,例如:20000078 。

  1. OPGameSDK.Ourpalm_GetProductId()

(2)获取联运方ID
功能说明
获取当前游戏包中的联运方ID,对应dev后台渠道ID,例如:微信小游戏渠道:31144100000。

  1. OPGameSDK.Ourpalm_GetJointOperationId()

(3)获取主渠道ID
功能说明
获取当前游戏包中的主渠道ID,对应dev后台主渠道ID,例如:微信小游戏主渠道:31144100 。

  1. OPGameSDK.Ourpalm_GetMainChannelId()

(4)获取子渠道ID
功能说明
获取当前游戏包中的子渠道ID,对应dev后台子渠道ID,例如:微信小游戏子渠道:31144100。

  1. OPGameSDK.Ourpalm_GetSubChannelId()

(5)获取平台ID
功能说明
获取当前游戏包中的平台id,0:android 1:ios 2:pc 6:h5 8:鸿蒙。

  1. OPGameSDK.Ourpalm_GetPlatformId()

(6)获取业务ID
功能说明
获取当前游戏包中的ServiceId

  1. OPGameSDK.Ourpalm_GetServiceId();

(7)获取渠道ID
功能说明
获取当前游戏包内打入的推广渠道ID

  1. OPGameSDK.Ourpalm_GetChannelId();

(8)获取渠道名称
功能说明
获取当前游戏包中的推广渠道名称

  1. OPGameSDK.Ourpalm_GetChannelName();

(9)获取机型组ID
功能说明
获取当前游戏包内打入的机型组ID

  1. OPGameSDK.Ourpalm_GetDeviceGroupId();

(10)获取语言ID
功能说明
获取当前游戏包内打入的语言ID

  1. OPGameSDK.Ourpalm_GetLocaleId();

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(string methodName,string 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,string jsonParams);

接口定义

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

接口示例

  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. OPGameSDK.Ourpalm_SetGameInfo(1, jsonParams);
  12. //角色登录
  13. OPGameSDK.Ourpalm_SetGameInfo(2, jsonParams);

4 支付功能

4.1 支付流程


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

4.2 支付接口

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

接口定义

  1. void Ourpalm_Pay(string propId, string chargeCash, string currencyType, string propName,string propCount, string propDes, string Gameurl, string jsonExtendParams);

参数说明

参数名称 重要性 类型 说明
propId 必须 string 游戏自定义的道具ID 必传。
chargeCash 必须 string 道具价格,单位为分。
currencyType 必须 string 货币类型(1人民币2美元3日元4港币5英镑6新加坡币7越南盾8台币9韩元)
propName 必须 string 道具名称
propCount 必须 string 道具数量
propDes 必须 string 道具描述
Gameurl 必须 string 游戏发放道具服务器地址,用户支付成功后掌趣计费中心会回调此地址告知游戏进行道具发放。
jsonExtendParams.userId 必须 string 掌趣SDK登录成功后返回的userId
jsonExtendParams.roleId 必须 string 玩家角色id
jsonExtendParams.rolelv 必须 string 角色等级,请传数字,如游戏中无角色等级可以传null
jsonExtendParams.serverId 必须 string 玩家登录的游戏服id
jsonExtendParams.gameServerName 必须 string 玩家登录的游戏服务器名
jsonExtendParams.roleviplv 必须 string 角色VIP等级,请传数字,如游戏中无角色VIP等级可以传null
jsonExtendParams.Params 可选 string 游戏自定义数据,支付成功后,计费中心会将此字段数据回传给游戏服务器。
jsonExtendParams.purchaseinfo 必须 string 买量BI要求的自定义数据,json字符串,需要携礼包ID、研发生成的付费会话唯一ID、研发订单ID等,{\”order_funnel_id\”:\”95b49366-acb8-41a1-ba94-5577bd362074\”,\”package_id\”:\”200279\”,\”dev_order_id\”:\”36291\”}

接口示例

  1. void Ourpalm_GameEntryCallback(string methodName,string param)
  2. {
  3. if (strcmp(methodName, "Callback_Ourpalm_Pay") == 0) {
  4. //支付回调
  5. }
  6. }
  7. void OPSDK::pay()
  8. {
  9. //消耗性
  10. string propId = "com.fingerfun.coc.ios.diamond_1";
  11. string chargeCash = "99";
  12. string currencyType = "2";
  13. string propName = "Handful of Diamonds";
  14. string propCount = "1";
  15. string propDes = "Handful of Diamonds";
  16. string Gameurl = "http://pay.gamebean.net/OurPalm_Pay_Accept/ResponseDeliver?ssid=2013030715493703719999";
  17. Hashtable extendParams = new Hashtable();
  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. Hashtable purchaseInfo = new Hashtable();
  26. purchaseInfo["package_id"] = "礼包ID";
  27. purchaseInfo["order_funnel_id "] = "研发生成的付费会话唯一id";
  28. purchaseInfo["dev_order_id "] = "研发订单号id";
  29. extendParams["purchaseInfo"] = purchaseInfo;//选填
  30. string jsonExtendParams= ToolsUtils.MiniJSON.jsonEncode(extendParams);
  31. Ourpalm_Pay(propId, chargeCash, currencyType, propName, propCount, propDes, Gameurl, jsonExtendParams);
  32. }

数据示例:

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

5 统计和打点日志

5.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. Hashtable event_paras = new Hashtable();
  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. string json= ToolsUtils.MiniJSON.jsonEncode(event_paras);
  9. OPGameSDK.Ourpalm_SendGameInfoLog("1003", "role-act", json);

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 自定义交互事件

6 渠道接口

6.1 dana渠道接入

6.1.1 集成jssdk

(1)将WebGLAgent.jslib添加到Asstes/Plugins文件夹下
(2)html中添加渠道sdk

  1. <script src="https://sdk.mgant.com/dist/load/loader.js"></script>
  2. <script src="../libOPDanaSDK.js" type="text/javascript" charset="utf-8"></script>

(3)html中添加代码

  1. var gameUnityInstance=undefined;
  2. function getGameUnityInstance()
  3. {
  4. return gameUnityInstance;
  5. }

示例:

  1. var gameUnityInstance=undefined;
  2. function getGameUnityInstance()
  3. {
  4. return gameUnityInstance;
  5. }
  6. var script = document.createElement("script");
  7. script.src = loaderUrl;
  8. script.onload = () => {
  9. createUnityInstance(canvas, config, (progress) => {
  10. progressBarFull.style.width = 100 * progress + "%";
  11. }).then((unityInstance) => {
  12. gameUnityInstance = unityInstance; //注意这里
  13. loadingBar.style.display = "none";
  14. fullscreenButton.onclick = () => {
  15. unityInstance.SetFullscreen(1);
  16. };
  17. }).catch((message) => {
  18. alert(message);
  19. });
  20. };

6.1.2 视频广告

  1. private static void Ourpalm_GameEntryCallback(string methodName, string param)
  2. {
  3. if (methodName.Equals("Callback_Mgant_showRewardAd"))
  4. {
  5. //视频广告回调
  6. }
  7. }
  8. public void ShowRewardAd()
  9. {
  10. Hashtable configTb = new Hashtable();
  11. configTb["scene"] = "revive";//场景标识:'unlock' / 'revive' / 'double_reward'
  12. string configJson = ToolsUtils.MiniJSON.jsonEncode(configTb);
  13. OPGameSDK.Ourpalm_Channel_Spreads("Mgant_showRewardAd", configJson);
  14. }

回调数据说明:

字段 类型 描述
rewarded bool 是否发放成功
id string 奖励记录 ID
scene string 场景标识(回传请求里的 scene)
todayCount int 今日已观看次数
dailyLimit int 每日上限:-1 不限,正数为具体上限

6.1.3 插屏广告

  1. private static void Ourpalm_GameEntryCallback(string methodName, string param)
  2. {
  3. if (methodName.Equals("Callback_Mgant_showInterstitialAd"))
  4. {
  5. //插屏广告回调
  6. }
  7. }
  8. public void ShowInterstitialAd()
  9. {
  10. Hashtable configTb = new Hashtable();
  11. configTb["scene"] = "level_start";
  12. string configJson = ToolsUtils.MiniJSON.jsonEncode(configTb);
  13. OPGameSDK.Ourpalm_Channel_Spreads("Mgant_showInterstitialAdd");
  14. }

回调数据说明:

字段 类型 描述
enabled bool 广告功能开关(CP 后台「应用信息」配置)
todayCount int 用户当日已看广告次数
dailyLimit int 每日上限:-1 不限,正数为具体上限
cooldownMinutes int 冷却剩余分钟数:-1 不限,正数为具体分钟数
canWatch bool 综合判断 = enabled && (dailyLimit<0 || todayCount

7 其他功能接口

8 附录

8.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 下单成功

8.2 用户中心错误码

跳转查询

8.3 计费中心错误码

跳转查询

8.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 哥伦比亚比索