Unreal 4接入文档

QuickSDK | 2018-10-16 | 资讯动态

1.开发环境搭建


1.1.开发工具


不同版本的unreal engine有对应的visual studio版本以及windows sdk,安装virsual stido时需要安装编程语言vc++相应组件,安装过程可参考https://docs.unrealengine.com/latest/CHN/GettingStarted/index.html


当前文档支持的环境为unreal engine4.16.3,virsual studio2015,windows sdk8.1。


1.2.安装


安装CodeWorksforAndroid,以当前开发环境为例,打开UE4.16.3的安装目录:



安装UE_4.16EngineExtrasAndroidWorksWin64CodeWorksforAndroid-1R6u1-windows.exe。选择安装路径:



安装过程参考:https://docs.unrealengine.com/latest/CHN/Platforms/Android/Reference/index.html 


注意:UE4使用的是有专有的android sdk,建议删除之前配置的andorid sdk系统和用户环境变量。


安装过程参考:https://docs.unrealengine.com/latest/CHN/Platforms/Android/Reference/index.html


注意:UE4使用的是有专有的android sdk,建议删除之前配置的andorid sdk系统和用户环境变量。


2.接入流程


2.1.项目配置


导入资源

提供的demo目录结构如下


打开UE_4.16EngineBuildAndroidJava显示如下:


将demo中的libs复制到UE_4.16EngineBuildAndroidJavalibs下。

将demo 的assets复制到UE_4.16EngineBuildAndroidJava路径下。

将demo中res下文件夹下的文件复制到UE_4.16EngineBuildAndroidJavares对应的目录中。

打开UE_4.16EngineSourceProgramsUnrealBuildToolAndroid目录:



把UEDeployAndroid.cs 替换UE_4.16EngineSourceProgramsUnrealBuildToolAndroidUEDeployAndroid.cs。

导入C++文件

打开项目,项目结构如下:


复制demo中c++文件至Unreal Projectsdemo2dSourcedemo2d,右键项目添加现有项,将QuickSDK.h、QuickSDK.cpp、QuickSDKAndroid.h、QuickSDKAndroid.cpp导入vs2015中:


配置ndk环境,包含目录配置为NVPACKandroid-ndk-r12bplatformsandroid-24arch-armusrinclude:



打包配置

打开编辑>项目设置>平台>Android软件开发工具包



安装AndroidWorks的时候默认配置了用户环境变量,因而此处不需要配置,如果用户环境变量发生变化,或打包失败,请在此处配置变量,打开NVPACK目录:


Location of Android SDK选项配置为NVPACKandroid-sdk-windows

Location of Android NDK:选项配置为 NVPACKandroid-ndk-r12b

Location of Ant选项配置为NVPACKapache-ant-1.8.2

Location of JAVA选项配置为NVPACKjdk1.8.0_77

打开编辑>项目设置>平台>Android

配置包名、横竖屏


配置签名文件


配置应用图标


配置应用闪屏


打开窗口>项目启动程序


自定义启动文件


点击继续


点击继续


点击Create Profile


等待打包完成后,打开Unreal Projectsdemo2dApp1.0Android_ETC1路径


3.接口接入


3.1.设置初始化通知接口(必接)


接口:void setInitNotifier(InitNotifier *notifier);

功能:设置获取到登录通知后应做的处理

案例:

class InitNotifierImpl:public InitNotifier{    
  void onInitSuccess(){    
      //初始化成功        
      }        
  void onInitFailed(){    
      //初始化失败        
      }
  }
QuickSDK::setLogoutNotifier(new setInitNotifier());



3.2.设置登录通知接口(必接)


接口:void setLoginNotifier(LoginNotifier *notifier);

功能:设置获取到登录通知后应做的处理

案例:

class LoginNotifierImpl : public LoginNotifier{

  void onLoginSuccess(const char* uid, const char* username, const char* token){    

      //登录成功,获取到用户信息userInfo    
      //通过userInfo中的UID、token做服务器登录认证        
      }
  void LoginCancel(){    
      //登录取消        
      }
  Void LoginFailed(){    
      //登录失败      
      }
  }
QuickSDK::setLogoutNotifier(new LoginNotifierImpl());



接入要求:

1)启动游戏后,在登录界面中获取到登录成功的通知,跳转到选择服务器界面;

2)游戏没有按钮来调用login的接口,获取到登录失败和登录取消的通知后,应再次调用登录的功能;

3)不同渠道可能返回相同的UID,游戏应使用渠道ID+UID作为用户的唯一标识。渠道ID通过“QuickSDK::getChannelType()”获取。


3.3.设置注销通知接口(必接)


接口:void setLogoutNotifier(LogoutNotifier *notifier);

功能:设置获取到注销通知后应做的处理

案例:


class  LogoutNotifierImpl :public LogoutNotifier {    
  void onLogoutSuccess(){    
      //注销成功        
      }    
  Void onLogoutFailed(){    
      //注销失败不做处理      
      }
  }
QuickSDK::setLogoutNotifier(new LogoutNotifierImpl());


接入要求:获取到注销成功的通知,游戏应回到登录界面。


3.4.设置切换账号通知接口(必接)


接口:void setSwitchAccountNotifier(SwitchAccountNotifier *notifier);

功能:设置用户切换账号结果回调通知的相关处理

案例:

class SwitchAccountNotifierImpl : public SwitchAccountNotifier{
  void onSwitchAccountSuccess(const char* uid ,const char* username,const char* token){    
      //切换账号成功,通过userInfo中的uid、token做服务器登录认证        
      }
  Void onSwitchAccountFailed(){    
      //切换账号失败        
      }
  Void onSwitchAccountCancel(){    
      //切换账号取消        
      }
  }
QuickSDK::setWitchAccountNotifier(new SwitchAccountNotifierImpl());



接入要求:在游戏界面中,获取到切换账号成功的通知,游戏使用新的用户信息,回到进入游戏的界面。(针对渠道SDK在游戏界面中通过悬浮框进行账号的切换)。


3.5.设置支付通知接口(必接)


接口:void setPayNotifier(PayNotifier *notifier);

功能:设置获取到支付通知后应做的处理

案例:

class PayNotifierImpl: public PayNotifier {
  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::setPayNotifierImpl(new Pay 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渠道参数,设置好友关系列表

格式请参考:http://open.quicksdk.net/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渠道上传角色信息的具体说明,请参考:http://open.quicksdk.net/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();

退出(必接)

接口:void exit();

功能:渠道SDK退出,游戏做退出逻辑时,先通过channelHasExitDialog接口判断渠道是否有退出框,如果渠道有退出框,直接调用QuickSDK的exit接口;如果渠道没有退出框,则调用游戏自身的退出框,退出框点击“确定”后,调用QuickSDK的exit接口。

//判断渠道是否有退出框
bool b = QuickSDK::channelHasExitDialog();    
  if (b) {        
      QuickSDK::exit();    
  } else {        
      //创建游戏的退出框,点击确定后,调用QuickSDK::exit();    
  }


3.11.其他接口


判断渠道是否有退出框

bool channelHasExitDialog();

判断渠道是否支持该功能

bool isFunctionTypeSupported(FuncType funcType);

调用指定功能

bool callFunction(FuncType funcType);

获取渠道号

int getChannelType();

获取额外参数

const char* getConfigValue(const char* key);


商务合作

李先生:13880511661

QQ:48157910

市场合作

郭女士:18349260870

QQ:1077535763

技术支持

孙女士:13551010407

QQ:1799614139

官方技术交流群

QQ群:698731538