更新日期 2023-07-21Cocos2d-x(Android)接入文档
1.接入前项目检查
根据以往游戏接入后出现的各种问题,QuickSDK对游戏项目做以下几点要求:
· AndroidManifest.xml中android:targetSdkVersion="26" (关于一些应用市场对Android应用API(targetSdkVersion)最低要求的提示)
解决渠道sdk不兼容android 5.0的问题
· 如果androidManifest.xml有installLocation选项时,参数设置为auto
解决apk出现无法安装的问题
· AndroidManifest.xml中的Activity需要进行如下配置
android:configChanges="keyboardHidden|orientation|screenSize"
防止游戏与渠道sdk发生横竖屏切换出现问题
· 为Activity添加横竖屏设置
根据游戏的横竖屏,将activity做横竖屏设置
android:screenOrientation="sensorLandscape" android:screenOrientation="sensorPortrait"
或者
android:screenOrientation="landscape" android:screenOrientation="portrait"
· AndroidManifest.xml中的Activity等组件路径为完整路径
2.Android项目修改
2.1 添加资源(必接)
将cocos_android文件夹下的文件拷贝到项目对应的文件中。
2.2 添加权限(必接)
Androidmanifest.xml中添加权限
2.3 修改Application(必接)
项目的Application继承QuickSdkApplication,新建Application时,修改AndroidManifest.xml中Application节点的name属性值。
2.4 添加闪屏(必接)
2.4.1 新建游戏闪屏Activity(必接)
新建游戏闪屏Activity,继承自QuickSdkSplashActivity
public class SplashActivity extends QuickSdkSplashActivity { @Override public int getBackgroundColor() { return Color.WHITE; } @Override public void onSplashStop() { //闪屏结束后,跳转到游戏界面 Intent intent = new Intent(this, MainActivity.class); startActivity(intent); this.finish(); } }
2.4.2 将闪屏Activity添加到AndroidManifest.xml中(必接)
android:name="*.*.*.SplashActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="landscape" >
说明:
android:name属性,其值为游戏自定义的闪屏Activity全路径
android:screenOrientation属性,其值根据游戏需求决定是横屏还是竖屏
2.5 继承Activity(必接)
游戏继承Cocos2dxActivity的Activity改为继承QKCocos2dxActivity,并实现initSdk方法,对QuickSDK进行初始化。
案例:
public class MainActivity extends QKCocos2dxActivity { @Override public void initSdk(Activity activity) { Sdk.getInstance().init(this, "88049844578484520615487574815873", "82414864"); } }
初始化所需的参数由QuickSDK提供。
2.6 源码拷贝(必接)
将QuickSDK源码导入到游戏项目中
2.7 修改Android.mk(必接)
修改jni/Android.mk文件,配置添加的源码
3.接口接入
3.1 设置初始化(必接)
接口:void setInitNotifier(InitNotifier *notifier);
功能:设置获取到登录通知后应做的处理
案例:
class InitNotifierImpl: public InitNotifier { void onInitSuccess() { //初始化成功 } void onInitFailed() { //初始化失败 } }; QuickSDK::setInitNotifier(new InitNotifierImpl());
3.2 设置登录(必接)
接口:void setLoginNotifier(LoginNotifier *notifier);
功能:设置获取到登录通知后应做的处理
案例:
class LoginNotifierImpl: public LoginNotifier { public:void onLoginSuccess(const char *uid, const char *userName, const char *token) { //登录成功,获取到用户信息userInfo //通过userInfo中的UID、token做服务器登录认证 } void onLoginCancel() { //登录取消 } void onLoginFailed() { //登录失败 } }; QuickSDK::setLoginNotifier(new LoginNotifierImpl());
接入要求:
1)启动游戏后,在登录界面中获取到登录成功的通知,跳转到选择服务器界面;
2)游戏没有按钮来调用login的接口,获取到登录失败和登录取消的通知后,应再次调用登录的功能;
3)不同渠道可能返回相同的UID,游戏应使用渠道ID+UID作为用户的唯一标识。渠道ID通过“QuickSDK::getChannelType()”获取。
3.3 设置注销(必接)
接口:void setLogoutNotifier(LogoutNotifier *notifier);
功能:设置获取到注销通知后应做的处理
案例:
class LogoutNotifierImpl: public LogoutNotifier { public:void onLogoutSuccess() { //注销成功 } void onLogoutFailed(){ //注销失败不做处理 } }; QuickSDK::setLogoutNotifier(new LogoutNotifierImpl());
接入要求:获取到注销成功的通知,游戏应回到登录界面。
3.4 设置切换账号(必接)
接口:void setSwitchAccountNotifier(SwitchAccountNotifier *notifier);
功能:设置用户切换账号结果回调通知的相关处理
案例:
class SwitchAccountNotifierImpl: public SwitchAccountNotifier { public:void onSwitchAccountSuccess(const char *uid, const char *userName, const char *token) { //切换账号成功,通过userInfo中的uid、token做服务器登录认证 } void onSwitchAccountFailed(){ //切换账号失败 } void onSwitchAccountCancel(){ //切换账号取消 } }; QuickSDK::setSwitchAccountNotifier(new SwitchAccountNotifierImpl());
接入要求:在游戏界面中,获取到切换账号成功的通知,游戏使用新的用户信息,回到进入游戏的界面。(针对渠道SDK在游戏界面中通过悬浮框进行账号的切换)。
3.5 设置支付(必接)
接口:void setPayNotifier(PayNotifier *notifier);
设置获取到支付通知后应做的处理
案例:
class PayNotifierImpl: public PayNotifier { public:void onPaySuccess(const char *sdkOrderID, const char *cpOrderID, const char *extrasParams) { //支付成功 //sdkOrderID:quick订单号 cpOrderID:游戏订单号 } void onPayCancel(const char *sdkOrderID, const char *cpOrderID) { //支付取消 } void onPayFailed(const char *sdkOrderID, const char *cpOrderID) { //支付失败 } }; QuickSDK::setPayNotifier(new PayNotifierImpl());
3.6 设置退出(必接)
接口:void setExitNotifier(ExitNotifier *notifier);
设置获取到退出通知后应做的处理
案例:
class ExitNotifierImpl: public ExitNotifier { public:void onExitSuccess(){ //退出成功 } void onExitFailed() { //退出失败,不做处理 } }; QuickSDK::setExitNotifier(new ExitNotifierImpl());
接入要求:最后的退出(activity.finish)由QuickSDK完成,游戏只需做其他的处理。
3.7 登录账号(必接)
接口:void login();
功能:调用渠道SDK登录
案例:QuickSDK::login();
接入要求:进入到登录界面时自动调用login接口。
3.8 上传角色信息(必接)
接口:void updateRoleInfoWith(GameRoleInfo gameRoleInfo, bool createRole);
功能:向渠道SDK上传角色信息
案例:
struct GameRoleInfo gameRoleInfo; gameRoleInfo.gameRoleBalance = "6000"; gameRoleInfo.gameRoleID = "100"; gameRoleInfo.gameRoleLevel = "1"; gameRoleInfo.gameRoleName = "lalala"; gameRoleInfo.partyName = "Justice League"; gameRoleInfo.serverName = "ksnServer"; gameRoleInfo.serverID = "1"; gameRoleInfo.vipLevel = "11"; gameRoleInfo.roleCreateTime = "1473141432"; //UC,当乐与1881渠道必传,值为10位数时间戳 gameRoleInfo.partyId = "1100"; //360渠道参数,设置帮派id,必须为整型字符串 gameRoleInfo.gameRoleGender = "男"; //360渠道参数 gameRoleInfo.gameRolePower = "38"; //360渠道参数,设置角色战力,必须为整型字符串 gameRoleInfo.partyRoleId = "11"; //360渠道参数,设置角色在帮派中的id gameRoleInfo.partyRoleName = "帮主"; //360渠道参数,设置角色在帮派中的名称 gameRoleInfo.professionId = "38"; //360渠道参数,设置角色职业id,必须为整型字符串 gameRoleInfo.profession = "法师"; //360渠道参数,设置角色职业名称 gameRoleInfo.friendlist = "无"; //360渠道参数,设置好友关系列表,格式请参考:https://quicksdkconsole.game101.cn/help/detail/aid/190 //创建角色 QuickSDK::updateRoleInfoWith(gameRoleInfo, true); //进入游戏及角色升级 QuickSDK::updateRoleInfoWith(gameRoleInfo, false);
GameRoleInfo
字段 |
类型 | 说明 |
serverID |
String |
服务器ID(数字字符串) |
serverName |
String |
服务器名称 |
gameRoleName |
String |
角色名称 |
gameRoleID |
String |
角色ID |
gameRoleBalance |
String |
角色用户余额 |
vipLevel |
String |
VIP等级 |
gameRoleLevel |
String |
角色用户等级 |
partyName |
String |
公会社团 |
roleCreateTime |
String |
角色创建时间(10位数的时间戳) |
partyId |
String |
帮派id |
gameRoleGender |
String |
角色性别 |
gameRolePower |
String |
角色战力 |
partyRoleId |
String |
角色在帮派中的id |
partyRoleName |
String |
角色在帮派中的名称 |
professionId |
String |
角色职业id |
profession |
String |
角色职业名称 |
friendlist |
String |
好友关系列表 |
接入要求:
1)在创建游戏角色、进入游戏和角色升级3个地方调用此接口,当创建角色时createRole值为true,其他两种情况为false;
2)GameRoleInfo所有字段均不能传null,游戏没有的字段传一个默认值或空字符串;
3)roleCreateTime字段,仅UC与1881渠道必须传此参数,其它渠道不用传,值为10位数的时间戳;
4)partyId,gameRoleGender,gameRolePower,partyRoleId,partyRoleName,professionId,profession,friendlist这八个字段,仅360渠道需要传(只传游戏有的字段),其它渠道不用传;
5)关于360渠道上传角色信息的具体说明,请参考:https://quicksdkconsole.game101.cn/help/detail/aid/190
3.9 定额支付(必接)
接口:void pay(OrderInfo orderInfo, GameRoleInfo gameRoleInfo);
功能:调用渠道SDK支付
案例:
struct OrderInfo orderInfo; orderInfo.amount = 3; orderInfo.count = 30; orderInfo.cpOrderID = "201505131613001"; orderInfo.extrasParams = "nothing"; orderInfo.goodsID = "001"; orderInfo.goodsName = "Diamond"; struct GameRoleInfo gameRoleInfo; gameRoleInfo.gameRoleBalance = "6000"; gameRoleInfo.gameRoleID = "100"; gameRoleInfo.gameRoleLevel = "1"; gameRoleInfo.gameRoleName = "lalala"; gameRoleInfo.partyName = "Justice League"; gameRoleInfo.serverName = "ksnServer"; gameRoleInfo.serverID = "1"; gameRoleInfo.vipLevel = "11"; QuickSDK::pay(orderInfo, gameRoleInfo);
OrderInfo
字段 |
类型 | 说明 |
goodsID |
String | 产品ID,用来识别购买的产品 |
goodsName |
String |
产品名称 |
cpOrderID |
String |
产品订单号(游戏方的订单号) |
count |
int | 游戏币数量 |
amount |
double | 总金额(元) |
extrasParams |
String |
透传参数 |
为了兼容各个渠道商品名称能够统一显示,订单应以如下案例的形式传入:
案例1: 案例2:
amount:6.0 amount:10.0
count:60 count:1
goodsName:元宝 goodsName:月卡
接入要求:
· GoodsName产品名称以“月卡”、“钻石”、“元宝”的形式传入,不带数量;
· 其中OrderInfo中Count字段表示游戏币数量。
· OrderInfo,GameRoleInfo所有字段均不能传null,游戏没有的字段传一个默认值或空字符。
3.10 注销账号(必接)
接口:void logout();
功能:渠道SDK注销
案例:QuickSDK::logout();
3.11 退出(必接)
接口:void exit();
功能:渠道SDK退出,游戏做退出逻辑时,先通过channelHasExitDialog接口判断渠道是否有退出框,如果渠道有退出框,直接调用QuickSDK的exit接口;如果渠道没有退出框,则调用游戏自身的退出框,退出框点击“确定”后,调用QuickSDK的exit接口。
案例:
//判断渠道是否有退出框 bool b = QuickSDK::channelHasExitDialog(); if (b) { QuickSDK::exit(); } else { //创建游戏的退出框,点击确定后,调用QuickSDK::exit(); }
3.12 其他接口
判断渠道是否有退出框
bool channelHasExitDialog();
判断渠道是否支持该功能
bool isFunctionTypeSupported(FuncType funcType);
调用指定功能
bool callFunction(FuncType funcType);
获取渠道号
int getChannelType();
获取额外参数
const char* getConfigValue(const char* key);
4.配置自定义参数
当游戏需要设置渠道相关的参数时。可以通过Quick后台添加自定义参数,在渠道列表中配置对应的值,最后通过QuickSDK::getConfigValue (const char* key)可以获取到该值。