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 ... 
随机推荐
- Linux离线同步时间
			Linux离线同步时间 思路:以其中一台时间为准 脚本 #!/bin/shcurrent=`date '+%H:%M:%S'` for i in bigdata1 bigdata2 bigdata3 ... 
- Hadoop- 集群启动详解
			NameNode启动过程详解 第一次启动:HDFS格式化后,生成fsimage文件 hdf 
- Jquery 取值,赋值学习总结
			<h2>获取和设置文本框值:</h2> <input type="button" value="赋值文件框" id="v ... 
- Hibernate学习---第十节:Hibernate之QBC、样例查询&离线查询
			一.QBC (Query By Criteria) 主要有Criteria,Criterion,Oder,Restrictions类组成 1.java 代码如下: /** * 查询所有 */ @Tes ... 
- linux下安装rpm格式的mysql
			1.下载安装包官网下载.rpm格式安装包,需要下面两个文件: MySQL-server-5.0.26-0.i386.rpm MySQL-client-5.0.26-0.i386.rpm 注:官网下载时 ... 
- Python基础-列表推导式
			python中列表推导式有三种数据类型可用:列表,字典,集合 列表推导式书写形式: [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件] 1,列表推导式 ... 
- Log4j_学习_00_资源帖
			一.log4j2 1. log4j使用教程详解(怎么使用log4j2) 2.Log4j2的基本使用 二.log4j 1.[转]最详细的Log4J使用教程 2.最详细的Log4j使用教程 3.log4j ... 
- codeforces 710A A. King Moves(水题)
			题目链接: A. King Moves 题意: 给出king的位置,问有几个可移动的位置; 思路: 水题,没有思路; AC代码: #include <iostream> #include ... 
- linux命令学习笔记(40):wc命令
			Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. .命令格式: wc [选项]文件... .命令功能: 统计指定文件中的字节数.字数 ... 
- 《Javascript高级程序设计》阅读记录(一):第二、三章
			<Javascript高级程序设计>阅读记录(一) 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释 ... 
