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 ...
随机推荐
- poj 1028 Web Navigation 【模拟题】
题目地址:http://poj.org/problem?id=1028 测试样例: Sample Input VISIT http://acm.ashland.edu/ VISIT http://ac ...
- min/max优化,count ,group by
min/max优化 在表中,一般都是经过优化的. 如下地区表 id area pid 1 中国 0 2 北京 1 ... 3115 3113 我们查min(id), id是主键,查Min(id)非常快 ...
- JAVA强制类型转换(转载+自己的感想) - stemon
JAVA强制类型转换(转载+自己的感想) - stemon 时间 2013-10-29 15:52:00 博客园-Java原文 http://www.cnblogs.com/stemon/p/33 ...
- Java -- eclipse常用快捷键
- 2015 ETSI NFV用例指南
译者简介:忍忍鱼,曾经从SDNLAB获取了很多知识,现在努力为SDNLAB贡献自己的力量.爱学习,求进步!SDNLAB,么么哒! ETSI NFV ISG已经确定了9个潜在的NFV用例.本章节简单介绍 ...
- django 更改默认语言和时间
django的默认语言为英语,默认时间为UTC. 在settings.py中更改语言和时间 LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' 改为 LANGUAGE_ ...
- js事件绑定的几种方式与on()、bind()的区别
版权声明:本文为博主原创文章,未经博主允许不得转载 一直不是很理解几种js事件绑定之间的区别与联系,今天百度了一下,在此做一总结: 1.如果只是简单的绑定一个事件,可以直接写在行内,点击执行一个函数, ...
- bootstrap-自定义导航栏隐藏参数@screen-sm
导航菜单默认在屏幕小于768px的时候自动折叠,怎么自定义这个大小? 需要重新编译bootstrap 编译 CSS 和 JavaScript 文件 问题解决!
- nodejs stream基础知识
分类 nodejs 的 stream 有四种: Readable:可读流 Writable: 可写流 Duplex:双工流 Transform:转换流 Readable // _read方法是从底层系 ...
- bison 编译sql的基本知识
一.bison是干什么的? bison 是一个语法分析器,把用户输入的内容,根绝在.y文件中事先定义好的规则,构建一课语法分析树.(所谓的规则就是,匹配上对应字符之后,执行相应的动作.) 1.一个简单 ...