HN669打包工具--游戏对接
一、 将游戏工程拖入到工具的HN669Ploy目录下,如下图:

二、 xCode打开游戏工程,将Core目录下的HN669SDKCore工程添加入游戏工程,并引用库,如图:

三、调用API
1.Appdelegate中调用以下方法
引用头文件:
#import <HN669SDKCore/HN669SDKCore.h>
初始化SDK
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
////初始化应该在程序启动时调用, 也就是在didFinishLaunchingWithOptions方法里
NSDictionary *sdkconfig = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"HN669SDK"];
[[HN669SDK sharedInstance] initWithParams:sdkconfig];
[[HN669SDK sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
[[HN669Analytics sharedInstance] startLevel:@"1"];
self.window.rootViewController = [[ViewController alloc] init];
return YES;
}
AppDelegate事件处理
需要在AppDelegate以下对应的生命周期方法中调用HN669SDK种对应这些方法:
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[[HN669SDK sharedInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo
{
[[HN669SDK sharedInstance] application:application didReceiveRemoteNotification:userInfo];
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
[[HN669SDK sharedInstance] application:application didReceiveRemoteNotification:userInfo];
}
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[[HN669SDK sharedInstance] application:application didReceiveLocalNotification:notification];
}
- (void)applicationWillResignActive:(UIApplication *)application {
[[HN669SDK sharedInstance] applicationWillResignActive:application];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[HN669SDK sharedInstance] applicationDidEnterBackground:application];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[HN669SDK sharedInstance] applicationWillEnterForeground:application];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[HN669SDK sharedInstance] applicationDidBecomeActive:application];
}
- (void)applicationWillTerminate:(UIApplication *)application {
[[HN669SDK sharedInstance] applicationWillTerminate:application];
}
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [[HN669SDK sharedInstance] application:application handleOpenURL:url];
}
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [[HN669SDK sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}
2.游戏主界面viewController
遵守HN669SDKDelegate协议,设置代理,并且实现协议中定义的方法,在ViewController中的viewDidLoad方法中调用:
[[HN669SDK sharedInstance] setDelegate:self];
实现协议方法:
这些协议回调根据渠道可能会有,也可能不回掉
#pragma mark --<HN669SDKDelegate>
-(UIView*) GetView{
return [self GetViewController].view;;
}
-(UIViewController*) GetViewController{
return self;
}
//SDK初始化成功回调
-(void) OnPlatformInit:(NSDictionary*)params{
}
//登录成功回调
-(void) OnUserLogin:(NSDictionary*)params{
}
//登出回调
-(void) OnUserLogout:(NSDictionary*)params{
}
//支付回调
-(void) OnPayPaid:(NSDictionary*)params{
}
//事件回调
-(void) OnEventCustom:(NSString*)eventName params:(NSDictionary*)params{
}
3.用户功能API调用
1) 登录(必须实现)
调用登录接口,打开SDK登录界面
[[HN669SDK sharedInstance] login];
2) 切换账号(必须实现)
部分渠道没有支持切换账号接口,那么切换账号默认调用的接口和登录相同。
[[HN669SDK sharedInstance] switchAccount];
3) 登出(非必需实现)
部分渠道没有登出接口,那么登出接口默认不做任何实现
[[HN669SDK sharedInstance] logout];
4) 显示个人中心
Note: 部分渠道要求游戏内必须要有[个人中心]按钮,点击进入渠道SDK的个人中心界面.但是因为是部分渠道有这个接口,部分渠道没有提供这个接口,所以,对于没有提供该接口的渠道,该方法不做任何逻辑。
游戏层需要根据支付支持该方法的判定,来显示或者隐藏该按钮。
调用该方法时,先判断当前渠道是否提供了个人中心接口:
if([[HN669SDK sharedInstance].defaultUser hasAccountCenter])
{
[[HN669SDK sharedInstance] showAccountCenter];
}
5)支付接口
在调用支付的时候,游戏中需要传入对应的参数,然后调用支付插件的pay方法:
HN669ProductInfo* productInfo = [[HN669ProductInfo alloc] init];
productInfo.orderID = @"1782341234";
productInfo.productName = @"礼包1";
productInfo.productDesc = @"礼包1";
productInfo.productId = @"com.669.jianqilingyun.600";
productInfo.price = [NSNumber numberWithInt:1];
productInfo.buyNum = 1;
productInfo.coinNum = 900;
productInfo.roleId = @"12345";
productInfo.roleName = @"角色";
productInfo.roleLevel = @"66";
productInfo.serverId = @"1";
productInfo.serverName = @"桃源";
productInfo.vip = @"1";
productInfo.extension = @"hjghjklhjk";
productInfo.notifyUrl = @"http://110.54.33.45/game/pay/notify";
[[HN669SDK sharedInstance] pay:productInfo];
//参数dic是一个HN669ProductInfo对象 支付成功的回调,可以在上面OnPayPaid回调方法中进行处理。一般网游这里不需要做特殊的处理,因为支付是异步的,这里支付成功,仅仅是SDK支付请求成功,并不代表玩家得到了游戏币。真正充值成功,是异步通知到游戏服务器的。
关于支付参数的说明:
|
参数Key |
参数类型 |
参数说明 |
|---|---|---|
|
productId |
String |
充值商品ID,游戏内的商品ID |
|
productName |
String |
商品名称,比如100元宝,500钻石... |
|
productDesc |
String |
商品描述,比如 充值100元宝,赠送20元宝 |
|
price |
int |
充值金额(单位:元) |
|
ratio |
int |
兑换比例,暂时无用途 |
|
buyNum |
int |
购买数量,一般都是1 |
|
coinNum |
int |
玩家当前身上剩余的游戏币 |
|
serverID |
String |
玩家所在服务器的ID |
|
serverName |
String |
玩家所在服务器的名称 |
|
roleID |
String |
玩家角色ID |
|
roleName |
String |
玩家角色名称 |
|
roleLevel |
String |
玩家角色等级 |
|
vip |
String |
玩家vip等级 |
|
payNotifyUrl |
String |
支付回调地址,下单时,HN669Server返回的 |
|
orderID |
String |
HN669Server订单号,下单时,HN669Server返回的 |
|
extension |
String |
渠道相关的扩展数据,下单时,HN669Server返回的 |
6)提交用户数据,用户登录、进入游戏、升级、退出游戏时候调用
HN669UserExtraData* extraData = [[HN669UserExtraData alloc] init];
extraData.dataType = TYPE_ENTER_GAME;
extraData.roleID = @"testRole";
extraData.roleName = @"角色名称";
extraData.serverID = 1;
extraData.serverName = @"第一区";
extraData.roleLevel = @"1";
extraData.moneyNum = 100;
extraData.roleCreateTime = time(NULL);
extraData.roleLevelUpTime = time(NULL);
[[HN669SDK sharedInstance] submitExtraData:extraData];
NOTE:选择服务器时,因为还没有进入游戏,无法知道角色数据,extraData中只需要传入服务器信息即可。
| 参数名称 | 参数类型 | 参数说明 |
|---|---|---|
| dataType | int | 调用时机 |
| serverID | String | 玩家所在服务器的ID |
| serverName | String | 玩家所在服务器的名称 |
| roleID | String | 玩家角色ID |
| roleName | String | 玩家角色名称 |
| roleLevel | String | 玩家角色等级 |
| moneyNum | String | 当前角色身上拥有的游戏币数量 |
| roleCreateTime | long | 角色创建时间,从1970年到现在的时间,单位秒,必须传入真实的数据,否则UC审核不过 |
| roleLevelUpTime | long | 角色等级变化时间,从1970年到现在的时间,单位秒 |
| vip | String | 玩家VIP等级 |
四、证书配置
在脚本工具打包之前,在游戏工程中先选好证书和描述文件。
HN669打包工具--游戏对接的更多相关文章
- HN669打包工具--打包工具使用文档
打包工具主要包含下载更新资源文件以及打包两个部分 一.下载更新资源文件 1.终端进入工具根目录,即HN669SDK_iOS目录,并运行./api.sh脚本 2.输入游戏id (note:此游戏id为我 ...
- HN669打包工具--调试文档
调试有两种方式,一是直接在游戏工程上面调试,这比较麻烦,需要根据插件配置文件和脚本文件去配置好工程选项后,才能调试.简单一点就是通过脚本文件打包后会有生成游戏工程对应每个渠道的工程. 如下图:这个工程 ...
- HN669打包工具--环境准备
1.安装JDK 这个百度,Google一大堆,可以自行参考.仅仅注意,不要安装错了,根据自己系统是32位还是64位,安装MAC下的JDK版本.系统32/64位查询命令:uname -a下载地址安装指导 ...
- Unity 游戏框架搭建 (十一) 简易AssetBundle打包工具(一)
最近在看Unity官方的AssetBundle(以下简称AB)的教程,也照着做了一遍,不过做出来的AssetBundleManager的API设计得有些不太习惯.目前想到了一个可行的解决方案.AB相关 ...
- 【Cocos2d-Js基础教学(5)资源打包工具的使用及资源的异步加载处理】
TexturePacker是纹理资源打包工具,支持Cocos2dx的游戏资源打包. 如果用过的同学可以直接看下面的资源的异步加载处理 首先为什么用TexturePacker? 1,节省图片资源实际大小 ...
- 细说前端自动化打包工具--webpack
背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- Webpack:前端资源模块化管理和打包工具
一.介绍: Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生 产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再 ...
- 模块化管理工具兼打包工具 webpack
webpack 是一个[模块化管理工具]兼[打包工具] 是一个工具(和seajs,requirejs管理前端模块的方式是不一样) 在webpack一个文件就是一个模块! seajs,requirejs ...
随机推荐
- mysql分区partition
分区后 会产生多个 数据存储文件MYD,MYI ,把内容读取分散到多个文件上,这样减少并发读取,文件锁的概率,提高IO === 水平分区的几种模式:===1. Range(范围) – 这种模式允许DB ...
- Spring Cloud之Feigin客户端重构思想
应该重构接口信息(重点) toov5-parent 存放共同依赖信息 toov5-api api的只有接口没有实现 toov5-api-member toov5-api-order to ...
- bootstrap0
bootstrap模板为使IE6.7.8版本(IE9以下版本)浏览器兼容html5新增的标签,引入下面代码文件即可. <script src="https://oss.maxcdn.c ...
- python 正则表达式(二)
下面列举了Python3的所有符号用法,别背,千万别背,用到时来查就行. 字符 含义 . 表示匹配除了换行符外的任何字符注:通过设置 re.DOTALL 标志可以使 . 匹配任何字符(包含换行符) | ...
- Gym 100801B Black and White(构造)
题意:给定X,Y,分别表示由'.'和'@'组成的连通块的个数. 思路:假如X<Y,我们用两部分来构造这个结果,第一部分由一个'.'连通块和Y-(X-1)割'@'连通块组成,第二个部分由X-1个' ...
- python日志轮转RotatingFileHandler在django中的一个bug
简介 大量过时的日志会占用硬盘空间,甚至长时间运行不注意会占满硬盘导致宕机,那么就可以使用内建logging模块根据文件大小(logging.handlers.RotatingFileHandler) ...
- vmware的双网卡以及Pro的注册码
DC/OS的master需要能够上外网而且能够和本地内网设备交互,于是打算在虚拟机上面做测试,于是调研了一下虚拟机的双网卡配置. 最推荐的方式是使用vmware的station,而不是player ...
- docker 局域网仓库(registry)
sudo docker pull daocloud.io/registry 安装仓库(registry) 使用daocloud/aliyun镜像吧,官网仓库真心没法用 sudo docker r ...
- mysql du-master配置
db-server1 my.cnf log_bin = mysql-binbinlog_format = mixedserver_id = 1 read-only = 0#binlog-do-db = ...
- Percona Xtrabackup 备份MySQL 实例(转)
老规矩,开场白,刚开始用mysqldump,备份100G+的数据库,再加上服务器繁忙,备份速度像蜗牛似的,于是寻找更高效的备份方法.网上都说用xtrabackup比较适合备份大的数据库,而且备份效率也 ...