IOS游戏接入指南
NOTE:这篇文档,基于最新版本的OnlySDK框架,如果发现该文档和你使用的版本不匹配,则以你使用的版本对应的文档为准。
NOTE:2016年12月12号以前的版本,请看这里:[抽象层API调用](quickstart.md)
添加framework和bundle
把OnlySDK.framework加入xcode工程
接口 API 说明
1、初始化(必接)
初始化应该在程序启动时调用, 也就是在didFinishLaunchingWithOptions方法里
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSDictionary *sdkconfig = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"OnlySDK"];
[[OnlySDK sharedInstance] initWithParams:sdkconfig];
[[OnlySDK sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
[[OnlySDKAnalytics sharedInstance] startLevel:@"1"];
return YES;
}
2、设置OnlySDK回调代理
在初始化成功后, 还需要设置OnlySDK的回调函数, 回调对象需要实现OnlySDKDelegate的各个接口
[[OnlySDK sharedInstance] setDelegate:self];
渠道SDK中初始化成功,登录成功,登出成功,支付成功等,会回调到该接口。比如OnlySDKdemo中DemoViewController.m中这些接口的实现。
-(UIView *)GetView {
return [self GetViewController].view;
}
-(UIViewController *)GetViewController {
return self;
}
//初始化成功 代理方法
-(void) OnPlatformInit:(NSDictionary*)param {
[self SendCallback:"OnInitSuc" withParams:param];
}
//SDK登录成功 代理方法
-(void) OnUserLogin:(NSDictionary*)param {
[self SendCallback:"OnLoginSuc" withParams:param];
}
//SDK退出登录 代理方法
-(void) OnUserLogout:(NSDictionary*)param {
[self SendCallback:"OnLogout" withParams:param];
}
//SDK支付成功 代理方法
-(void) OnPayPaid:(NSDictionary*)param {
[self SendCallback:"OnPaySuc" withParams:param];
}
//必接 自定义回调,一般无需处理 必接
-(void)OnEventCustom:(NSDictionary*)param
{
NSString* name = [param valueForKey:@"name"];
NSDictionary* params = [param valueForKey:@"params"];
[self SendCallback:[name UTF8String] withParams:params];
}
-(void) OnEventCustom:(NSString*)eventName params:(NSDictionary*)params;
// 广告加载
-(void) OnAdLoad:(NSDictionary*)params;
3、二阶初始化接口
这个接口是在程序首个界面加载完成之后调用的,设置参数使用。
[[OnlySDK sharedInstance] performSelector:@selector(setupWithParams:) withObject:nil afterDelay:0];
3.1 登录接口(必接)
[[OnlySDK sharedInstance] login];
3.2 登出接口(选接)
退出登录不会自动弹出登录,需在代理方法 OnUserLogout:
[[OnlySDK sharedInstance] logout];
3.3 切换账号(选接)
切换账号成功后 就自动调用登录 无需手动调用登录接口
[[OnlySDK sharedInstance] switchAccount];
3.4 提交扩展数据(必接)
OnlySDKUserExtraData* extraData = [[OnlySDKUserExtraData alloc] init];
extraData.dataType = TYPE_ENTER_GAME;
extraData.roleID = @"testRole";
extraData.roleName = @"角色名称";
extraData.serverID = 1;
extraData.serverName = @"第一区";
extraData.roleLevel = @"1";
extraData.moneyNum = 100;
extraData.totalRechargeAmount = @"628.00";
extraData.roleCreateTime = time(NULL);
extraData.roleLevelUpTime = time(NULL);
[[OnlySDK sharedInstance] stat:extraData];
该方法将调用的时机分为几种类型:
1:创建角色
2:进入游戏
3:等级提升
4:退出游戏
6:充值到账
所以在上面5个地方,都需要调用
OnlySDKUser.getInstance().submitExtraData(OnlySDKUserExtraData extraData)
OnlySDKUserExtraData dataType说明
创建角色时,dataType为1;
进入游戏时,dataType为2;
等级提升时,dataType为3;
退出游戏时,dataType为4;
充值到账时,dataType为6;
NOTE:选择服务器时,因为还没有进入游戏,无法知道角色数据,extraData中只需要传入服务器信息即可。
关于OnlySDKUserExtraData 数据结构:
| 参数名称 | 类型 | 参数说明 |
|---|---|---|
| dataType | int | 调用时机 |
| serverID | int | 玩家所在服务器的ID |
| serverName | String | 玩家所在服务器的名称 |
| roleID | String | 玩家角色ID |
| roleName | String | 玩家角色名称 |
| roleLevel | String | 玩家角色等级 |
| moneyNum | int | 当前角色身上拥有的游戏币数量 |
| roleCreateTime | long | 角色创建时间,从1970年到现在的时间,单位秒,必须传入真实的数据,否则UC审核不过 |
| roleLevelUpTime | long | 角色等级变化时间,从1970年到现在的时间,单位秒 |
3.4 支付充值(必接)
OnlySDKProductInfo* productInfo = [[OnlySDKProductInfo alloc] init];
productInfo.productName = @"礼包1";
productInfo.productDesc = @"礼包1";
productInfo.productId = @"libao1";
productInfo.price = [NSNumber numberWithInt:600]; // 单位分
productInfo.buyNum = 1;
productInfo.coinNum = 900;
productInfo.roleId = @"12345";
productInfo.roleName = @"角色";
productInfo.roleLevel = @"66";
productInfo.serverId = @"1";
productInfo.serverName = @"桃源";
productInfo.vip = @"1";
productInfo.notifyUrl = @"http://110.54.33.45/game/pay/notify";
[[OnlySDK sharedInstance] pay:productInfo];
关于OnlySDKProductInfo对象:
| 参数名称 | 类型 | 参数说明 |
|---|---|---|
| productId | String | 充值商品ID,游戏内的商品ID |
| productName | String | 商品名称,比如元宝,钻石... |
| productDesc | String | 商品描述,比如 充值100元宝,赠送20元宝 |
| currency | String | 货币类型,比如CNY,ISO4217 |
| price | int | 充值金额(单位:分) |
| buyNum | int | 购买数量,一般都是1 |
| coinNum | int | 玩家当前身上剩余的游戏币 |
| serverId | String | 玩家所在服务器的ID |
| serverName | String | 玩家所在服务器的名称 |
| roleID | String | 玩家角色ID |
| roleName | String | 玩家角色名称 |
| roleLevel | String | 玩家角色等级 |
| vip | String | 玩家vip等级 |
| notifyUrl | String | 游戏服务器支付回调地址,渠道SDK支付成功,异步通知OnlyServer,OnlyServer根据该地址,通知游戏服务器发货 |
| extension | String | 支付成功之后,OnlyServer通知游戏服务器时,原样返回给游戏服务器 |
3.5 打开 个人中心
[[OnlySDK sharedInstance] openCenter];
3.6 打开 隐私政策
[[OnlySDK sharedInstance] privacyPolicy];
3.7 打开 用户协议
[[OnlySDK sharedInstance] userAgreement];
3.8 打开 官方微信公众号二维码/跳转企微
[[OnlySDK sharedInstance] officialAccount];
3.9 打开 二维码登录
[[OnlySDK sharedInstance] authByScanQrCode];
4、客服聊天
调用客服聊天功能,需要传入角色以下信息
| 参数名称 | 类型 | 参数说明 |
|---|---|---|
| uid | NSString | 用户ID |
| serverlD | NSString | 服务器ID |
| serverName | NSString | 服务器的名称 |
| rolelD | NSString | 角色ID |
| roleName | NSString | 角色名称 |
| roleLevel | NSString | 角色等级 |
| totalRechargeAmount | NSString | 充值总金额 |
调用方法
OnlySDKUserExtraData *data = [[OnlySDKUserExtraData alloc]init];
data.uid = @"1000002";
data.serverlD = @"10001";
data.serverName = @"服务器名称";
data.rolelD = @"100001";
data.roleName = @"角色名称";
data.roleLevel = @"1";
data.totalRechargeAmount = @"100";
[[OnlySDK sharedInstance] openCustomerService:data];
5、问卷调查
OnlySDKUserExtraData结构说明,以及查阅->
5.1 打开问卷调查(可选)
| 参数名称 | 类型 | 参数说明 |
|---|---|---|
| formkey | NSString | 问卷表单Key(由运营提供) |
| extra | NSString | 扩展参数 |
| OnlySDKUserExtraData | OnlySDKUserExtraData | 玩家角色信息 |
OnlySDKUserExtraData *data = [[OnlySDKUserExtraData alloc]init];
data.roleID = @"角色id";
data.roleName = @"角色名称";
data.serverID = 123;
data.serverName = @"Server名字";
[[OnlySDK sharedInstance]openSurvey:data extra:@"扩展数据"];
5.2 获取问卷调查列表(可选)
| 参数名称 | 类型 | 参数说明 |
|---|---|---|
| extra | NSString | 扩展参数 |
| OnlySDKUserExtraData | OnlySDKUserExtraData | 玩家角色信息 |
OnlySDKUserExtraData *data = [[OnlySDKUserExtraData alloc]init];
data.roleID = @"111232131";
data.roleName = @"ceshiyi";
data.serverID = 123;
data.serverName = @"Server名字";
[[OnlySDK sharedInstance] getSurveyForms:data extra:@"" completa:^(id result) {
//返回数据
}];
6、获取企业微信-福利站信息
OnlySDKUserExtraData结构说明,以及查阅-> 接口由外部按需调用 返回json
OnlySDKUserExtraData *data = [[OnlySDKUserExtraData alloc]init];
data.roleID = @"111232131"; //角色id
data.roleName = @"角色名称";
data.serverID = 123; //服务器id
data.serverName = @"服务器名字";
[[OnlySDK sharedInstance] getWelfareInfo: data extra:@"扩展参数" completa:^(id result) {
NSLog(@"%@",result);
}];
返回的json数据 参考Data数据
mpUrl 小程序跳转连接
qwPicUrl 添加企微图片
templatePic 模板图片
hasUserInfo 企微图片和小程序跳转链接是否携带了用户信息 0:不携带,1携带
7、开启远程通知开关
通知服务端,角色是否开启远程推送服务。
默认:开启远程推送服务
-(void)canPush:(BOOL)isOpen
serverId:(NSString *)serverId
roleId:(NSString *)roleId
roleName:(NSString *)roleName
block:(void(^)(BOOL isOpen))block;
// block 返回布尔类型
[[OnlySDK sharedInstance] canPush:YES
serverId:@""
roleId:@""
roleName:@""
block:^(BOOL isOpen) {
NSLog(@"%@", isOpen ? @"打开远程通知":@"关闭或用户可能关闭了远程通知");
}];
8、AppDelegate事件处理
需要在AppDelegate以下对应的生命周期方法中调用OnlySDK种对应这些方法:
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[[OnlySDK sharedInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo {
[[OnlySDK sharedInstance] application:application didReceiveRemoteNotification:userInfo];
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[[OnlySDK sharedInstance] application:application didReceiveRemoteNotification:userInfo];
}
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
[[OnlySDK sharedInstance] application:application didReceiveLocalNotification:notification];
}
- (void)applicationWillResignActive:(UIApplication *)application {
[[OnlySDK sharedInstance] applicationWillResignActive:application];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[OnlySDK sharedInstance] applicationDidEnterBackground:application];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[OnlySDK sharedInstance] applicationWillEnterForeground:application];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[OnlySDK sharedInstance] applicationDidBecomeActive:application];
}
- (void)applicationWillTerminate:(UIApplication *)application {
[[OnlySDK sharedInstance] applicationWillTerminate:application];
}
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [[OnlySDK sharedInstance] application:application handleOpenURL:url];
}
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[OnlySDK sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}
上面代码写好之后, 这个xcode就是以后打渠道包的母工程。
接下来,就可以通过OnlySDK一键打包工具, 打出各个渠道的渠道包。