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 数据结构:

参数名称类型参数说明
dataTypeint调用时机
serverIDint玩家所在服务器的ID
serverNameString玩家所在服务器的名称
roleIDString玩家角色ID
roleNameString玩家角色名称
roleLevelString玩家角色等级
moneyNumint当前角色身上拥有的游戏币数量
roleCreateTimelong角色创建时间,从1970年到现在的时间,单位秒,必须传入真实的数据,否则UC审核不过
roleLevelUpTimelong角色等级变化时间,从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对象:

参数名称类型参数说明
productIdString充值商品ID,游戏内的商品ID
productNameString商品名称,比如元宝,钻石...
productDescString商品描述,比如 充值100元宝,赠送20元宝
currencyString货币类型,比如CNY,ISO4217
priceint充值金额(单位:分)
buyNumint购买数量,一般都是1
coinNumint玩家当前身上剩余的游戏币
serverIdString玩家所在服务器的ID
serverNameString玩家所在服务器的名称
roleIDString玩家角色ID
roleNameString玩家角色名称
roleLevelString玩家角色等级
vipString玩家vip等级
notifyUrlString游戏服务器支付回调地址,渠道SDK支付成功,异步通知OnlyServer,OnlyServer根据该地址,通知游戏服务器发货
extensionString支付成功之后,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、客服聊天

调用客服聊天功能,需要传入角色以下信息

参数名称类型参数说明
uidNSString用户ID
serverlDNSString服务器ID
serverNameNSString服务器的名称
rolelDNSString角色ID
roleNameNSString角色名称
roleLevelNSString角色等级
totalRechargeAmountNSString充值总金额

调用方法

    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 打开问卷调查(可选)

参数名称类型参数说明
formkeyNSString问卷表单Key(由运营提供)
extraNSString扩展参数
OnlySDKUserExtraDataOnlySDKUserExtraData玩家角色信息
    OnlySDKUserExtraData *data  = [[OnlySDKUserExtraData alloc]init];
    data.roleID = @"角色id";
    data.roleName = @"角色名称";
    data.serverID = 123;
    data.serverName = @"Server名字";
    [[OnlySDK sharedInstance]openSurvey:data extra:@"扩展数据"];

5.2 获取问卷调查列表(可选)

参数名称类型参数说明
extraNSString扩展参数
OnlySDKUserExtraDataOnlySDKUserExtraData玩家角色信息
    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一键打包工具, 打出各个渠道的渠道包。