# JHTools **Repository Path**: weibar/JHTools ## Basic Information - **Project Name**: JHTools - **Description**: iOS游戏工程对接渠道工具:1.渠道SDK插件化,一次性对接,不同游戏只要修改配置参数,无需重新对接SDK 2.脚本化修改工程配置,适应各种SDK的工程配置要求 3.可选择性,只生成工程或者只打包等 4.根据游戏名选择出包,导出包目录结构清晰,并且导出对应的dSYM文件 5.可上传共享盘、上传fir.im或者蒲公英 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: JHTools - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-10-11 - **Last Updated**: 2021-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # **JHTools简介** iOS游戏工程对接渠道工具:
1.渠道SDK插件化,一次性对接,不同游戏只要修改配置参数,无需重新对接SDK
2.脚本化修改工程配置,适应各种SDK的工程配置要求
3.可选择性,只生成工程或者只打包等
4.根据游戏名选择出包,导出包目录结构清晰,并且导出对应的dSYM文件
5.可上传共享盘、上传fir.im或者蒲公英
# **JHToolsSDK使用方法** # 一、游戏接入工具 ## 1、将游戏工程放置于JHToolsSDK工具目录下 此操作只是为了方便查找原始工程经过工具打包后的工程,若不想放置于此目录下也是可以的。 ## 2、原始工程引入Core库 XCode打开游戏工程,将Core目录下的JHTollsSDKCore工程添加入游戏工程,并在"Link Binary With Libraries"中引用库,也可以先用Core目录下的工程先打成库,再引用入游戏原始工程,只是这样不方便调试 ## 3.游戏接入工具代码 ### 1)Appdelegate中调用以下方法 ``` #import - (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:@"JHToolsSDK"]; [[JHToolsSDK sharedInstance] initWithParams:sdkconfig]; [[JHToolsSDK sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; [[JHToolsAnalytics sharedInstance] startLevel:@"1"]; self.window.rootViewController = [[ViewController alloc] init]; return YES; } -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ [[JHToolsSDK sharedInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; } -(void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo{ [[JHToolsSDK sharedInstance] application:application didReceiveRemoteNotification:userInfo]; } -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ [[JHToolsSDK sharedInstance] application:application didReceiveRemoteNotification:userInfo]; } -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{ [[JHToolsSDK sharedInstance] application:application didReceiveLocalNotification:notification]; } - (void)applicationWillResignActive:(UIApplication *)application { [[JHToolsSDK sharedInstance] applicationWillResignActive:application]; } - (void)applicationDidEnterBackground:(UIApplication *)application { [[JHToolsSDK sharedInstance] applicationDidEnterBackground:application]; } - (void)applicationWillEnterForeground:(UIApplication *)application { [[JHToolsSDK sharedInstance] applicationWillEnterForeground:application]; } - (void)applicationDidBecomeActive:(UIApplication *)application { [[JHToolsSDK sharedInstance] applicationDidBecomeActive:application]; } - (void)applicationWillTerminate:(UIApplication *)application { [[JHToolsSDK sharedInstance] applicationWillTerminate:application]; } -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{ return [[JHToolsSDK sharedInstance] application:application handleOpenURL:url]; } -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ return [[JHToolsSDK sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; } ``` ### 2)在游戏对外接口类中接入以下代码 遵守HN669SDKDelegate协议,设置代理,并且实现协议中定义的方法\ ps:因为为公共协议接口,所以回调接口并不是都有数据返回,主要用到的为登录回调、登出回调等,游戏内有功能的可以根据参数需求来定义,回调参数可以自定义 ``` #pragma mark -- -(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调用 登录 ``` [[JHToolsSDK sharedInstance] login]; ``` 登出 ``` [[JHToolsSDK sharedInstance] logout]; ``` 切换账号 ``` [[JHToolsSDK sharedInstance] switchAccount]; ``` 显示个人中心\ Note:部分渠道要求游戏内必须要有[个人中心]按钮,点击进入渠道SDK的个人中心界面.但是因为是部分渠道有这个接口,部分渠道没有提供这个接口,所以,对于没有提供该接口的渠道,该方法不做任何逻辑。游戏层需要根据支付支持该方法的判定,来显示或者隐藏该按钮。调用该方法时,先判断当前渠道是否提供了个人中心接口: ``` if([[JHToolsSDK sharedInstance].defaultUser hasAccountCenter]){ [[JHToolsSDK sharedInstance] showAccountCenter]; } ``` 支付接口\ 在调用支付的时候,游戏中需要传入对应的参数,然后调用支付插件的pay方法: ``` JHToolsProductInfo* productInfo = [[JHToolsProductInfo alloc] init]; productInfo.orderID = @"1782341234";//订单号 productInfo.productName = @"礼包1";//产品名 productInfo.productDesc = @"礼包1";//产品描述 productInfo.productId = @"com.test.6";//产品描述 productInfo.price = [NSNumber numberWithInt:1];//价格,单位元 productInfo.buyNum = 1;//购买数量 productInfo.coinNum = 900;//获取元宝数量 productInfo.roleId = @"12345";//角色ID productInfo.roleName = @"角色";//角色名 productInfo.roleLevel = @"66";//角色等级 productInfo.serverId = @"1";//区服ID productInfo.serverName = @"桃源";//区服名 productInfo.vip = @"1";//vip等级 productInfo.extension = @"hjghjklhjk";//透传数据 productInfo.notifyUrl = @"http://110.54.33.45/game/pay/notify";//回调URL,若使用后台配置,此处可不填写 [[HN669SDK sharedInstance] pay:productInfo]; //参数dic是一个HN669ProductInfo对象 支付成功的回调,可以在上面OnPayPaid回调方法中进行处理。一般网游这里不需要做特殊的处理,因为支付是异步的,这里支付成功,仅仅是SDK支付请求成功,并不代表玩家得到了游戏币。真正充值成功,是异步通知到游戏服务器的。 ``` 提交用户数据 ``` JHToolsUserExtraData* extraData = [[JHToolsUserExtraData alloc] init]; extraData.dataType = TYPE_ENTER_GAME;//上传角色场景 登录/进入游戏/升级、退出游戏等 extraData.roleID = @"testRole";//角色ID extraData.roleName = @"角色名称";//角色名称 extraData.serverID = 1;//区服ID extraData.serverName = @"第一区";//区服名称 extraData.roleLevel = @"1";//角色等级 extraData.moneyNum = 100;//当前角色身上拥有的游戏币数量 extraData.roleCreateTime = time(NULL);//角色创建时间 extraData.roleLevelUpTime = time(NULL); //角色最近升级时间 [[JHToolsSDK sharedInstance] submitExtraData:extraData]; ``` # 二、渠道SDK接入 # 三、使用工具打包 当游戏接入完成,并接入完渠道SDK后,就可以使用工具直接出包了 终端进入工具目录,输入./buildscript/build.py JHToolsPloy/(游戏.xcodeproj文件) JHToolsPloy/ (-n 只配置工程,不打包) ![](https://pan.baidu.com/s/1gsgDAjQyW6ZK7M7fjKX8Zg)