更新日期:2024-10-23Unity3D接入文档
请先到"下载中心",下载“QuickSDK For Unity 3D”版本的SDK包。将其中的QuickSDKForUnity.unitypackage文件导入到Unity工程里面(如果无法导入,请再次确认文件是放置于非中文路径下的),如下图所示:
注: 调用QuickSDK.cs类的接口,并实现其回调方法
需要先添加quicksdk的命名空间(using quicksdk;),并通过 QuickSDK.getInstance( ) 方法获取QuickSDK类的实例
1.2.1. 设置监听器(必接)
接口:void setListener(QuickSDKListener quickSDKListener )
案例:调用QuickSDK.getInstance().setListener函数,其参数传入实例化的QuickSDKListener类对象。setListener函数请尽可能早的设置,便于监听回调。
脚本需要实现的回调请参考以下代码:
public class EventHandle : QuickSDKListener { void Start () { QuickSDK.getInstance().setListener (this); } public override void onInitSuccess(){ //初始化成功的回调 } public override void onInitFailed(ErrorMsg errMsg){ //初始化失败的回调 } public override void onLoginSuccess (UserInfo userInfo){ //登录成功的回调 } public override void onLoginFailed (ErrorMsg errMsg){ //登录失败的回调 //如果游戏没有登录按钮,应在这里再次调用登录接口 } public override void onSwitchAccountSuccess (UserInfo userInfo){ //切换账号成功的回调 //一些渠道在悬浮框有切换账号的功能,此回调即切换成功后的回调。游戏应清除当前的游戏角色信息。在切换账号成功后回到选择服务器界面,请不要再次调用登录接口。 } public override void onLogoutSuccess (){ //注销成功的回调 //游戏应该清除当前角色信息,回到登陆界面,并自动调用一次登录接口 } public override void onPaySuccess (PayResult payResult){ //支付成功的回调 //一些渠道支付成功的通知并不准确,因此客户端的通知仅供参考,游戏发货请以服务端通知为准,不能以客户端的通知为准 } public override void onPayCancel (PayResult payResult){ //支付取消的回调 } public override void onPayFailed (PayResult payResult){ //支付失败的回调 } public override void onExitSuccess (){ //SDK退出成功的回调 //在此处调用QuickSDK.getInstance().exitGame()函数即可实现退出游戏,杀进程。为避免与渠道发生冲突,请不要使用Application.Quit()函数 } }
1.2.2. 初始化(必接)
接口:void init();
功能:调用渠道SDK的初始化
案例:QuickSDK.getInstance().init();
1.2.3. 登录(必接)
接口:void login();
功能:调用渠道SDK的登录
案例:QuickSDK.getInstance().login();
1.2.4. 上传角色信息(必接)
注:需要在创建角色,进入游戏,角色升级的时候分别调用上传角色信息的接口
1.2.4.1. 创建角色时上传
接口:void createRole(GameRoleInfo gameRoleInfo);
功能:创建角色时向渠道SDK上传角色信息
案例:
GameRoleInfo gameRoleInfo = new GameRoleInfo(); gameRoleInfo.gameRoleBalance = "0"; gameRoleInfo.gameRoleID = "000001"; gameRoleInfo.gameRoleLevel = "1"; gameRoleInfo.gameRoleName = "钱多多"; gameRoleInfo.partyName = "同济会"; gameRoleInfo.serverID = "1"; gameRoleInfo.serverName = "火星服务器"; gameRoleInfo.vipLevel = "1"; gameRoleInfo.roleCreateTime = "roleCreateTime";//值为10位数时间戳 gameRoleInfo.gameRoleGender = "男"; gameRoleInfo.gameRolePower ="38";//设置角色战力,必须为整型字符串 gameRoleInfo.partyId ="1100";//设置帮派id,必须为整型字符串 gameRoleInfo.professionId = "11";//设置角色职业id,必须为整型字符串 gameRoleInfo.profession = "法师";//设置角色职业名称 gameRoleInfo.partyRoleId = "1";//设置角色在帮派中的id gameRoleInfo.partyRoleName = "帮主"; //设置角色在帮派中的名称 gameRoleInfo.friendlist = "无";//设置好友关系列表,格式请参考:http://open.quicksdk.net/help/detail/aid/190 QuickSDK.getInstance ().createRole(gameRoleInfo);//创建角色
1.2.4.2. 进入游戏时上传
接口:void enterGame(GameRoleInfo gameRoleInfo);
功能:登录完成之后,进入游戏时向渠道SDK上传角色信息
案例:QuickSDK.getInstance().enterGame(gameRoleInfo);
1.2.4.3. 角色升级时上传
接口:void updateRole(GameRoleInfo gameRoleInfo);
功能:角色升级时向渠道SDK上传角色信息
案例:QuickSDK.getInstance().updateRole(gameRoleInfo);
GameRoleInfo
字段 |
类型 |
说明 |
serverID |
String |
服务器ID(值为数字字符串) |
serverName |
String |
服务器名称 |
gameRoleName |
String |
角色名称 |
gameRoleID |
String |
角色ID |
gameRoleBalance |
String |
角色用户余额 |
vipLevel |
String |
角色用户余额VIP等级(值为数字字符串) |
gameRoleLevel |
String |
角色用户等级(值为数字字符串) |
partyName |
String |
公会社团 |
roleCreateTime |
String |
角色创建时间(传10位数时间戳,如要使用禁止新角色进入游戏的功能,此值必须传对) |
gameRoleGender |
String |
角色性别 |
gameRolePower |
String |
战力 |
partyId |
String |
帮派id |
professionId |
String |
角色职业id |
profession |
String |
角色职业名称 |
partyRoleId |
String |
角色在帮派中的id |
partyRoleName |
String |
角色在帮派中的名称 |
friendlist |
String |
好友关系列表 |
接入说明:
1) 在创建游戏角色、进入游戏和角色升级时候需要上传角色信息;
2)GameRoleInfo所有字段均需上传,不能传null,游戏没有的字段可以传一个默认值(比如 default 或者 1 之类的)
3) 关于360渠道上传角色信息的具体说明,请参考:http://open.quicksdk.net/help/detail/aid/190
1.2.5. 定额支付(必接)
接口:void pay(OrderInfo orderInfo, GameRoleInfo gameRoleInfo);
功能:调用渠道SDK的支付接口
案例:
OrderInfo orderInfo = new OrderInfo(); GameRoleInfo gameRoleInfo = new GameRoleInfo(); orderInfo.goodsID = "1"; orderInfo.goodsName = "勾玉"; orderInfo.goodsDesc = "10个勾玉"; orderInfo.quantifier = "个"; orderInfo.extrasParams = "extparma"; orderInfo.count = 10; orderInfo.amount = 1; orderInfo.price = 0.1f; orderInfo.callbackUrl = ""; orderInfo.cpOrderID = "cporderidzzw"; gameRoleInfo.gameRoleBalance = "0"; gameRoleInfo.gameRoleID = "11111"; gameRoleInfo.gameRoleLevel = "1"; gameRoleInfo.gameRoleName = "钱多多"; gameRoleInfo.partyName = "同济会"; gameRoleInfo.serverID = "1"; gameRoleInfo.serverName = "火星服务器"; gameRoleInfo.vipLevel = "1"; gameRoleInfo.roleCreateTime = "roleCreateTime"; QuickSDK.getInstance ().pay (orderInfo, gameRoleInfo);
OrderInfo
字段 | 类型 | 说明 |
goodsID |
String |
产品ID,用来识别购买的产品 |
goodsName |
String |
产品名称 |
amount |
float |
支付总额(元) |
count |
int |
购买数量 |
cpOrderID |
String |
产品订单号(游戏方的订单号) |
extrasParams |
String |
透传参数 服务器发送异步通知时原样回传(需要传纯字符串,不能传json格式) |
price |
float |
价格(可跟amount传一样的值) |
quantifier |
String |
购买商品单位,如:个 |
goodsDesc |
String |
商品描述 |
callbackUrl
|
String
|
支付回调通知地址
|
接入要求:为了兼容各个渠道商品名称能够统一显示,订单应以如下案例的形式传值:
案例1: 案例2:
amount:6.0 amount:10.0
count:60 count:1
goodsName:元宝 goodsName:月卡
goodsName产品名称以“月卡”、“钻石”、“元宝”的形式传入,不带数量;
1.2.6. 注销账号(游戏自身需要登出SDK账号时进行调用)
接口:void logout();
功能:调用渠道SDK的注销
案例:QuickSDK.getInstance().logout();
1.2.7 退出(必接)
接口:void exit();
功能:退出游戏。需先通过isChannelHasExitDialog接口判断渠道是否有退出框,若渠道有退出框,直接调用QuickSDK的exit接口,若渠道没有退出框,则调用游戏自身的退出框,点击“确定”后,调用QuickSDK的exit接口。
案例:
if(QuickSDK.getInstance().isChannelHasExitDialog ()){ QuickSDK.getInstance().exit(); } else { //mExitDialogCanvas.SetActive(true); //游戏调用自身的退出对话框,点击“确定”后,再调用QuickSDK.getInstance().exit(); }
1.3.1. 获取渠道类型
接口:String getParentChannelType();
功能:获取复制渠道原渠道的渠道编号接口
接口:int channelType();
功能:获取渠道编号,区分渠道使用此标识
比如渠道code:25643,渠道名:官方自用渠道 是从渠道code:134,渠道名:QuickGame_安卓 渠道复制而来,那么通过getParentChannelType接口获取到的值就是134,通过getChannelType接口获取到的就是25643。为了父渠道跟复制渠道的包能角色互通,推荐游戏使用getParentChannelType接口直接获取父渠道code做uid拼接
1.3.2 获取用户Id
接口:string userId();
功能:获取userId
1.3.3 获取配置参数值
接口:string getConfigValue (string key);
功能:获取游戏自定义参数,自定义参数可在QuickSDK后台配置
1.3.4 是否支持指定方法
接口:bool isFunctionSupported(FuncType type);
功能:检测是否提供对应功能的函数,功能以枚举列出
说明:某些SDK具有打开关闭浮动工具栏、进入用户中心、进入论坛等功能,该方法可以用来判断是否支持,方便游戏中进行判断. 指定方法的定义请参见QuickSDkImp.cs 的FuncType的定义
1.3.5 调用指定方法
接口:void callFunction(FuncType type)
回调信息接口:void onSuccess(string infos)
功能:某些SDK具有打开/关闭浮动工具栏、进入用户中心、论坛等功能,该方法可以用来调用这些功能,具体请参见QuickSDkImp.cs 类的FuncType的定义,回调接口参见QuickSDKListener.cs
说明: Infos为返回的json字符串
案例:实名认证(登录成功之后进行调用,目前渠道基本都做了实名跟防沉迷,游戏不需要再通过此接口返回的实名信息做防沉迷限制)
onSuccess将返回封装的json实体;uid (表示用户id),age (表示年龄, 如果渠道没返回默认为-1),realName (是否已实名: true表示已实名, false表示未实名;如果渠道没返回默认为 false),resumeGame (渠道实名认证失败之后是否可以继续游戏 :true表示可以, false表示不可以;如果渠道没返回默认为 true),other (预留字段,如果渠道没返回默认为""的字符串); FunctionType(表示调用的功能, FuncType.QUICK_SDK_FUNC_TYPE_REAL_NAME_REGISTER的值105为,表示实名认证):
public void onSuccess(string infos) { onSucceed(infos); } QuickSDK.getInstance().callFunction(FuncType.QUICK_SDK_FUNC_TYPE_REAL_NAME_REGISTER); 例如,测试渠道的回调infos结果形式为: {"uid":"1178471402501092","age":20,"realName":true,"resumeGame":true,"other":"","FunctionType":105}
1.3.6 调用QuickSDK客服插件
接口:void enterYunKeFuCenter(GameRoleInfo gameRoleInfo);
功能:首先需要到渠道配置界面添加QuickSDKCustomService插件 ,然后母包调用该接口,再进行打渠道包操作,打完之后该接口即可正常吊起客服
1.3.7 调用渠道SDK分享功能(仅限Android)
ShareInfo类字段说明
参数名称
数据类型
说明
titlestring
string
分享标题
content
string
分享内容
imgPath
string
分享图片本地地址
imgUrl
string
分享图片网络地址
url
string
分享链接
type
string
分享类型
shareTo
string
分享到哪里
extenal
string
额外备注
接口:void callSDKShare(ShareInfo shareInfo);
功能:传入QuickSDK规定的分享类的对象(关于对象的参数,需和渠道协商之后传入),打出渠道包之后即可吊起对应渠道的分享功能;
1.3.8 新增获取DeviceId接口
接口:getDeviceId()
功能:获取设备的DeviceId
打开quicksdk.xml,修改quicksdk.xml文件中的参数为游戏自己的参数。(压缩打开SDK资源里的aar文件,然后修改里面的参数值)
打开AndroidManifest.xml文件,修改游戏名,横竖屏设置。
提示:
部分渠道targetVersion为28时9.0设备http请求失败,如果游戏没有做网络适配,需要在AndroidManifest.xml文件添加如下代码
android:usesCleartextTraffic="true"
将ic_launcher.png图片替换为游戏自己的icon图片
参考以下步骤,导出apk,导出的apk即为安卓母包
至此,安卓部分接入完毕。
另注意:
1. QuickSDK 已经经过了混淆,如果要混淆java代码,请不要混淆联编的jar包中的类。可以添加以下类到proguard配置,排除在混淆之外:
-keep class com.quicksdk.** { *; }
2. 如果游戏自己做不了隐私弹窗,可以调用QuickSDK的弹窗接口,详细操作见文档:游戏如何调用QuickSDK的隐私弹窗
用unity3d导出xcode工程并打开
3.1.1. 横屏游戏
· u3d导出时设置如下图,u3d的设置会控制游戏的旋转
3.1.2 竖屏游戏
竖屏游戏不需要特殊处理,直接在u3d中勾选竖屏导出xcode即可。
将QuickSDKForIOS添加进工程
Unity2019之后的版本导出的Xcode工程包含 UnityFramework 动态库特别说明:
添加SDK到Xcode工程时需注意
1. QuickSDK.framework, QuickSDK_ios.h, QuickSDK_ios.mm, QuickSDKInterfaceUnity.h, QuickSDKInterfaceUnity.mm五个文件TargetMembership仅需关联到 UnityFramework
2. QuickChannel.framework为动态库TargetMembership 需同时关联到 UnityFramework和Unity-iPhone
QuickChannel.framework 是动态库添加时设置为Embed & Sign,如下图:
打开项目工程配置,添加库的链接参数,在项目工程配置中,找到Linking中的Linking Other Linker Flags,添加参数: -ObjC,如果包含UnityFramework这个Target也需要添加-ObjC
Build Settings->Search Paths->Library Search Paths中的所有路径将””去掉
PROJECT->Info->Configurations 仅保留Release和Debug 两项
工程info.plist文件里配置允许访问http网络
首先导入头文件#import
以及#import "QuickSDK_ios.h"
添加初始化方法调用,设置初始化参数Productcode、ProductKey,在UnityAppController.mm中添加
iOS Unity5.X以下如果回调时发生崩溃请将QuickSDK_ios.mm中-(void)sendU3dMessage:(NSString *)messageName :(NSDictionary *)dict修改一下:
打开
// char *gameObjectNameCStr = (char *)malloc(100);
// strcpy(gameObjectNameCStr, [_gameObjectName UTF8String]);
// char *messageNameCStr = (char *)malloc(100);
// strcpy(messageNameCStr, [messageName UTF8String]);
// char *jsonStringCStr = (char *)malloc(1000);
// strcpy(jsonStringCStr, [jsonString UTF8String]);
// UnitySendMessage(gameObjectNameCStr, messageNameCStr, jsonStringCStr);
关闭
UnitySendMessage([_gameObjectName UTF8String], [messageName UTF8String], [jsonString UTF8String]);
打开
// char *gameObjectNameCStr = (char *)malloc(100);
// strcpy(gameObjectNameCStr, [_gameObjectName UTF8String]);
// char *messageNameCStr = (char *)malloc(100);
// strcpy(messageNameCStr, [messageName UTF8String]);
// UnitySendMessage(gameObjectNameCStr, messageNameCStr, "");
关闭
UnitySendMessage([_gameObjectName UTF8String], [messageName UTF8String], "");
在didFinishLauchingWithOptions中调用注册事件监听以及调用初始化方法,其中productKey和productCode由QuickSDK后台获取。
至此,母包工程就已经完成,可以编译运行以及使用quick打包工具一键生成其它渠道包,打包工具的使用请参考打包工具使用说明。
注:如果打包出来的渠道ipa在手机上运行时异常,可以使用工具生成的调试工程进行调试,调试工程名为游戏工程名-渠道号.xcodeproj,路径在游戏工程同一目录下。
李先生:13880511661
QQ:48157910
赵先生:15390049857
QQ:1077535763
孙女士:13551010407
QQ:1799614139
QQ群:698731538