{{ errorTipText }}
此文档主要是用于在游戏及应用开发商需要接入掌趣SDK时,各个用户和计费相关的接口参考说明。
用于在游戏及应用开发商需要接入掌趣BASE SDK时,了解BASE SDK如何接入,接入过程中需注意的事项等。
此UnitySDK封装了多种设备平台的SDK,包括安卓、IOS、Windows等的SDK。并提供了统一的接口
支持的Unity版本:2020.3及以上。
如项目使用2019及以下Unity版本,需要调整部分原生sdk的接入代码和配置。
接入掌趣的Unity引擎开发的游戏及应用的客户端开发者。
其它类型的项目也可作为参考。
本文档主要阐述如何进行客户端sdk接入。登录的验证、充值的发货、礼包码的发货等,还需要按服务器接入文档的要求接入,处理平台的通知请求。
服务端接入:请参考 通用接入文档—> 《SDK服务端接入说明文档》
Unity集成SDK插件下载地址: Unity SDK下载
插件内包含了一些示例代码和demo场景。可以先新建一个Unity 3d项目,将Unity集成SDK插件导入,先了解一下工程结构,运行一下demo。确认无误后,仅将需要的部分复制到项目中。sdk文件结构详见4.1导入opsdk.package。
游戏(应用)的应当有一个应用版本号和一个资源版本号,需要按要求设置。版本号会在sdk打点日志中记录。
需要在调用OurpalmSDKAgent.Ourpalm_Prepare函数时,用initParams参数传入资源版本号和应用版本号。
另外,安卓 sdk默认会读取androidmainfest.xml中的versionName,作为应用版本号;
IOS sdk默认会读取plist中的app版本号,作为应用版本号。
在掌趣自动打包系统里,serviceId是区分渠道信息的标识,研发如果要识别当前游戏包属于哪个渠道,请调用获取serviceId的接口,并和技术经理匹配各serviceId对应的渠道。
如果产品接入了第三方SDK,有需要根据包名、签名分配参数的情况,一定要提前通知技术经理。各个渠道包的包名、签名、证书等都不一样。自动打包将替换客户端包名、签名和证书。但不会自动替换第三方的参数。
如地图、语音、推送能功能的第三方SDK。具体如何实现,需要根据具体情况操作。
可以将使用到包名的地方配置为:ourpalm_package_name 。打包时掌趣打包工具会将ourpalm_package_name替换为包名。
游戏需要调用GetEnableInterface这个接口,根据返回值来确认游戏是否需要启用这三个接口和相应的UI按钮展示。因为根据渠道不同会用到其中之一或者所有都不用。返回值详见GetEnableInterface接口说明。
//所需代码已实现在文件"Assets\Plugins\Android\MainActivity.java"中,如项目需要调整这些代码,Ourpalm_GameEntry.Ourpalm_onPause()Ourpalm_GameEntry.Ourpalm_onRestart()Ourpalm_GameEntry.Ourpalm_onResume()Ourpalm_GameEntry.Ourpalm_onStart()Ourpalm_GameEntry.Ourpalm_onStop()Ourpalm_GameEntry.Ourpalm_onDestroy()Ourpalm_GameEntry.Ourpalm_onActivityResult()Ourpalm_GameEntry.Ourpalm_onConfigurationChanged()Ourpalm_GameEntry.Ourpalm_onNewIntent()Ourpalm_GameEntry.Ourpalm_onRequestPermissionsResult()......
UnitySDK已通过”Assets\OurpalmSDK\iOSPack\Editor”中的编辑器PostBuild代码自动添加
支付接口中的参数注意:
propName:商品名称(也可以理解为商品单位)。
propCount:商品数量。
注意:对该接口中的商品名称和商品数量2个参数具体说明。
如游戏中所卖商品在游戏界面显示为“100元宝或100金币”,当调用支付接口时,商品名称务必传“元宝或金币”,商品数量务必传“100”。切记不可商品名称传“100元宝或100金币”,商品数量传“1”;
如游戏中所卖商品在游戏界面显示为“月卡或礼包”一类,当调用支付接口时,商品名称请直接传“月卡或礼包”,商品数量传“1”。
切记 如果当前商品是某种虚拟游戏货币,商品名称中不要出现数量的概念。
目录结构和用途:
├─OurpalmSDK│ ├─Android│ │ ├─OurpalmSDK.androidlib 安卓平台basesdk的资源文件(unity2020以后资源只能用androidlib包装)│ │ │ ├─assets│ │ │ ├─libs│ │ │ └─res│ │ └─Plugins 安卓平台basesdk,主要是aar和jar文件│ │ └─libs│ ├─Editor│ │ ├─iOSPack IOS平台Editor通过Postbuild脚本将sdk集成到导出的xcode工程中│ │ │ ├─Mods│ │ │ │ └─iOS│ │ │ │ ├─.Atlantis 三方sdk,非必须│ │ │ │ ├─.Bugly 腾讯Bugly,非必须│ │ │ │ ├─.Ourpalm 掌趣sdk│ │ │ │ └─.ThinkingSDK 数数sdk│ │ │ └─XCodeEditor 运行于UnityEditor的Postbuild脚本│ │ ├─PC│ │ ├─WebViewMobile│ │ └─ZFBrowser│ ├─Example SDK的UnityDemo工程的插件、资源和代码│ ├─PC 掌趣SDK的PC平台组件│ ├─Script 掌趣SDK的unity接口封装代码│ ├─WebGL 掌趣SDK的WebGL平台组件│ └─WebView│ ├─WebViewMobile 可用于unity内的移动端WebView组件(可选组件)│ └─WebViewPC 可用于unity内的PC端WebView组件(PC端必须)├─Plugins│ ├─Android 安卓平台AndroidManifest.xml和MainActivity.java等│ └─ToolKit demo示例Example使用的组件,非必须├─StreamingAssets└─WebGLTemplates 打包WebGL集成opsdk的Templates示例└─opsdkExample 示例工程├─opsdk opsdk的js版本└─TemplateData
其中,Example(示例Demo)、WebGLTemplates、BuglyPlugins、NativeGallery等是非必须的,可以视情况删除
注意:要运行Demo,需要先将”Assets\OurpalmSDK\Example\Scenes”下的三个Demo场景OPSdkLogin、OPSDKCreateRole、OPSdkEnterGame加入Build Settings的Scenes in Build列表中。否则unity会报错:
Scene 'OPSDKCreateRole' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.
加好以后,就可以打包测试,或者从编辑器打开初始场景OPSdkLogin,在Editor中开始运行。
因为网络限制,目前仅“初始化”、“快速登录”等功能可在内网成功执行。注意查看unity编辑器内的日志显示,可看到是网络接口调用失败、还是参数错误日志等其它原因。
Assets\Plugins\Android\AndroidManifest.xml
需要设置Player Settings - Publishing Settings中的Custom Main Manifest选项,此文件才能生效
安卓打包时会自动将此文件内容合并到最终的AndroidManifest.xml中
Assets\OurpalmSDK\Android\OurpalmSDK.androidlib\AndroidManifest.xml
此文件里的内容是ourpalmsdk的android sdk所必须的,不能修改
可以视情况删除Assets\Plugins\Android\AndroidManifest.xml中不需要的权限,或增加其它需要的权限。
注意:APK安装位置属性必须配置为android:installLocation=”auto”
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.hi.sdk" android:installLocation="auto"android:versionCode="999" android:versionName="9.9.9"><supports-screens android:anyDensity="true"android:largeScreens="true" android:normalScreens="true"android:resizeable="true" android:smallScreens="true" /><!-- OurpalmSDK需要的权限 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 应用或其它插件可能需要的权限,可视情况添加 --><!--uses-permission android:name="android.permission.READ_PHONE_STATE" /--><!--uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /--><!--uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /--><!--uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /--><!-- 实际配置到游戏工程的AndroidManifest.xml时可以删除重复的权限 --><!-- 如游戏本身有Application类,则需要在代码中继承ourpalm.android.channels.Info.Ourpalm_Channels_Application;如游戏本身没有Application类,则需要在此添加配置,将AndroidManifest.xml中application的名字命名为"ourpalm.android.channels.Info.Ourpalm_Channels_Application" --><applicationandroid:allowBackup="false"android:label="@string/app_name"android:icon="@mipmap/app_icon"android:theme="@style/AppTheme"android:usesCleartextTraffic="true"android:name="ourpalm.android.channels.Info.Ourpalm_Channels_Application"><!-- Demo的启动activity类名 --><activity android:name="com.ourpalm.gamesdk.MainActivity"android:theme="@style/UnityThemeSelector"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="unityplayer.UnityActivity" android:value="true" /></activity><!-- 游戏自己的启动activity类名,需要完整路径,必须配置 --><meta-data android:name="ourpalm_class_name"android:value="com.ourpalm.gamesdk.MainActivity" /><!-- 游戏请配置自己游戏的展示类型,竖屏游戏请配置成 portrait,横屏游戏请配置成landscape --><meta-data android:name="ourpalm_screenOrientation"android:value="landscape" /><!-- 数数SDK相关接入 --><meta-dataandroid:name="cn.thinkingdata.android.MainProcessName"android:value="ourpalm_package_name" /><serviceandroid:name="cn.thinkingdata.android.TDQuitSafelyService$TDKeepAliveService"android:exported="false"android:stopWithTask="false" /><meta-dataandroid:name="thinkingdata_appid"android:value="3405b02edbbb461cb5962f340cdaed46"/><meta-dataandroid:name="thinkingdata_url"android:value="https://ssapi-hk.gamesbean.net/"/><!-- 数数SDK相关接入 --></application></manifest>
为了方便功能扩展,和提供跨平台的兼容性,接口参数一般只采用基本的类型,如string、int、long、IntPtr。
复杂的参数一般通过json对象转换为string字符串进行传递。
包含了SDK的对外接口,此类的内部实现及其依赖的代码和资源,仅供参阅,请不要修改,不要在其中加入自己的代码。否则在后续的升级中可能需要手动进行合并和处理冲突。
若有需求,可以将需求提交给SDK开发部门,或者直接参与此项目Unity部分的代码开发。
Example中Demo示例为各种接口的使用示例
做了浅层次的封装示例,建议游戏参考此类的实现,封装SDK相关逻辑。
用于接收Native SDK的回调消息,进行简单的解析,根据MethodName调用对应的回调函数。
Native SDK的回调消息由”methodName”和”jsonParam”两部分组成,”methodName”是回调函数名,”jsonParam”是json的字符串,包含多个key-value值。
methodName大概是这样的:
Callback_Ourpalm_InitCallback_Ourpalm_LoginCallback_Ourpalm_LogoutCallback_Ourpalm_PayCallback_SwitchingAccount...
jsonParam会根据功能的不同而包含不同的kv值,一般会包含success,code,desc几个值。下面是jsonParam的几个示例。
//初始化回调 Callback_Ourpalm_Init{"channel":"channel_quick_login","code":"0","desc":"","protocolSwitch":0,"success":"1"}//登录回调 Callback_Ourpalm_Login或Callback_LoginEx{"code":"0","desc":"success","forceIdentityAuthBindSwitch":0,"identityAuth":0,"loginType":"11","returnJson":{"nickName":"","palmId":"10000001"},"success":"1","token":"","userId":"1100010000000000000000000000000000000001","userName":"tour000000000000001"}
注意:对于一个功能的回调函数,只能保证基本的回调字段是相同的,但不同三方渠道、不同平台的可能会有不同的额外的信息,需要注意区分判断。
SDK的回调事件接口都在此类中,包括异步回调接口、SDK的通知回调接口等。
大部分调用都是异步执行的,如果需要接收返回结果回调,需要在此类中注册回调接口。比如初始化、登录、充值等。
对于Unity工程,如果想替代代替UnitySDK Demo中的这部分处理代码,可以注册并实现”CustomCallbackFunc”回调函数,且总是返回”true”。
CustomCallbackFunc回调函数的CallbackParameter,主要包含MethodName和JsonParam成员。MethodName是回调方法名JsonParam是json字符串,根据功能不同,包含不同的成员。
对于其它引擎开发的项目,可能需要自己实现回调消息的处理。这可以参考Unity的Demo工程
UnitySDK Demo项目的中定义的部分回调函数定义如下:
// sdk日志输出回调,比如Windows(PC)平台的sdk日志会通过此接口输出,由游戏项目将日志输出到日志文件.public static System.Action<int, string> DebugMessageCallback;/// <summary>/// Native回调消息首先尝试执行此回调函数,如果此函数进行了完全的处理,则请返回true,告诉OurpalmSDKListener不要再查找其它的回调函数/// 如果未注册此回调函数,或返回了false,则OurpalmSDKListener会根据回调的"MethodName",执行其它的回调函数/// </summary>public static System.Func<CallbackParameter, bool> CustomCallbackFunc;// 初始化成功,游戏需要SDK的初始化完成后,再调用SDK的功能接口public static System.Action<string> EventInitSuccess;// SDK初始化失败的回调,游戏可以在这里实现自己的逻辑处理,可以只提示用户后退出游戏,也可以继续游戏,但SDK的某些功能可能会受到影响public static System.Action<string> EventInitFail;//登录成功回调,网络游戏必须实现public static System.Action<string> EventLoginSuccess;//登录失败回调,网络游戏必须实现public static System.Action<string> EventLoginFail;/** 当前渠道带有切换账号功能时,游戏需要实现此接口逻辑进行游戏登录。切换账号分2种情况:一是调用SDK的切换账号接口实现账号的切换,此类型的切换账号按钮是由游戏去实现,建议放到登录界面,切换账号成功后,登录数据会在此接口返回,游戏可执行游戏的登录流程,类似登录成功接口的回调。二是渠道SDK的悬浮框或者用户中心页面带有切换账号功能,如用户点击切换账号并登录成功后,登录数据会在此接口返回,但如果当前游戏场景处于游戏中,游戏正常应该先返回到登录界面,然后再通过SDK切换账号成功返回的数据执行游戏的登录流程(游戏能在游戏中直接实现账号切换,人物改变的除外,不需返回登录界面)。*/public static System.Action<string> EventSwitchSuccess;public static System.Action<string> EventSwitchFail;//使用第三方账号绑定并登录public static System.Action<string> EventAccountBind;//当前渠道带有注销功能的话由游戏实现,如返回到登录界面。public static System.Action<string> EventLogoutSuccess;//当前渠道带有注销功能的话由游戏实现public static System.Action<string> EventLogoutFail;// 游戏使用掌趣SDK退出接口时必须实现此回调,在此处实现退出游戏的功能。public static System.Action<string> Ourpalm_ExitGame;
Unity sdk在Prepare时自动调用,设置回调函数接口,用于sdk推送消息和日志、发送调用结果等。
//对应的Native函数原型//Windows、IOSpublic static void SetGameEngineMessageListener(IntPtr callback);//androidpublic static void SetGameEngineMessageListener(GameEngineMessageListener listener)
游戏项目应当尽早的调用SDK的”Ourpalm_Prepare”接口,传入所需的可选参数,让sdk准备对应的数据、运行模式和资源等。
//准备初始化public static void Ourpalm_Prepare(Hashtable initParams);// 对应的Native函数原型public static void Ourpalm_Prepare(string jsonParams);
| 参数名称 | 是否必传 | 类型 | 说明 |
|---|---|---|---|
| gameType | 必须 | String | 游戏类型,1 网游(默认),2 单机。默认传”1” |
| gameVer | 必须 | String | 游戏程序版本号,例如:”1.0.0” |
| gameResVer | 必须 | String | 游戏资源版本号,例如:”1.0.0” |
| callback_sdk_log | 可选 | String | “0”:sdk自己输出的同时发送回调,”1”:禁止sdk自己输出,”2”:禁止回调 |
| isOpenLogs | 可选 | int | 0:关闭sdk日志,1:sdk打开日志; 作用同Ourpalm_SetLogs接口 |
| DevMode | 可选 | int | 务必仅用于测试目的。测试环境模式,自动使用配置中初始化地址对应的测试环境初始化地址,”0”:关闭, “1”:开启 |
| x_forwarded_for | 可选 | String | 务必仅用于测试目的。模拟客户端ip地址,对混合支付区域开关、欧盟GDPR等有效 |
//准备初始化Hashtable initParams = new Hashtable();initParams["gameType"] = "1";initParams["gameVer"] = "1.0";initParams["gameResVer"] = "1.0";//initParams["isOpenLogs"] = isOpenLogs ? 1 : 0;//initParams["DevMode"] = 1;//1 测试环境模式,自动使用配置中初始化地址对应的测试环境初始化地址//initParams["x_forwarded_for"] = "45.255.135.34";//俄罗斯-莫斯科OurpalmSDKAgent.Ourpalm_Prepare(initParams);
| 参数名称 | key-类型 | 说明 |
|---|---|---|
| MethodName | “Callback_Ourpalm_Prepare” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | 结果状态说明 |
| jsonParams.desc | string | 描述 |
| jsonParams.channel | string | 渠道标识名(PC) |
SDK的日志内容可以通过回调事件发送给游戏项目,这样游戏项目就可以统一输出到日志文件中,自己查看sdk的日志,对问题进行初步的判断和处理.
这样可能导致这部分最终日志被输出两次,可以在初始化参数中增加开关,关闭sdk内部的输出,仅保留回调输出.
| 参数名称 | key-类型 | 说明 |
|---|---|---|
| MethodName | “Callback_SDK_Log” | 回调函数名 |
| jsonParams.success | string | 日志等级,”0”:info “1”:Warning “2”:Error |
| jsonParams.desc | string | 日志内容 |
应当在调用Ourpalm_Prepare之后调用
/*** 初始化SDK(OurpalmSDKAgent)**/public static void Ourpalm_Init(Hashtable initParams);// 对应的Native函数原型public static void Ourpalm_Init(string jsonParams);
| 参数名称 | 是否必传 | 类型 | 说明 |
|---|---|---|---|
| 暂无 |
// 初始化SDKHashtable initParams = new Hashtable();OurpalmSDKAgent.Init(initParams);
| 参数名称 | key-类型 | 说明 |
|---|---|---|
| MethodName | “Callback_Ourpalm_Init” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | 结果状态说明 |
| jsonParams.desc | string | 描述 |
| jsonParams.channel | string | 渠道标识名(PC) |
| jsonParams.privacy_policy | string | 启动时展示隐私协议弹窗(欧盟GDPR等),开启:”1”,关闭:”0” |
// 初始化成功,游戏需要SDK的初始化完成后,再调用SDK的功能接口public static System.Action<string> EventInitSuccess;// SDK初始化失败的回调,游戏可以在这里实现自己的逻辑处理,可以只提示用户后退出游戏,也可以继续游戏,但SDK的某些功能可能会受到影响public static System.Action<string> EventInitFail;

1 手机游戏客户端会调用掌趣sdk进行sdk初始化操作
2 掌趣sdk向掌趣用户中心服务器发起登录/注册的请求
3 掌趣用户中心服务器向掌趣sdk返回token、用户信息等等
4 掌趣sdk向游戏客户端返回登录结果,包含token和用户相关信息
5 游戏客户端上传用户信息到游戏服务器
6 服务器根据token向掌趣用户中心服务器获取用户信息
7 掌趣用户中心服务器向游戏服务器返回用户信息
8 游戏服务器向游戏客户端返回登录结果
调用第三方SDK的登陆功能。
当为官网包时会自动调用掌趣官网登陆界面。
/*** 登陆接口*/public static void Ourpalm_Login()
OurpalmSDKAgent.Ourpalm_Login();
| 参数名称 | key-类型 | 说明 |
|---|---|---|
| MethodName | “Callback_Ourpalm_Login” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | 结果状态说明 |
| jsonParams.desc | string | 执行结果描述 |
| jsonParams.token | string | 掌趣用户中心生成的登录token |
| jsonParams.userId | string | 掌趣用户账号 |
| jsonParams.userName | string | 掌趣用户中心生成的用户名称 |
| jsonParams.loginType | string | 从用户中心返回的当前用户的状态,标识是注册还是登陆 |
| jsonParams.returnJson | string | 第三方用户系统返回给掌趣用户中心的数据,不同渠道返回的数据会有所不同,游戏根据情况酌情使用,不需要的话可以不取。 |
数据示例
jsonParams == {"success":"0","code":"%d","desc":"","token":"45bf7d3b-5041-451d-b660-b872ba4c831d",userId":"0101540000000000000000000000000623530796","userName":"oPlat000000001000047","loginType":"1","returnJson":{"ErrorCode":"1","ErrorDesc":"有效"}}userId:掌趣用户中心生成的用户ID,游戏应以此ID作为用户登陆的唯一标识。userName:掌趣用户中心生成的用户名称。loginType:从用户中心返回的当前用户的状态,标识是注册还是登陆returnJson:第三方用户系统返回给掌趣用户中心的数据,不同渠道返回的数据会有所不同,游戏根据情况酌情使用,不需要的话可以不取。
附表: 登录类型loginType的可能值
| 值 | 含义 |
|---|---|
| 0 | 是第三方平台注册 |
| 1 | 为官网注册 |
| 2 | 为快速注册 |
| 9 | 为其它平台登录 |
| 10 | 为官网登录 |
| 11 | 为快速登录 |
| speedyLogin | 快速登录 |
| speedyRegister | 快速注册 |
| commonLogin | 普通登录 |
| commonRegister | 普通注册 |
| phoneLogin | 手机登录 |
| phoneRegister | 手机注册 |
| thirdHiddenLogin | 第三方用户登录 |
| thirdHiddenRegister | 第三方用户注册 |
| phoneVerifyCodeLogin | 手机验证码登录 |
| phoneVerifyCodeRegister | 手机验证码注册 |
注销当前登陆账号,注销成功后会调用游戏实现功能后的注销回调接口。
客户端需要根据GetEnableInterface 返回值,判断是否需要展示UI和调用此接口
/*** 登陆注销*/public static void Ourpalm_Logout();
OurpalmSDKAgent.Ourpalm_Logout();
| 参数名称 | key-类型 | 说明 |
|---|---|---|
| MethodName | “Callback_Ourpalm_Logout” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | 错误码 |
| jsonParams.desc | string | 执行结果描述 |
某些渠道SDK当登陆过一次后下次登陆会变成自动登陆,这个时候如果SDK内部没有注销或者切换账号的按钮,需要游戏调用此接口实现账号切换功能。
客户端需要根据Ourpalm_GetEnableInterface 返回值,判断是否需要展示UI和调用此接口
/*** 账号切换*/public static void Ourpalm_SwitchAccount();
OurpalmSDKAgent.Ourpalm_SwitchAccount();
| 参数名称 | key-类型 | 说明 |
|---|---|---|
| MethodName | “Callback_SwitchingAccount” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | 错误码 |
| jsonParams.desc | string | 执行结果描述 |
| jsonParams.token | string | 掌趣用户中心生成的登录token |
| jsonParams.userId | string | 掌趣用户账号 |
| jsonParams.userName | string | 掌趣用户中心生成的用户名称 |
| jsonParams.loginType | string | 从用户中心返回的当前用户的状态,标识是注册还是登陆 |
| jsonParams.returnJson | string | 第三方用户系统返回给掌趣用户中心的数据,不同渠道返回的数据会有所不同,游戏根据情况酌情使用,不需要的话可以不取。 |
成功登录并进入游戏后,游戏客户端必须调用此接口设置用户的角色信息,角色信息在其他功能接口中需要用到,如未调用则无法使用支付功能。用户首次创建或注册角色并登录时,需要调用一次注册设置(type=1)和一次登录设置(type=2);用户使用老角色登录,则只需要调用一次登录设置(type=2)。
注意:
1.游戏内没有角色注册行为的,在游戏自动给用户创建角色的时候,即认为注册。
2.用户首次创建或注册角色并登录时,需先调用注册设置(type=1),再调用登录设置(type=2)
/*** 设置游戏角色信息* @param type* 0:仅更新sdk内缓存数据,1:角色注册,2:角色登录* @param jsonParams* json字符串,包含角色信息*/public void Ourpalm_SetGameInfo(int type, string jsonParams);
Hashtable extendParams = new Hashtable();extendParams["serverID"] = gameserverid;extendParams["roleID"] = roleid;extendParams["rolelv"] = rolelv;extendParams["roleviplv"] = roleviplv;extendParams["roleName"] = rolename;extendParams["gameServerName"] = gameservername;var jsonParams = ToolsUtils.MiniJSON.jsonEncode(extendParams);OurpalmSDKAgent.Ourpalm_SetGameInfo(type, jsonParams);
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| type | 必须 | int | 1表示角色注册,2表示角色登录 |
| extendParams.gameServerName | 必须 | String | 当前用户所在游戏服务器名称 |
| extendParams.serverID | 必须 | String | 当前用户所在游戏服务器ID(必须纯数字) |
| extendParams.roleName | 必须 | String | 当前角色名称(不支持富文本) |
| extendParams.roleId | 必须 | String | 当前角色ID(不可使用特殊符号) |
| extendParams.rolelv | 必须 | String | 当前角色等级,如无可传”” |
| extendParams.roleviplv | 必须 | String | 当前角色VIP等级,如无可传”” |

1 base sdk向掌趣计费中心发起支付请求;
2 掌趣计费中心生成订单号,并向base sdk返回支付结果;
3 掌趣计费中心通知游戏服务器发货;
4 游戏服务器发送虚拟物品至玩家手机游戏客户端;
5 游戏服务器向计费中心返回发货结果;
调用自有支付功能或者第三方SDK的支付功能,实现游戏中的道具购买。
注意:对该接口中的商品名称和商品数量2个参数具体说明,如游戏中所卖商品在游戏界面显示为“100元宝”,当调用支付接口时,商品名称请传“元宝”,商品数量请传“100”,切记不可商品名称传“100元宝”,商品数量传“1”。
/*调用自有支付功能或者第三方SDK的支付功能,实现游戏中的道具购买。注意:如游戏中所卖商品在游戏界面显示为“100元宝”,当调用支付接口时,商品名称请传“元宝”,商品数量请传“100”如游戏中所卖商品在游戏界面显示为“月卡“,当调用支付接口时,商品名称请传“月卡”,商品数量请传“1”如游戏中所卖“月卡”有多个,当调用支付接口时,商品名称建议传入月卡的金额。例如“30元月卡”、“50元月卡”等等,商品数量请传“1”礼包类与月卡同理,请在商品名称尽量传入礼包对应的价格,例如:“30元礼包”,“50元礼包,商品数量请传“1”。注意:掌趣官网包中支付宝等sdk支付方式,需要进行打包处理才可以支持。*/public static void Ourpalm_Pay(string propId, string chargeCash, string currencyType, string propName, string propCount,string propDes, string Gameurl, string jsonExtendParams);
注:比旧版本新增的 userId、serverId、roleId等参数
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| 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\”} |
string propId = productId; //商品IDstring chargeCash = amount; //价格(以分为单位)string propName = "商品名称";string propCount = "1";string propDes = "商品描述";string Gameurl = "回调地址";string Params = "我是扩展参数";string rolelv = "100";string roleviplv = "8";Hashtable extendParams = new Hashtable();extendParams["serverID"] = "1";extendParams["roleID"] = "1000000";extendParams["rolelv"] = rolelv;extendParams["roleviplv"] = roleviplv;extendParams["roleName"] = "角色无名";extendParams["gameServerName"] = "游戏服名";extendParams["Params"] = Params;//礼包ID的含义由项目和买量BI协商确定,sdk只做转发extendParams["purchaseinfo"] = "{\"order_funnel_id\":\"研发生成的付费会话唯一id\",\"package_id\":\"礼包id\",\"dev_order_id\":\"研发订单id\"}";var jsonParams = ToolsUtils.MiniJSON.jsonEncode(extendParams);OurpalmSDKAgent.Ourpalm_Pay(propId, chargeCash, currencyType, propName, propCount, propDes, Gameurl, jsonParams);
| 参数名称 | key-类型 | 说明 |
|---|---|---|
| MethodName | “Ourpalm_PaymentCallBack” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | 错误码 |
| jsonParams.ssid | string | 掌趣计费中心生成的订单号,如支付失败或者用户取消支付时可能返回为空。 |
| jsonParams.channelOrderId | string | 渠道订单号 |
| jsonParams.pdid | string | 游戏传入的商品id |
回调示例接口
//支付成功public static System.Action<string> EventPaymentSuccess;//支付失败public static System.Action<string> EventPaymentFail;
“下单成功”表示当前订单已经成功提交,但用户是否进行支付,以计费中心服务器的通知为准。 下单成功代表支付流程结束。下单成功回调触发以后不会在有支付成功和支付失败的回调,游戏需要根据服务器通知为准。
| 参数名称 | key-类型 | 说明 |
|---|---|---|
| MethodName | “Callback_Ourpalm_Pay_Order” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | 错误码 |
| jsonParams.ssid | string | 掌趣计费中心生成的订单号,如支付失败或者用户取消支付时可能返回为空。 |
| jsonParams.channelOrderId | string | 渠道订单号 |
| jsonParams.pdid | string | 游戏传入的商品id |
回调示例接口
// 下单成功public static System.Action<string> EventPaymentOrderSuccess;
注:1、Android端和iOS端返回错误码不一致。2、Android返回参数key为小写{String ssid, String pbid},iOS端返回json中的key为小驼峰{ “desc”:成功描述,”propId”:”道具ID”,”reset”:”120”,”ssId”:”订单号}
OurpalmSDKAgent.Ourpalm_RestorePayments(propId);
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| propId | 必须 | String | 商品ID,必传。 |
游戏调用此接口后,可以返回渠道商品id对应的商品信息(商品ID、商品价格、商品货币单位、商品title、商品描述及以微单位显示的商品价格),注意需要游戏传入渠道后台配置的商品id。
注意:ios渠道不返回以微单位显示的商品价格。
/*** 获取渠道消耗类型商品信息** @param id* SkuDetails 获取渠道商品信息固定参数* @param value1* 渠道商品id1* @param value2* 渠道商品id2*/OurpalmSDKAgent.Ourpalm_Channel_Spreads("SkuDetails","[\"ubi.heroes.ad60\", \"ubi.heroes.ad60\"]");
注意:可以获取多个渠道商品id 对应的商品信息。
| key | key-类型 | 意义 |
|---|---|---|
| JsonParam.id | string | “SkuDetails” |
| JsonParam.result | string | JSONArray字符串,道具列表信息 |
result为sku的数组
| 参数 | 描述 |
|---|---|
| sku | 渠道商品信息列表 |
| sku.getString(“productId”) | 渠道商品id |
| sku.getString(“price”) | 渠道商品价格 |
| sku.getString(“title”) | 渠道商品title |
| sku.getString(“priceCurrencyCode”) | 渠道商品货币单位 |
| sku.getString(“description”) | 渠道商品描述 |
| sku.getLong(“priceAmountMicros”) | 渠道以微单位显示的商品价格,其中 1,000,000 个微单位等于 1 个单位的货币。 例如,如果 price 为 “€7.99”,则 price_amount_micros 为 “7990000”,ios不返回该字段 |
示例代码
Logs.i("info", "SkuDetails sku_list =" + result);if result.equals("")) {// 获取道具列表失败Toast.makeText(MainActivity.this, "获取道具信息功能失败", Toast.LENGTH_LONG).show();} else {// 输出道具列表信息Toast.makeText(MainActivity.this, "获取道具信息功能成功", Toast.LENGTH_LONG).show();try {JSONArray sku_list = new JSONArray(result);for (int i = 0; i < sku_list.length(); i++) {JSONObject sku = sku_list.getJSONObject(i);Logs.i("info"," sku productId = " + sku.getString("productId") + " price = " + sku.getString("price")+ " title = " + sku.getString("title") + " type = " + sku.getString("type")+ " priceCurrencyCode =" + sku.getString("priceCurrencyCode")+ " description = " + sku.getString("description")+ " priceAmountMicros =" + sku.getLong("priceAmountMicros"));} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();};}
游戏调用此接口后,可以返回渠道订阅商品id对应的商品信息(商品ID、商品价格、商品货币单位、商品title、商品描述及以微单位显示的商品价格),注意需要游戏传入渠道后台配置的订阅商品id。
注意:ios渠道不返回以微单位显示的商品价格。
/*** 获取渠道订阅计费点商品信息** @param id* SubsSkuDetails 获取渠道商品信息固定参数* @param value1* 渠道商品id1* @param value2* 渠道商品id2*/OurpalmSDKAgent.Ourpalm_Channel_Spreads("SubsSkuDetails", "[\"ubi.heroes.ad9.99e\"]");
注意:可以获取多个渠道订阅商品id 对应的商品信息。
| 参数 | 描述 |
|---|---|
| sku | 渠道订阅商品信息列表 |
| sku.getString(“productId”) | 渠道商品id |
| sku.getString(“price”) | 渠道商品价格 |
| sku.getString(“title”) | 渠道商品title |
| sku.getString(“priceCurrencyCode”) | 渠道商品货币单位 |
| sku.getString(“description”) | 渠道商品描述 |
| sku.getLong(“priceAmountMicros”) | 渠道以微单位显示的商品价格,其中 1,000,000 个微单位等于 1 个单位的货币。 例如,如果 price 为 “€7.99”,则 price_amount_micros 为 “7990000” ,ios不返回该字段 |
if (id.equals("SubsSkuDetails")) {Logs.i("info", "SubsSkuDetails sku_list =" + arg[0]);if (arg[0].equals("")) {// 获取道具列表失败Toast.makeText(MainActivity.this, "获取道具信息功能失败", Toast.LENGTH_LONG).show();} else {// 输出道具列表信息Toast.makeText(MainActivity.this, "获取道具信息功能成功", Toast.LENGTH_LONG).show();try {JSONArray sku_list = new JSONArray(arg[0]);for (int i = 0; i < sku_list.length(); i++) {JSONObject sku = sku_list.getJSONObject(i);Logs.i("info"," sku productId = " + sku.getString("productId") + " price = " + sku.getString("price")+ " title = " + sku.getString("title") + " type = " + sku.getString("type")+ " priceCurrencyCode =" + sku.getString("priceCurrencyCode")+ " description = " + sku.getString("description")+ " priceAmountMicros =" + sku.getLong("priceAmountMicros"));} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();};}}
游戏需要提供功能的入口按钮,当用户点击此按钮时,调用接口,打开客服反馈页面。
/// <summary>/// 打开客服界面/// </summary>OurpalmSDKAgent.Ourpalm_EnterServiceQuestion();
调用该接口会拉起AIHelp智能客服页面。
注意:android包要使用AIHelpSDK接口,需要业务同学先在dev后台-三方参数-三方能力中添加AIHelp sdk,再二次打包测试。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("aihelp_openServiceDialog","{\"entranceId\":\"CS01\",\"userTags\":\"paid\",\"customData\":\"{\"baseLevel\":\"123\",\"loadingProgress\":\"25\"}\"}");
| 参数 | 描述 |
|---|---|
| id | 接口id 本接口为:aihelp_openServiceDialog |
| jsonParam.entranceId | 自定义入口ID,需要业务同学在AIHelp后台配置 |
| jsonParam.userTags | 用户标签(可选),需要业务同学在AIHelp后台配置 |
| jsonParam.customData | 自定义用户数据(可选), 对应json串: {“key”:”value”, “key”:”value”} |
entranceId和userTags这两个参数都需要业务同学事先在AIHelp后台配置,customData是自定义用户数据json串,由研发和业务同学一起确认需要传哪些参数。
调用该接口会拉起AIHelp智能客服页面。
注意:android包要使用AIHelpSDK接口,需要业务同学先在dev后台-三方参数-三方能力中添加AIHelp sdk,再二次打包测试。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("aihelp_openFAQs","{\"entranceId\":\"E001\",\"userTags\":\"paid\",\"customData\":\"{\"baseLevel\":\"123\",\"loadingProgress\":\"25\"}\"}");
| 参数 | 描述 |
|---|---|
| id | 接口id 本接口为:aihelp_openFAQs |
| jsonParam.entranceId | 自定义入口ID,需要业务同学在AIHelp后台配置 |
| jsonParam.userTags | 用户标签(可选),需要业务同学在AIHelp后台配置 |
| jsonParam.customData | 自定义用户数据(可选), 对应json串: {“key”:”value”, “key”:”value”} |
entranceId和userTags这两个参数都需要业务同学事先在AIHelp后台配置,customData是自定义用户数据json串,由研发和业务同学一起确认需要传哪些参数。
HelpShift客服功能更复杂些,由一组自定义接口和回调组成
提供helpshift在线客服功能及打开FAQ页面功能。
调用此接口,可以拉起HelpShift在线客服反馈页面。
/*** 打开helpshift客服弹框* @param id 接口id* @param tags 客服入口打点,可以支持传多个tag*/OurpalmSDKAgent.Ourpalm_Channel_Spreads("helpShift_openServiceDialog","{'tags':['opentags']}");
| 参数 | 描述 |
|---|---|
| id | 接口id 本接口为:helpShift_openServiceDialog |
| tags | 客服入口打点标识,可以支持传多个tag |
注意:当游戏设立多个客服入口时,每个入口都要设定一个tag,同时需要把所有的tag值都提供给运营同学,运营同学在helpShift后台Settings-WORKFLOWS-Tags下添加所有定义好的tag.
调用此接口,可以拉起HelpShift FAQ页面。
/*** 打开helpshift FAQ弹窗* @param id 接口id*/OurpalmSDKAgent.Ourpalm_Channel_Spreads("helpShift_openFAQs", "");
| 参数 | 描述 |
|---|---|
| id | 接口id 本接口为:helpShift_openFAQs |
调用此接口,可以拉起指定问题id的helpshift客服FAQ页面,问题id由运营同学提供。
/*** 打开helpshift指定FAQ弹窗** @param activity* @param questionPublishId*/OurpalmSDKAgent.Ourpalm_Channel_Spreads("helpShift_openSingleFAQ", "{'questionPublishId':'25'");
| 参数 | 描述 |
|---|---|
| id | 接口id 本接口为:helpShift_openSingleFAQ |
| jsonParam.questionPublishId | 指定问题id |
调用此接口,可以拉起指定问题id的helpshiftFAQ列表页面,问题id由运营同学提供。
/*** 打开指定问题id的faq列表** @param activity* @param questionPublishId*/OurpalmSDKAgent.Ourpalm_Channel_Spreads("helpShift_openFAQSection", "{'questionPublishId':'25'");
| 参数 | 描述 |
|---|---|
| id | 接口id 本接口为:helpShift_openFAQSection |
| jsonParam.questionPublishId | 指定问题id |
调用此接口,可以设置helpshift用户信息,如果登录前调用,userId传空串,登录成功选服后,sdk会自动此调用。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("helpShift_setUserInfo", jsonParam);
| 参数 | 描述 |
|---|---|
| id | 接口id 本接口为:helpShift_setUserInfo |
| jsonParam.userId | 用户id |
| jsonParam.userName | 用户名称 |
| jsonParam.roleId | 角色id |
| jsonParam.serverId | 玩家区服id |
| jsonParam.vLevel | 角色vip等级 |
| jsonParam.roleName | 角色名称 |
客服人员回复消息后,玩家重进后会收到此回调
| key | 类型 | 意义 |
|---|---|---|
| id | string | “helpShift_NotificationCount” |
| JsonParam.result | string | 回复通知数,”0”表示没有新的通知 |
兑换礼包码
CP接入礼包码功能时,由SDK来直接提示错误提示语。
/// <summary>/// 礼包码兑换/// 此接口中需要的服务器和角色数据,必须提前使用SetGameInfo接口提供这些数据/// </summary>public static void Ourpalm_GiftExchange(string giftCode, string deleverUrl, string extendParams);
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| GiftCode | 必须 | String | 礼包码 |
| url | 必须 | String | 游戏发货服务器地址 |
| extendParams | 可选 | String | 透传参数,成功回调内,将会返回此参数 |
OurpalmSDKAgent.Ourpalm_GiftExchange("用户输入的礼包码","游戏发货服务器地址","透传参数");OurpalmSDKAgent.Ourpalm_GiftExchange("84K82JAUT4Q39M", "https://hi-login-test.tmskapp.com/pay/ourpalmlibaomazhuanfa.php?param=giftCode", "dd");
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_GiftExchange” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | 错误码 |
| jsonParams.packageId | string | 礼包码 |
| jsonParams.extendParams | string | 透传参数 |
/***success 是否成功*code 错误码*packageId 礼包码ID*extendParams 游戏透传参数(游戏传进来的透传参数)*/void EventGiftSuccess(string jsonParams)
/***success 是否成功*code 错误码*packageId 礼包码ID*extendParams 游戏透传参数(游戏传进来的透传参数)*/void EventGiftFail(string jsonParams)
功能说明
用于玩家在appstore兑换促销码后,领取相关道具时使用的接口,需要在角色登录后才可进行调用
参数说明
参数名称 重要性 类型 说明
deliverUrl 必填 string * 游戏发货地址
public static void Ourpalm_GetPromotionCode(string gameUrl);
OurpalmSDKAgent.Ourpalm_GetPromotionCode("https://global-1000112300.gamebean.net/index.php?mod=http&act=Account.ouCallBack&ver=current");
删除账号
//注销账号public static void Ourpalm_CloseAccountWithUserInfo(string accountjson);
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| accountjson | 可选 | String | 扩展参数 |
OurpalmSDKAgent.Ourpalm_CloseAccountWithUserInfo("");
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_CloseAccountWithUserInfo” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | 错误码 |
| jsonParams.desc | string | 结果状态说明 |
用户在SDK的用户中心界面操作,可以为当前账号绑定其它登录方式(账号)。比如账号升级、Google、Facebook、邮箱等。
| 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”, “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"}google 范例:{"sub":"115322977269159722415","email_verified":"true","kid":"87bbe0815b064e6d449cac999f0e50e72a3e4374","iss":"https:\/\/accounts.google.com","typ":"JWT","given_name":"掌","picture":"https:\/\/lh3.googleusercontent.com\/a\/ACg8ocLy2zcKmAsgnfkPrfiRaBtmmUOLEZ-rCIYINK2r_kucaian7aDN=s96-c","aud":"318433458372-ddf34vrsqh27bin4m5h77bl5otorejq3.apps.googleusercontent.com","azp":"318433458372-vlpj7nr5lrbqoafchirr6ta0dri086qp.apps.googleusercontent.com","name":"掌掌","exp":"1720086774","family_name":"掌","iat":"1720083174","alg":"RS256","email":"zqkjjszc@gmail.com"}其中,"picture"字段对应google头像urltwitter 范例:{"userId":"1438080497515515908","name":"leecm","screen_name":"leecm_test"}vk 范例:没有返回用户名字,注意判断{"accessToken":"..."}email 范例:{"name":"liguangcai@ourpalm.com"}account 范例:{"name":"luginsssass"}
调用此接口后,游客客户端再次调用登录接口时会生成新的游客快登账号。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("PlayAgain");
| key | key-类型 | 意义 |
|---|---|---|
| MethodName | “Callback_Ourpalm_Channel_Spreads” | 回调函数名 |
| JsonParam.id | string | Callback_PlayAgain |
| JsonParam.result | string | json串,示例如下: {“success”:”1”,”code”:”0”,”desc”:””} success:1 成功 0 失败 |
判断当前账号是否绑定邮箱,登录成功后调用,安卓包需要二次打包测试。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("CheckBindEmail");
| key | key-类型 | 意义 |
|---|---|---|
| MethodName | “Callback_Ourpalm_Channel_Spreads” | 回调函数名 |
| JsonParam.id | string | Callback_CheckBindEmail |
| JsonParam.result.success | string | 成功:”1”,失败:”0” |
| JsonParam.result.code | string | 错误码 |
| JsonParam.result.data .curBindingPlatform | string | 绑定平台: 默认为:email |
| JsonParam.result.data .emailAccount | string | 绑定的邮箱账号 |
result示例:{“success”:”1”,”data”:{“curBindingPlatform”:”email”,”emailAccount”:”emailAccount”:”aaaaabbbb@126.com”},”code”:”0”}
此接口为自定义接口,可以在自定义接口中接受回调,如果返回的emailAccount字段为空串,即表示当前账号没有绑定邮箱账号,要是已绑定邮箱,emailAccount字段即为绑定的邮箱账号。
打开绑定邮箱界面接口,如果当前账号已绑定邮箱,会回调返回绑定的邮箱账号,如果没绑定,会弹出绑定邮箱界面,玩家绑定成功后会回调返回绑定的邮箱账号,安卓包需要二次打包测试。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("ShowBindEmail");
| key | key-类型 | 意义 |
|---|---|---|
| MethodName | “Callback_Ourpalm_Channel_Spreads” | 回调函数名 |
| JsonParam.id | string | Callback_ShowBindEmail |
| JsonParam.result.success | string | 成功:”1”,失败:”0” |
| JsonParam.result.code | string | 错误码 |
| JsonParam.result.data .curBindingPlatform | string | 绑定平台: 默认为:email |
| JsonParam.result.data .emailAccount | string | 绑定的邮箱账号 |
result示例:{“success”:”1”,”data”:{“curBindingPlatform”:”email”,”emailAccount”:”emailAccount”:”aaaaabbbb@126.com”},”code”:”0”}
此接口为自定义接口,可以在自定义接口中接受回调,如果返回的emailAccount字段为空串,即表示当前账号没有绑定邮箱账号,要是邮箱绑定成功,emailAccount字段即为绑定的邮箱账号。
因为某些第三方SDK需要用到生命周期中的某些方法,所以游戏客户端Activity中 必须调用掌趣SDK中定义的生命周期方法,否则可能会出现不可预估的问题。
Unity SDK中已实现在”Assets\Plugins\Android\MainActivity.java”
@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Ourpalm_GameEntry.Ourpalm_onStart();}
@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Ourpalm_GameEntry.Ourpalm_onResume();}
@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Ourpalm_GameEntry.Ourpalm_onPause();}
@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Ourpalm_GameEntry.Ourpalm_onStop();}
@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Ourpalm_GameEntry.Ourpalm_onRestart();}
@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Ourpalm_GameEntry.Ourpalm_onDestroy();}
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);Ourpalm_GameEntry.Ourpalm_onActivityResult(requestCode, resultCode, data);}
@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);Ourpalm_GameEntry.Ourpalm_onConfigurationChanged(newConfig);}
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);Ourpalm_GameEntry.Ourpalm_onActivityResult(this, requestCode, resultCode, data);}
@Overrideprotected void onNewIntent(Intent intent) {// TODO Auto-generated method stubsuper.onNewIntent(intent);Ourpalm_GameEntry.Ourpalm_onNewIntent(intent);}
@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);Ourpalm_GameEntry.Ourpalm_onRequestPermissionsResult(this, requestCode, permissions, grantResults);}
“用户中心”,“切换账号”,“登录注销”等接口必须接入。
提供此接口用来引导游戏合理使用以上三个接口。根据SDK返回的值,判断是否在相应渠道客户端中显示或隐藏UI展示,以及和是否调用以上三个接口。
比如当前渠道需要调用用户中心接口,则需要将用户中心按钮显示出来并实现其接口调用的功能,如不需要,则需要隐藏用户中心的按钮。其他功能同理。
此三个功能SDK只提供功能接口,无UI显示,所以需要游戏实现展示或者隐藏“用户中心”,“切换账号”,“登录注销”的UI按钮。根据返回值给予显示或者隐藏。
/*** 获取当前渠道游戏包是否要调用“用户中心”,“切换账号”,“登陆注销”等接口*/public static String Ourpalm_GetEnableInterface();// Unity辅助函数,解析sdk返回的结果json字符串,获取当前渠道游戏包是否要调用“用户中心”,“切换账号”,“登陆注销”等接口public static void CheckEnableInterface(out bool hasLogout, out bool hasSwitchAccount, out bool hasUserCenter);
bool hasLogout = false, hasSwitchAccount = false, hasUserCenter = false;string json = OurpalmSDKAgent.Ourpalm_GetEnableInterface();Debug.Log($"获取用户接口支持情况,json={json}");OurpalmSDKAgent.CheckEnableInterface(json, ref hasLogout, ref hasSwitchAccount, ref hasUserCenter);
{"Logout":"Disabled","SwitchAccount":"Disabled","UserCenter":"Enabled"}Enabled: 表示需要调用Disabled: 表示不需要调用例如以上返回数据说明:登陆注销接口不需要调用;切换账号接口不需要调用,进入用户中心接口需要调用。
进入第三方渠道SDK的用户中心或者论坛界面,或者进入官网SDK的用户中心界面。
客户端调用,根据第三方渠道SDK要求来决定是否调用
/// <summary>/// 进入用户中心/// </summary>public static void Ourpalm_GoCenter();
OurpalmSDKAgent.Ourpalm_GoCenter();
调用第三方SDK的退出提示接口,如第三方SDK无退出提示接口则调用掌趣的退出 提示界面或者直接退出游戏。
/*** 调用第三方SDK退出提示页面,如果第三方SDK无退出提示页面则调用掌趣提示页面* @param tips* 是否使用掌趣SDK的退出提示界面*/public void Ourpalm_ExitGame(int tips)
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| tips | 必须 | int | 0 显示退出提示,1 不显示 决定是否使用掌趣SDK自带的退出提示界面, 如果第三方SDK带有退出提示界面,此参数无效 |
OurpalmSDKAgent.Ourpalm_ExitGame(0);
调用Ourpalm_ExitGame时,sdk会弹退出弹窗,玩家在退出弹窗点确认时,会返回退出回调
| 参数名称 | key-类型 | 说明 |
|---|---|---|
| MethodName | “Callback_ExitGame” | 回调函数名 |
| jsonParams.code | string | 结果状态说明 |
| jsonParams.reason | string | |
| jsonParams.message | string |
打开后能在logcat看到SDK的日志输出,TAG为“info”和”msg”, 用于游戏接入SDK的调试阶段,出正式游戏包时请务必关闭日志输出。
/*** 是否打开日志* @param log 是否打开日志输出*/public void Ourpalm_SetLogs(int openlog)
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| open | 必须 | int | 是否打开日志输出,0 关闭,2 打开 |
// 设置打开日志输出OurpalmSDKAgent.Ourpalm_SetLogs(1);
获取当前游戏包中的ServiceId。
//获取 ServiceIdpublic static string Ourpalm_GetServiceId()
string data = OurpalmSDKAgent.Ourpalm_GetServiceId();
获取当前游戏包内打入的渠道ID。
//获取 ChannelIdpublic static string Ourpalm_GetChannelId()
string data = OurpalmSDKAgent.Ourpalm_GetChannelId();
获取当前游戏包内打入的机型组ID。
//获取 DeviceGroupIdpublic static string Ourpalm_GetDeviceGroupId()
OurpalmSDKAgent.Ourpalm_GetDeviceGroupId();
获取当前游戏包内打入的语言ID。
//获取 LocaleIdpublic static string Ourpalm_GetLocaleId()
string data = OurpalmSDKAgent.Ourpalm_GetLocaleId();
获取当前游戏包内打入的OPID。
//获取 OpIdpublic static string Ourpalm_GetOpId()
string data = OurpalmSDKAgent.Ourpalm_GetOpId();
1.需要先调用初始化接口Ourpalm_Init后 再调用 本接口获取 ServiceCode;
2.游戏研发人员 获取ServiceCode后,联系掌趣服务器端同学联调服务端日志,获取ServiceCode接入工作正式完成。
//获取 ServiceCodepublic static string Ourpalm_GetServiceCode()
string data = OurpalmSDKAgent.Ourpalm_GetServiceCode();
不同的平台和渠道会有很多特殊需求,我们使用Ourpalm_Channel_Spreads接口来提供这些自定义功能。
/// <summary>/// 特殊功能扩展接口/// </summary>/// <param name="key"></param>/// <param name="jsonExtendParams"></param>public static string Ourpalm_Channel_Spreads(string id, string jsonExtendParams)
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 自定义功能的id,是由sdk定义的字符串常量 |
| jsonExtendParams | 必传 | String | json格式的字符串,包含自定义功能所需的命名参数 |
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("OpenInstall_sendShareInvite","{'inviteMsg':test openinstall invite', 'inviteCode':'testvalue'}");
有些自定义功能是异步完成的,需要使用回调的方式通知结果
| key | key-类型 | 意义 |
|---|---|---|
| MethodName | “Callback_Ourpalm_Channel_Spreads” | 回调函数名 |
| JsonParam.id | string | 自定义功能的ID |
| JsonParam.result | string或JsonArray | 回调结果,具体内容由具体功能觉定。 这可能是单个字符串值, 可能是个jsonobject字符串。 可能是个JsonArray,如 “[‘val1’,’val2’]” |
打开指定url的web页面接口(可用于论坛、社区、活动)。
//打开指定页面(使用系统的原生WebView组件,可用于论坛、社区、活动)public static void OpenWebViewNative(string url, int w = 0, int h = 0, string bclose = "0")
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| url | 必须 | String | web页面url |
OurpalmSDKAgent.OpenWebViewNative("https://www.baidu.com");
显示应用商店评分界面。用户在应用内给应用评分(星级)。
注意:google应用商店对此功能有调用限制,一个用户可能只有一次显示机会。(ios没有限制,但需要等上线后才能提交评价)
bool ShowAppReview()
OurpalmSDKAgent.ShowAppReview();
游戏内切换多语言时调用。
/// <summary>/// 设置语言/// </summary>/// <returns></returns>static public void SetLanguage(string locale)
| 参数名 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| locale | 必传 | Locale | 设置地域语言(参见下面的地域语言参数说明) |
OurpalmSDKAgent.SetLanguage(Locale.zh_CN);
OurpalmSDK.Locale中支持的语言
| Locale参数名 | 语言及对应的国家 |
|---|---|
| ru_RU | 俄语 |
| fr_FR | 法语 |
| de_DE | 德语 |
| es_ES | 西班牙 |
| pt_BR | 葡萄牙语 |
| en_GB | 英国英语 |
| it_IT | 意大利语 |
| zh_HK | 繁体 |
| th_TH | 泰语 |
| in_ID | 印尼 |
| ko_KR | 韩语 |
| ja_JP | 日语 |
| tr_TR | 土耳其语 |
| zh_CN | 简体中文 |
| en_PH | 英语-菲律宾 |
| en_SG | 英语-新加坡 |
| th_TH | 泰语 |
| in_ID | 印尼语 |
| zh_MY | 简体中文-马来西亚 |
| en_XX | 英语-其他国家 |
| vi_VN | 越南-越南语 |
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
游戏必须在主activity中实现生命周期接口attachBaseContext,具体代码如下:
@Overrideprotected void attachBaseContext(Context newBase) {super.attachBaseContext(newBase);Ourpalm_GameEntry.Ourpalm_attchBassContext(this, newBase);}
根据google渠道要求,在欧盟及美国发行的游戏新用户首次启动需要弹隐私协议,只有玩家同意后才能进入游戏。
sdk启动后会自动检测是否需要显示隐私协议。如果玩家已同意过协议,则下次启动不会自动弹出协议界面;但如果协议内容有更新,则会再次弹出。
本接口暂时保留,用于以后在游戏内需要显示隐私协议时调用。
调用此接口,如果玩家当前ip是欧盟或美国,会拉起隐私协议弹窗。
OurpalmSDKAgent.Ourpalm_ShowPrivacyProtocol();
隐私弹窗点击“不同意”、“同意”或不需要展示隐私协议时,游戏都会收到此回调。
游戏必须等待协议回调通知,然后才能调用登录和打点等其它sdk功能
此回调使用自定义回调”Callback_Ourpalm_Channel_Spreads”通知执行结果。
| key | key-类型 | 意义 |
|---|---|---|
| JsonParam.id | string | ShowPrivacyProtocol |
| JsonParam.result | string | 0已点击隐私弹窗同意按钮 1不用展示隐私弹窗 |
result的可选值有:
| 可选值 | 意义 | 说明 |
|---|---|---|
| 0 | 点击隐私弹窗同意按钮 | 显示弹窗并且用户点击了同意协议 |
| 1 | 不用展示隐私弹窗 | 不需要展示协议、或者用户已经同意过协议 |
| 2 | 点击隐私弹窗拒绝按钮 | 显示弹窗并且用户点击了不同意协议 |
| 3 | 隐私协议更新,并点击隐私弹窗同意按钮 | 隐私协议内容有变化,并且用户又同意了新版本的协议 |
| 4 | 该产品没有配置隐私协议功能 | 没有配置隐私协议地址,或未打开“欧盟隐私弹窗”开关 |
根据游戏传入的google预注册商品id判断玩家是否在Google商店领取过预注册商品。
此功能最好在游戏账号登录成功后调用。
注意:传入的google预注册商品id是google后台申请的原始预注册商品id。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("CheckGooglePreRegistrationCode", "{'pregift':'opm_tw_gg_pregift'}");
| key | key-类型 | 意义 |
|---|---|---|
| id | string | “CheckGooglePreRegistrationCode” |
| JsonParam.pregift | string | google预注册商品id |
| key | key-类型 | 意义 |
|---|---|---|
| JsonParam.id | String | CheckGooglePreRegistrationCode |
| JsonParam.result | string | 0 没有可以领取的奖励 1 可以领取奖励 |
代码示例
if (id.equals("CheckGooglePreRegistrationCode")) {// 是否领取预注册奖励回调if (result.equals("0")) {Toast.makeText(MainActivity.this, "没有可以领取的奖励", Toast.LENGTH_LONG).show();} else if (result.equals("1")) {Toast.makeText(MainActivity.this, "可以领取奖励", Toast.LENGTH_LONG).show();}}
领取google预注册奖励接口,用户进入游戏登录角色后调用。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("ConsumeGooglePreRegistrationCode","{'pregift':'opm_tw_gg_pregift','roleId':'testroleId123','roleName':'testrolename123','serverId':'605','gameUrl':'http://pay.gamebean.net/OurPalm_Pay_Accept/ResponseDeliver','extendParams':'extendParams'}");
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | “ConsumeGooglePreRegistrationCode” |
| JsonParams.pregift | String | google预注册商品id |
| JsonParams.roleId | String | 角色id |
| JsonParams.roleName | String | 角色名称 |
| JsonParams.serverId | String | 游戏服Id |
| JsonParams.gameUrl | String | 预注册礼包发货地址 |
| JsonParams.extendParams | String | 游戏自定义参数 |
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | ConsumeGooglePreRegistrationCode |
| JsonParams.result | String | 0 没有可以领取的奖励 1 可以领取奖励 |
if (id.equals("ConsumeGooglePreRegistrationCode")) {//领取预注册奖励回调if (result.equals("0")) {Toast.makeText(MainActivity.this, "领取失败", Toast.LENGTH_LONG).show();} else if (result.equals("1")) {Toast.makeText(MainActivity.this, "领取成功", Toast.LENGTH_LONG).show();}}
用于玩家在google play商店兑换google礼品卡促销码后,领取相关道具时使用的接口,需要在角色登录后才可进行调用,如果游戏已接入google预注册商品领取功能,需要先调用预注册领取接口后再调用本接口。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("CheckGooglePromotionCode","{'gameUrl':'http://pay.gamebean.net/OurPalm_Pay_Accept/ResponseDeliver'");
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | CheckGooglePromotionCode |
| gameUrl | String | google play card促销码发货url |
用于玩家在google play商店Points兑换礼包后,领取相关道具时使用的接口,需要在角色登录后才可进行调用,如果游戏已接入google预注册商品领取功能,需要先调用预注册领取接口后再调用本接口。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("CheckGooglePointsCode","'url':'http://pay.gamebean.net/OurPalm_Pay_Accept/ResponseDeliver','extendParams':'extendParams_PointsTest"]);
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | 接口id 本接口为:CheckGooglePointsCode |
| gameUrl | String | google Points商品发货url |
| extendParams | String | 游戏自定义参数 |
if (id.equals("CheckGooglePointsCode")) {//兑换google points奖励回调if (result.equals("0")) {Toast.makeText(MainActivity.this, "Points兑换失败", Toast.LENGTH_LONG).show();} else if (result.equals("1")) {Toast.makeText(MainActivity.this, "Points兑换成功", Toast.LENGTH_LONG).show();}}
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | 接口id 判断是那个接口返回的回调,本接口为:CheckGooglePointsCode |
| JsonParams.result | String | 0 兑换失败 1 兑换成功 |
解决游戏后台运行情况下,在google商店兑换google points礼包后,返回游戏收不到货的问题。
通过sdk自定义回调Ourpalm_SetSpreadsCallBack通知游戏可以调用google points领取接口,具体事例如下:
if (id.equals("GooglePointsCodeResume")) {//onResume时是否可以领取google points奖励回调if (success.equals("1")) {OurpalmSDKAgent.Ourpalm_Channel_Spreads("CheckGooglePointsCode","'gameUrl':'http://pay.gamebean.net/OurPalm_Pay_Accept/ResponseDeliver','extendParams':'extendParams_EapTest");}}
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | 接口id 判断是那个接口返回的回调,本接口为:GooglePointsCodeResume |
| JsonParams.result | String | 1 需要调用领取google points接口 |
用于玩家在google play商店游戏详情页面兑换eap礼包后,领取相关道具时使用的接口,需要在角色登录后才可进行调用,如果游戏已接入google预注册商品领取功能,需要先调用预注册领取接口后再调用本接口。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("CheckGoogleEapCode","'gameUrl':'http://pay.gamebean.net/OurPalm_Pay_Accept/ResponseDeliver','extendParams':'extendParams_EapTest");
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | 接口id 本接口为:CheckGoogleEapCode |
| gameUrl | String | google Eap商品发货url |
| extendParams | String | 游戏自定义参数 |
if (id.equals("CheckGoogleEapCode")) {//兑换google Eap奖励回调if (result.equals("0")) {Toast.makeText(MainActivity.this, "Eap兑换失败", Toast.LENGTH_LONG).show();} else if (result.equals("1")) {Toast.makeText(MainActivity.this, "Eap兑换成功", Toast.LENGTH_LONG).show();}}
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | CheckGoogleEapCode |
| JsonParams.result | String | 0 兑换失败 1 兑换成功 |
功能说明 :
接口定义 :
OurpalmSDKAgent.Ourpalm_Channel_Spreads("to_GooglePlay");
参数说明:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| id | String | 接口ID |
接口实例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("to_GooglePlay");
调用该接口会拉起google登录授权页,登录成功后会回调返回google账号对应的相关信息,其中包含google头像url地址。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("GoogleLoginAuthorizationSimply");
google登录授权成功后会收到此回调。
此回调使用自定义回调”Callback_Ourpalm_Channel_Spreads”通知执行结果。
| key | key-类型 | 意义 |
|---|---|---|
| JsonParam.id | string | Callback_GoogleLoginAuthorizationSimply |
| JsonParam.result | string | google账号授权成功后返回的信息,是一个json串 |
result事例:
{"name":"掌掌","email":"zqkjjszc@gmail.com","family_name":"掌","sub":"115322977269159722415","picture":"https:\/\/lh3.googleusercontent.com\/a\/ACg8ocLy2zcKmAsgnfkPrfiRaBtmmUOLEZ-rCIYINK2r_kucaian7aDN=s96-c","given_name":"掌"}
其中,”picture”字段即为google账号头像url地址。
调用此接口后,sdk会在后台进行网络检测,将结果上报给运维(阿里云后台)。
如果参数中设置了显示结果窗口,则玩家能看到一个结果窗口,显示简略的检查结果。
注意:这是用来在网络不通或延时高时,提供的网络诊断工具,由项目产品决定如何使用。建议在登录界面或者其它因为网络访问失败而卡住的界面上增加一个“网络检测”按钮;用户点击按钮时调用这个接口。
<intent-filter><data android:scheme="ourpalm_package_name"/><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><category android:name="android.intent.category.BROWSABLE"/></intent-filter>
public void Ourpalm_NetworkDiagnosis(string checkTargetArray, string extParams, string 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”, 游戏是无感上传
接口调用:
String checkTargetArray = "[\n" +"{http_url: 'https://www.google.com/', http: '1', host: 'www.google.com'}"+"]";String extParams ="{"reason":"serverlist","serverId":"10001","userId":"0000011101"}";OurpalmSDKAgent.Ourpalm_NetworkDiagnosis(checkTargetArray, extParams, "0");
此接口用于发送游戏自定义日志,以及广告统计打点日志
函数原型
void Ourpalm_SendGameInfoLog(string logID, string logKey, string json);
函数原型
| 参数名 | 类型 | 用途 | 注解 |
|---|---|---|---|
| logID | string | 日志id | 由平台定义,游戏自定义为”1003” |
| logKey | string | 日志关键字 | 游戏自定义为”role-act” |
| json | string | 日志内容 | json格式字符串,Hashtable序列化而来。根据具体用途自定义包含哪些字段 |
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 | 自定义交互事件 |
注意事项
- 这些参数值和结构,由平台定义,研发需按平台要求的结构传。- logID和logKey是一一对应的,项目大多数都是使用1003日志。- 注意1,确保启动游戏的时候正常调用了PCSDK初始化方法后,再调用发日志接口;启动游戏时调用的PCSDK初始化方法有别于安装时调用的方法,无须设置 disable_sdk_act_log 这个参数。- 注意2,actId 为事件ID,只支持字母,数字,下划线命名,不支持中文。- 注意3,actName 为事件名称,支持中文。- 注意4,detail 为需要随本次发生事件一并记录的额外信息,可以是普通字符串,也可以是json字符串,不要包含竖线 | ,总长度不要超过 1000 个字符。
代码示例
//发送安装器打点日志-->开始安装Hashtable userInof = new Hashtable();userInof.Add("roleLevel", ""); //固定写死userInof.Add("roleVipLevel", ""); //固定写死userInof.Add("actId", "installer_filename"); //固定写死userInof.Add("actName", "安装包文件名"); //固定写死userInof.Add("detail", "xadf2ssd"); //传入真正的安装包文件名string json = MUJson.jsonEncode(userInof);OurpalmSDKAgent.Ourpalm_SendGameInfoLog("1003", "role-act", json);//发送游戏日志-->登陆场景加载成功Hashtable userInof = new Hashtable();userInof.Add("roleLevel", "0");userInof.Add("roleVipLevel", "0");userInof.Add("actId", "LoginSceneLoaded");userInof.Add("actName", "登陆场景加载成功");userInof.Add("detail", "begin");string json = MUJson.jsonEncode(userInof);OurpalmSDKAgent.Ourpalm_SendGameInfoLog("1003", "role-act", json);
此接口用于发送广告事件打点日志
函数原型
void Ourpalm_SendAnalyticsInfoLog(LPCTSTR logKey, LPCTSTR json);
函数原型
| 参数名 | 类型 | 用途 | 注解 |
|---|---|---|---|
| logKey | string | 日志关键字 | 由广告BI部门定义的广告事件key |
| json | string | 日志内容 | json格式字符串,Hashtable序列化而来。根据具体用途自定义包含哪些字段 |
注意事项
- 这些参数值和结构,由广告BI部门定义,研发需按要求的结构传。
代码示例
更多广告打点相关示例请参阅:
第三方广告平台通用接入说明
//注册日志(账号首次登陆该游戏,唯一不可重复)Hashtable logValue = new Hashtable();string json = MUJson.jsonEncode(userInof);OurpalmSDKAgent.Ourpalm_SendAnalyticsInfoLog("registration", json);//充值打点日志,必须要传price和currency两个参数,注意,需要传支付下单时对应的币种代码(如美元传"USD")和价格(以元为单位),另外,还可以添加一个可选参数表示当前订单是否是沙盒订单(如需使用,请提前联系平台对接人进行配置)//举例:充值0.99美元,需要事件参数Hashtable logValue = new Hashtable();logValue.Add("price", "0.99");logValue.Add("currency", "USD");logValue.Add("istest", "true");//这个参数可选,传true表示是沙盒订单,传false表示正式订单,传这个参数时需要联系平台对接人在dev后开启相关配置。string json = MUJson.jsonEncode(logValue);OurpalmSDKAgent.Ourpalm_SendAnalyticsInfoLog("purchase", json);
接入说明:
appsflyer支持在打点事件中添加游戏自定义属性,游戏可以在自定义广告打点事件中添加如下四个定义好的自定义属性:
uni_deviceId(设备ID)
uni_accountId(账号ID)
uni_roleId(角色ID)
gameLaunchIdentity(启动标识)
接口示例:
HashMap<String, Object> logValue = new HashMap<String, Object>();logValue.put("uni_deviceId", "test_uni_deviceId");logValue.put("uni_accountId", "test_uni_accountId");logValue.put("uni_roleId", "test_uni_roleId");logValue.put("gameLaunchIdentity", "test_gameLaunchIdentity");...string json = MUJson.jsonEncode(logValue);OurpalmSDKAgent.Ourpalm_SendAnalyticsInfoLog("custom1", json);
使用说明:
1、上面四个字段名是固定的,不能改,游戏可以选择其中几个传入,不是每个字段都需要传入,如果研发同学要新加字段,
需要提前联系技术平台,平台添加完成后才能二次打包测试。
2、所有想添加自定义属性的打点事件都需要参照上面的方法单独传入自定义字段。
string appsFlyerId = OurpalmSDKAgent.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官方文档:点击跳转
接口范例:
Hashtable map = new Hashtable();map.Add("inviteOneLink", "inviteOneLink");//广告同事提供map.Add("deep_link_value", "deep_link_value");//广告同事提供map.Add("deep_link_sub1", "deep_link_sub1");//广告同事提供map.Add("deep_link_sub2", "deep_link_sub2");//广告同事提供map.Add("af_sub1", "af_sub1");//广告同事提供map.Add("summer_sale", "summer_sale");//广告同事提供map.Add("mobile_share", "mobile_share");//广告同事提供string json = MUJson.jsonEncode(map);OurpalmSDKAgent.Ourpalm_Channel_Spreads("appsflyer_Link_url", json);注意事项: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 | 会立即返回结果 |
| getAdjustAdid | adjust_adid | 需要处理异步回调以获得更新的值 |
| getAppInstanceId | firebase的appInstanceId | 需要处理异步回调以获得更新的值 |
| getHuaweiOAID | (华为设备的)oaid | 需要处理异步回调以获得更新的值 |
| getAdvertisingId | google advertisingId | 需要处理异步回调以获得更新的值 |
| getBaseDeviceInfo | 基础设备信息集合(BaseDeviceInfo) | 会立即返回结果 |
| getBaseAppInfo | 基础产品信息集合(BaseAppInfo) | 会立即返回结果 |
代码示例
string id = OurpalmSDKAgent.Ourpalm_Channel_Spreads("getAdjustAdid");string id = OurpalmSDKAgent.Ourpalm_Channel_Spreads("getAppsFlyerID");string id = OurpalmSDKAgent.Ourpalm_Channel_Spreads("getAppInstanceId");OurpalmSDKAgent.Ourpalm_Channel_Spreads("getHuaweiOAID"); //总是通过回调方法返回结果string id = OurpalmSDKAgent.Ourpalm_Channel_Spreads("getAdvertisingId");string json = OurpalmSDKAgent.Ourpalm_Channel_Spreads("getBaseDeviceInfo");string json = OurpalmSDKAgent.Ourpalm_Channel_Spreads("getBaseAppInfo");
注意:如果所获取的信息无法同步返回,则会通过回调方式异步返回。
通过自定义接口回调Callback_Ourpalm_Channel_Spreads返回数据,根据功能id判断是哪个查询。
if (callback.GetValue("id") == "getAdjustAdid") {var result_id = callback.GetValue("result");}if (callback.GetValue("id") == "getAppsFlyerID") {var result_id = callback.GetValue("result");}if (callback.GetValue("id") == "getAppInstanceId") {var result_id = callback.GetValue("result");}if (callback.GetValue("id") == "getHuaweiOAID") {var result_id = callback.GetValue("result");}if (callback.GetValue("id") == "getAdvertisingId") {var result_id = callback.GetValue("result");}if (callback.GetValue("id") == "getBaseAppInfo") {var json = callback.GetValue("result");}if (callback.GetValue("id") == "getBaseDeviceInfo") {var json = callback.GetValue("result");}
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | 参见上面定义事例 |
| JsonParams.result | String | 回调结果字符串 |
json格式的字符串,包含信息如下表所列:
| 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 | google advertisingId,需要异步获取 |
json格式的字符串,包含信息如下表所列:
| id | 含义 | 备注 |
|---|---|---|
| app_id | 应用ID | 安卓appid和包名相同 iOS的appid为全数字的id |
游戏登录成功后调用本接口可以打开系统分享界面,给其它玩家分享邀请内容及邀请码,其它玩家可以通过分享app上的邀请链接拉起或安装游戏包。
注意:安卓游戏必须接入base sdk的onNewIntent 这个生命期接口。
OurpalmSDKAgent.Ourpalm_Channel_Spreads(id, jsonParam);
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:OpenInstall_sendShareInvite |
| jsonParam.inviteMsg | 必传 | String | 邀请内容 |
| jsonParam.inviteCode | 必传 | String | 邀请码 |
| 接口示例 |
OurpalmSDKAgent.Ourpalm_Channel_Spreads("OpenInstall_sendShareInvite","{'inviteMsg':'test openinstall invite', 'inviteCode':'testvalue'}");
其它玩家可以通过分享app上的邀请链接拉起或安装游戏包时,会收到回调。
| key | key-类型 | 意义 |
|---|---|---|
| id | string | OpenInstall_InviteData |
| JsonParam.type | string | (IOS可用)安装获取动态参数:”InstallParams”; 唤醒时获取动态参数:”WakeUpParams” |
| JsonParam.inviteCode | string | 邀请者的邀请码 |
分享文本或者链接内容到FB。
//Ourpalm_Channel_Spreads("share","THE KING OF FIGHTERS'98UM OL", "内容", "http://chs.98kof.game-bean.com/");OurpalmSDKAgent.Ourpalm_Share("{"platform":" facebook","shareType":" shareText","title":"test","content":"test","link":"http:\/\/chs.98kof.game-bean.com\/","iconUrl":""}");
| 参数 | 重要性 | 类型 | 描述 |
|---|---|---|---|
| JsonParam.platform | 必须 | String | 分享到哪里,本接口为”facebook” |
| JsonParam.shareType | 必须 | String | 分享类型,本接口为”shareText” |
| JsonParam.title | 必须 | String | 分享内容Title,可以为空字符串”” |
| JsonParam.content | 必须 | String | 分享内容,可以为空字符串”” |
| JsonParam.link | 必须 | String | 分享链接,分享到facebook时必传 |
| JsonParam.iconUrl | 可选 | String | 分享图标链接,参数可选 |
public void CallbackChannelSpreads(String id, String result) {if (id.equals("PhotoShare")) {// 分享功能结束if (result.equals("0")) {Toast.makeText(MainActivity.this, "分享成功", Toast.LENGTH_LONG).show();} else if (result.equals("1")) {Toast.makeText(MainActivity.this, "分享失败 错误", Toast.LENGTH_LONG).show();} else if (result.equals("2")) {Toast.makeText(MainActivity.this, "分享失败 用户取消", Toast.LENGTH_LONG).show();}}}
分享图片内容到FB。 使用此功能,用户设备上必须有FB客户端,不然分享失败。
/*** 分享功能** @param value1* share 分享功能固定参数* @param value2* 分享图片的存储路径,全路径*/OurpalmSDKAgent.Ourpalm_Channel_Spreads("PhotoShare",imagepath);
| 参数 | 重要性 | 类型 | 描述 |
|---|---|---|---|
| value1 | 必须 | String | 接口id。本接口为 PhotoShare |
| value2 | 必须 | String | 分享图片的本地存储全路径 |
public void Ourpalm_Spreads(String id, String... arg) {// TODO Auto-generated method stubif (id.equals("PhotoShare")) {// 分享功能结束if (arg[0].equals("0")) {Toast.makeText(MainActivity.this, "分享成功", Toast.LENGTH_LONG).show();} else if (arg[0].equals("1")) {Toast.makeText(MainActivity.this, "分享失败 错误", Toast.LENGTH_LONG).show();} else if (arg[0].equals("2")) {Toast.makeText(MainActivity.this, "分享失败 用户取消", Toast.LENGTH_LONG).show();}}}
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | 接口id 判断是那个接口返回的回调,本接口为:PhotoShare |
| arg[0] | String | 0 分享成功 1 分享失败,未知错误 2 分享失败,用户取消分享 |
用于获取Facebook好友列表内玩本游戏的用户列表。需要根据返回值内的数据,确定是否有上一页或者下一页,然后调用获取上一页下一页数据接口。
// 获取好友列表内,同样玩当前游戏的好友。OurpalmSDKAgent.Ourpalm_Channel_Spreads("FB_GetFriendList");
if(id.equals("FB_GetFriendList")){// 分享功能结束if (arg[0] != null) {// 获取成功try {JSONObject data = new JSONObject(json);mfrienddata = data.getJSONArray("data");for (int i = 0; i < mfrienddata.length(); i++) {JSONObject userdata =mfrienddata.getJSONObject(i);String name = userdata.getString("name");String id = userdata.getString("id");if (userdata.has("Ourpalm_ID")) {String ourid =userdata.getString("Ourpalm_ID");} else {// "没有掌趣ID";}}isnext = data.getBoolean("next"); // 是否有下一页isprevious = data.getBoolean("previous"); // 是否有上一页} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {// 获取失败}}
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | 接口id 判断是那个接口返回的回调,本接口为:FB_GetFriendList |
| arg[0] | String | 好友列表数据,Json 格式 |
{"data" : [{"id" : "1234567890","name" : "testdata","Ourpalm_ID" : "掌趣id","picture" : {"data" : {"is_silhouette" : false,"url" : ""}}}],"previous" : false,"next" : false}
| 参数 | 描述 |
|---|---|
| data | fb好友列表 |
| previous | true 有上一页数据 false 没有上一个数据 |
| next | true 有下一页数据 false 没有下一个数据 |
| data.id | 好友的fb账户id |
| data.name | 好友的fb账户昵称 |
| data.picture | 好友的头像相关数据 |
| data.Ourpalm_ID | 好友在掌趣的用户ID。 有可能取不到。因为用户可能只是授权,但是没有登录 |
获取好友列表的下一页数据,根据好友列表数据内的数据,判断是否需要调用。获取的列表是根据上一次获取的内容获取的。
比如:
程序上一次获取了获取游戏内好友列表,调用本接口,获取的是游戏内好友列表的下一页数据。
返回数据格式和获取好友列表的格式相同。
// 获取好友列表内,同样玩当前游戏的好友OurpalmSDKAgent.Ourpalm_Channel_Spreads("FB_GetFriendList_next");
回调id:FB_GetFriendList_next
回调数据格式通获取好友列表格式。
获取好友列表的上一页数据,根据好友列表数据内的数据,判断是否需要调用。获取的列表是根据上一次获取的内容获取的。
比如:
程序上一次获取了获取游戏内好友列表,调用本接口,获取的是游戏内好友列表的上一页数据。
返回数据格式和获取好友列表的格式相同。
// 获取好友列表内,同样玩当前游戏的好友OurpalmSDKAgent.Ourpalm_Channel_Spreads("FB_GetFriendList_previous");
回调id:FB_GetFriendList_previous
回调数据格式通获取好友列表格式。
给没有授权过本游戏的fb好友发送邀请信息,此接口将会调用起fb好友列表,需要用户选择好友发起邀请。 邀请成功以后会返回好友的真实用户ID。
/*** @param id* 接口id* @param Title* 邀请内容标题* @param Msg* 邀请内容*/OurpalmSDKAgent.Ourpalm_Channel_Spreads("Friend_Invitation", "邀请","小红对说“ 常来玩哦 ~。~ ”");
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | 接口id 本接口为:Friend_Invitation |
| arg[0] | String | 邀请内容标题 |
| arg[1] | String | 邀请内容 |
if (id.equals("Friend_Invitation")) {// 邀请功能结束if (arg[0].equals("0")) {String facebookid = arg[1];Toast.makeText(MainActivity.this, "邀请成功", Toast.LENGTH_LONG).show();} else if (arg[0].equals("1")) {Toast.makeText(MainActivity.this, "邀请失败 错误", Toast.LENGTH_LONG).show();} else if (arg[0].equals("2")) {Toast.makeText(MainActivity.this, "邀请失败 用户取消", Toast.LENGTH_LONG).show();}}
邀请成功的情况下arg[1] 为被邀请人真实的fbid
用户调用此接口后,FB链接将会断开,FB获取好友功能将不能使用。主要是
用于断开FB缓存的账号数据。
此功能并不能取消授权,只是相当于注销了本地FB账户的的登录。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("FB_Logout");
if (id.equals("FB_Logout")){// 断开成功}
分享文本或者链接内容到Twitter。
/***@param id* 接口id :twitter_share*@param msg* 分享到twitter内容*/OurpalmSDKAgent.Ourpalm_Channel_Spreads("twitter_share","分享的内容");
| 参数 | 重要性 | 描述 |
|---|---|---|
| id | 必须 | 接口id:twitter_share |
| msg | 必须 | 分享到twitter内容 |
OurpalmSDKAgent.Ourpalm_SetSpreadsCallBack(new Ourpalm_SpreadsCallBack() {@Overridepublic void Ourpalm_Spreads(String id, String... arg) {// TODO Auto-generated method stubif (id.equals("twitter_share")) {// 分享功能结束if (arg[0].equals("0")) {Toast.makeText(MainActivity.this, "分享成功", Toast.LENGTH_LONG).show();} else if (arg[0].equals("1")) {Toast.makeText(MainActivity.this, "分享失败 错误", Toast.LENGTH_LONG).show();} else if (arg[0].equals("2")) {Toast.makeText(MainActivity.this, "分享失败 用户取消", Toast.LENGTH_LONG).show();}}}}
| 参数 | 类型 | 描述 |
|---|---|---|
| id | String | 接口id 判断是那个接口返回的回调,本接口为:twitter_share |
| arg[0] | String | 0 分享成功 1 分享失败,未知错误 2 分享失败,用户取消分享 |
分享图片内容到Twitter。
/***@param id* 接口id :twitter_PhotoShare*@param msg* 分享图片的存储地址,全路径*/OurpalmSDKAgent.Ourpalm_Channel_Spreads("twitter_PhotoShare","分享图片的存储地址,全路径");
| 参数 | 重要性 | 描述 |
|---|---|---|
| id | 必须 | 接口id:twitter_PhotoShare |
| msg | 必须 | 分享图片的存储地址,全路径 |
OurpalmSDKAgent.Ourpalm_SetSpreadsCallBack(new Ourpalm_SpreadsCallBack() {@Overridepublic void Ourpalm_Spreads(String id, String... arg) {// TODO Auto-generated method stubif (id.equals("twitter_PhotoShare")) {// 分享功能结束if (arg[0].equals("0")) {Toast.makeText(MainActivity.this, "分享成功", Toast.LENGTH_LONG).show();} else if (arg[0].equals("1")) {Toast.makeText(MainActivity.this, "分享失败 错误", Toast.LENGTH_LONG).show();} else if (arg[0].equals("2")) {Toast.makeText(MainActivity.this, "分享失败 用户取消", Toast.LENGTH_LONG).show();}}}}
sdk支持使用admob显示广告,获得广告收入。
游戏调用此接口,可以显示广告。
OurpalmSDKAgent.Ourpalm_Channel_Spreads("ShowAdmobRewardedAd");
广告显示过程中,admob提供了多个阶段的回调事件,SDK会使用回调事件”Callback_AdmobRewardedAd”传给游戏。
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_AdmobRewardedAd” | 回调函数名 |
| jsonParams.adState | string | 广告显示阶段 |
| jsonParams.adDesc | string | 阶段描述(中文),仅用于联调 |
adState和adDesc的可选值有:
{"adState":"PreparedSuccess","adDesc":"广告准备成功"}{"adState":"PreparedFailed","adDesc":"广告准备失败"}{"adState":"Show","adDesc":"广告开始展示"}{"adState":"ShowFailed","adDesc":"广告播放失败"}{"adState":"Clicked","adDesc":"广告已被点击"}{"adState":"VideoAdCompleted","adDesc":"广告播放完毕"}{"adState":"Closed","adDesc":"广告已关闭"}
功能说明:
游客账号绑定账号密码
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_bindOurpalmAccount", "{\"accountName\":\"lugin09181\",\"pwd\":\"as123456\",\"confirmPwd\":\"as123456\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_bindOurpalmAccount |
| jsonParam.accountName | 必传 | String | 账号名称 |
| jsonParam.pwd | 必传 | String | 账号密码 |
| jsonParam.confirmPwd | 必传 | String | 账号确认密码 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_bindOurpalmAccount” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | “0” |
| jsonParams.desc | string | 绑定失败时,返回绑定失败的msg |
| jsonParams.bindType | string | 绑定类型,成功时才有此字段, “account” |
| jsonParams.bindPlatformJson | string | 此绑定方式可提供的额外数据,成功时才有此字段 |
绑定成功时,bindPlatformJson对应参数值,范例如下:
{\”name\”:\”lugin0920\”}
功能说明:
修改官网账号密码
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_modifyAccountPwd", "{\"accountName\":\"lugin09181\",\"oldPwd\":\"as123456\",\"newPwd\":\"as1234567\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_modifyAccountPwd |
| jsonParam.accountName | 必传 | String | 账号名称 |
| jsonParam.oldPwd | 必传 | String | 账号旧密码 |
| jsonParam.newPwd | 必传 | String | 账号修改后的新密码 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_modifyAccountPwd” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.desc | string | 密码修改失败时,返回失败的msg |
功能说明:
当用户忘记密码时,已绑定邮箱的官网账号,可以通过此接口重置密码,调用此接口前,必须先通过18.2.1 获取邮箱验证码接口 获取邮箱验证码。
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_resetAccountPwd", "{\"emailName\":\"liguangcai@ourpalm.com\",\"code\":\"123456\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_resetAccountPwd |
| jsonParam.emailName | 必传 | String | 已绑定的邮箱账号名 |
| jsonParam.code | 必传 | String | 18.2.1接口获取到邮箱验证码 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_resetAccountPwd” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.desc | string | 密码重置失败时,返回失败的msg |
功能说明:
当用户忘记密码时,已绑定邮箱的官网账号,可以通过此接口直接设置新密码,调用此接口前,必须先通过18.2.1 获取邮箱验证码接口获取邮箱验证码。
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_resetAccountNewPwd", "{\"emailName\":\"liguangcai@ourpalm.com\",\"code\":\"123456\",\"newPwd\":\"as123456789\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_resetAccountPwd |
| jsonParam.emailName | 必传 | String | 已绑定的邮箱账号名 |
| jsonParam.code | 必传 | String | 18.2.1接口获取到邮箱验证码 |
| jsonParam.newPwd | 必传 | String | 新密码 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_resetAccountNewPwd” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.desc | string | 密码重置失败时,返回失败的msg |
功能说明:
使用官网账号进行切换
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_switchOurpalmAccount", "{\"accountName\":\"lugin09181\",\"pwd\":\"as123456\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_switchOurpalmAccount |
| jsonParam.accountName | 必传 | String | 账号名称 |
| jsonParam.pwd | 必传 | String | 账号密码 |
回调接口:
同6.5 切换账号接口的回调”Callback_SwitchingAccount”,切换失败时,
jsonParams.desc对应切换失败的msg。
功能说明:
发送邮箱验证码
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_sendEmailCode", "{\"email\":\"liguangcai@ourpalm.com\",\"usage\":\"bind\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_sendEmailCode |
| jsonParam.email | 必传 | String | 邮箱名称 |
| jsonParam.usage | 必传 | String | 具体解释如下: |
usage 参数说明
| usage | 含义 |
|---|---|
| bind | 在绑定邮箱时获取邮箱验证码 |
| unbind | 在解绑邮箱时获取邮箱验证码 |
| resetAccountPwd | 在重置账号密码时获取邮箱验证码 |
| resetEmailPwd | 在重置邮箱密码时获取邮箱验证码 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_sendEmailCode” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.desc | string | 邮箱验证码发送失败时,返回失败的msg |
功能说明:
用户绑定邮箱账号,调用此接口前必须先调用获取邮箱验证码接口(18.2.1)获取邮箱验证码。
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_bindEmailAccount", "{\"emailName\":\"liguangcai@ourpalm.com\",\"pwd\":\"as123456\",\"code\":\"123456\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_bindEmailAccount |
| jsonParam.emailName | 必传 | String | 邮箱名称 |
| jsonParam.pwd | 必传 | String | 邮箱绑定密码 |
| jsonParam.code | 必传 | String | 邮箱验证码 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_bindEmailAccount” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | “0” |
| jsonParams.desc | string | 绑定失败时,返回绑定失败的msg |
| jsonParams.bindType | string | 绑定类型,成功时才有此字段, “email” |
| jsonParams.bindPlatformJson | string | 此绑定方式可提供的额外数据,成功时才有此字段 |
绑定成功时,bindPlatformJson对应参数值,范例如下:
{\”name\”:\”liguangcai@ourpalm.com\”}
功能说明:
用户解绑邮箱,调用此接口前必须先调用获取邮箱验证码接口(18.2.1)获取邮箱验证码。
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_unBindEmailAccount", "{\"emailName\":\"liguangcai@ourpalm.com\",\"code\":\"123456\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_unBindEmailAccount |
| jsonParam.emailName | 必传 | String | 已绑定的邮箱名称 |
| jsonParam.code | 必传 | String | 邮箱验证码 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_unBindEmailAccount” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.desc | string | 邮箱解绑失败时,返回失败的msg |
功能说明:
修改邮箱密码
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_modifyEmailPwd", "{\"emailName\":\"liguangcai@ourpalm.com\",\"oldPwd\":\"as123456\",\"newPwd\":\"as1234567\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_modifyEmailPwd |
| jsonParam.emailName | 必传 | String | 邮箱名称 |
| jsonParam.oldPwd | 必传 | String | 旧密码 |
| jsonParam.newPwd | 必传 | String | 新密码 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_modifyEmailPwd” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.desc | string | 邮箱修改密码失败时,返回失败的msg |
功能说明
用户忘记邮箱账号密码时,可通过此接口重置邮箱密码,
通过邮箱详情界面找回密码时,不需要输入邮箱验证,可直接通过已绑定的邮箱账号找回,此时参数code传空即可。在切换邮箱界面找回密码,必须先调用获取邮箱验证码接口(18.2.1)获取邮箱验证码,,此时参数code不能为空。
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_resetEmailPwd", "{\"emailName\":\"liguangcai@ourpalm.com\",\"code\":\"123456\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_resetEmailPwd |
| jsonParam.emailName | 必传 | String | 邮箱名称 |
| jsonParam.code | 必传 | String | 邮箱验证码 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_resetEmailPwd” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.desc | string | 邮箱找回密码失败时,返回失败的msg |
功能说明
用户忘记邮箱账号密码时,可以通过此接口直接设置新密码,调用此接口前,必须先通过18.2.1 获取邮箱验证码接口获取邮箱验证码。
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_resetEmailNewPwd", "{\"emailName\":\"liguangcai@ourpalm.com\",\"code\":\"123456\",\"newPwd\":\"as12345678\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_resetEmailPwd |
| jsonParam.emailName | 必传 | String | 邮箱名称 |
| jsonParam.code | 必传 | String | 邮箱验证码 |
| jsonParam.newPwd | 必传 | String | 新密码 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_resetEmailNewPwd” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.desc | string | 邮箱找回密码失败时,返回失败的msg |
功能说明:
使用邮箱账号进行切换
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_switchEmailAccount", "{\"emailName\":\"liguangcai@ourpalm.com\",\"pwd\":\"as123456\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_switchEmailAccount |
| jsonParam.emailName | 必传 | String | 邮箱名称 |
| jsonParam.pwd | 必传 | String | 邮箱登录密码 |
回调接口:
同6.5 切换账号接口的回调”Callback_SwitchingAccount”,切换失败时,
jsonParams.desc对应切换失败的msg。
功能说明:
绑定第三方账号,facebook, google, vk, twitter, apple, gamecenter。
其中参数accountType需要传入”facook”、”google”、”apple”、”gamecenter”、vk”或”twitter”中的一个。
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_bindThirdAccount", "{\"accountType\":\"google\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_bindThirdAccount |
| jsonParam.accountType | 必传 | String | “facook”、”google”、”apple”、”gamecenter”、vk”或”twitter”中的一个 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_bindThirdAccount” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.code | string | “0” |
| jsonParams.desc | string | 绑定失败时,返回绑定失败的msg |
| jsonParams.bindType | string | 绑定类型,成功时才有此字段, 可能的值:”facook”、”google”、”vk”或”twitter” |
| jsonParams.bindPlatformJson | string | 此绑定方式可提供的额外数据,成功时才有此字段 |
绑定成功时,bindPlatformJson对应参数值,范例如下:
{\"sub\":\"115322977269159722415\",\"email_verified\":\"true\",\"kid\":\"b2620d5e7f132b52afe8875cdf3776c064249d04\",\"iss\":\"https:\\\/\\\/accounts.google.com\",\"typ\":\"JWT\",\"given_name\":\"掌\",\"picture\":\"https:\\\/\\\/lh3.googleusercontent.com\\\/a\\\/ACg8ocLy2zcKmAsgnfkPrfiRaBtmmUOLEZ-rCIYINK2r_kucaian7aDN=s96-c\",\"aud\":\"318433458372-ddf34vrsqh27bin4m5h77bl5otorejq3.apps.googleusercontent.com\",\"azp\":\"318433458372-vlpj7nr5lrbqoafchirr6ta0dri086qp.apps.googleusercontent.com\",\"name\":\"掌掌\",\"exp\":\"1726826514\",\"family_name\":\"掌\",\"iat\":\"1726822914\",\"alg\":\"RS256\",\"email\":\"zqkjjszc@gmail.com\"}
功能说明:
解绑第三方账号,facebook, google, vk, twitter, apple, gamecenter。
注意:只有已绑定的第三方账号才能调用此接口。
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_unBindThirdAccount", "{\"accountType\":\"google\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_bindThirdAccount |
| jsonParam.accountType | 必传 | String | “facook”、”google”、”apple”、”gamecenter”、vk”或”twitter”中的一个 |
回调接口:
| key | key-类型 | |
|---|---|---|
| MethodName | “Callback_unBindThirdAccount” | 回调函数名 |
| jsonParams.success | string | 成功:”1”,失败:”0” |
| jsonParams.unBindType | string | “facook”、”google”、”apple”、”gamecenter”、vk”或”twitter”中的一个 |
| jsonParams.desc | string | 第三方账号解绑失败时,返回失败的msg |
功能说明:
切换第三方账号,facebook, google, vk, twitter, apple, gamecenter。
接口示例:
OurpalmSDKAgent.Ourpalm_Channel_Spreads("API_switchThirdAccount", "{\"accountType\":\"google\"}");
参数说明:
| 参数名称 | 重要性 | 类型 | 说明 |
|---|---|---|---|
| id | 必传 | String | 接口id 本接口为:API_bindThirdAccount |
| jsonParam.accountType | 必传 | String | “facook”、”google”、”apple”、”gamecenter”、vk”或”twitter”中的一个 |
回调接口:
同6.5 切换账号接口的回调”Callback_SwitchingAccount”,切换失败时,
jsonParams.desc对应切换失败的msg。
| 状态码 | 说明 |
|---|---|
| -1 | 未知错误 |
| -2 | SDK联网URL错误 |
| -3 | 第三方登陆验证返回失败 |
| -4 | 支付失败,未知错误 |
| -5 | 无网络 |
| 0 | 初始化失败 |
| 10 | 登陆错误,未知错误 |
| 11 | 登陆取消 |
| 12 | 登陆数据错误,账号或密码为空 |
| 13 | 登陆验证失败 |
| 14 | 登陆验证参数错误 |
| 15 | 获取系统用户名错误 |
| 16 | 单机隐式登录失败 |
| 20 | 注册失败,未知错误 |
| 21 | 注册失败,验证错误 |
| 22 | 注册数据错误,账号或密码为空 |
| 30 | 修改密码错误 |
| 31 | 修改密码错误,用户id或者密码为null或者格式错误 |
| 32 | 修改密码错误,参数错误 |
| 33 | 找回密码错误,参数错误 |
| 40 | 绑定用户信息错误 |
| 41 | 绑定用户信息错误,验证错误 |
| 42 | 绑定用户信息错误,参数错误 |
| 43 | 接口所需参数传递为空或者格式不正确 |
| 100 | 支付相关参数错误 |
| 101 | 支付成功 |
| 102 | 支付失败 |
| 103 | 支付取消 |
| 104 | 下单成功 |
| 105 | 下单失败 |
| 106 | 解析支付协议失败 |
| 107 | 当前支付方式不可用 |
| 205 | 账号封停 |
| 300 | 官网支付webview页面报错 |
| 状态码 | 说明 |
|---|---|
| 21134 | roleId格式不正确 |
| 21137 | gameServerId格式不正确 |
| 21143 | gameServerId在平台没有启用 |
| 21146 | 请求报文头格式不正确 |
| 21147 | 手机平台ID格式不正确 |
| 21148 | 设备名称格式不正确 |
| 21149 | 设备系统版本号格式不正确 |
| 21150 | 设备分辨率格式不正确 |
| 21151 | 设备UDID格式不正确 |
| 21152 | 运营商格式不正确 |
| 21153 | 设备厂商格式不正确 |
| 21185 | 激活码不得为空 |
| 21186 | 发货失败 |
| 21187 | 激活码不存在或不可用 |
| 21188 | 激活码已过期 |
| 21189 | 激活码未领取 |
| 21190 | 激活码已使用 |
| 21191 | 该用户已兑换过激活码 |
| 21192 | 该设备已兑换过激活码 |
| 21193 | 活动暂停中 |
| 21194 | 激活码已经用完 |
| 21195 | 网络异常 |
| 21196 | 服务内部错误 |
| 21197 | 传入的激活码有错误 |
| 21198 | 传入的礼包ID有错误 |
| 21199 | 用户未登录 |
| 21200 | 兑换超过用户最大限制 |
| 21201 | 游戏产品有误 |
| 21202 | 策略关系不存在 |
| 21203 | 联运渠道或推广渠道有误 |
| 21204 | 推广渠道有误 |
| 21205 | 机型组有误 |
| 21206 | 语言有误 |
| 21207 | 逻辑服策略不存在 |
| 21208 | 逻辑服有误 |
| 21227 | 用户每天兑换次数超出上限 |
| 21228 | 用户每周兑换次数超出上限 |
| 21229 | 用户每月兑换次数超出上限 |
| 23157 | 礼包码未到生效时间 |
| 23158 | 失败 |
在MIS中的货币有总共十种,货币ID是没有限定位数的纯自增值
| 货币ID | 货币名 | 币单位 |
|---|---|---|
| 1 | 人民币 | 分 |
| 2 | 美元 | 美分 |
| 3 | 日元 | 円 |
| 4 | 港币 | 分 |
| 5 | 英镑 | 便士 |
| 6 | 新加坡币 | 分 |
| 7 | 越南盾 | 盾 |
| 8 | 台币 | 元 |
| 9 | 韩元 | 分 |
| 10 | 泰铢 | 萨当 |
| 14 | 马来西亚林令吉 | 分 |
| 17 | 菲律宾币 | 仙 |
| 19 | 印尼卢比 | 卢比 |
| 21 | 柬埔寨瑞尔 | 瑞尔 |
| 122 | 缅甸元 | 分 |