跳到主要内容
版本:1.8.7

海外游戏对接文档--iOS

版本

当前版本及SDK下载

当前版本 1.8.7
历史版本 SDK下载:sdk:https://quqi.com/s/6/wbfqCS2xRZ8gw2ji

注意

该SDK集成了谷歌、Facebook、Apple第三方登录功能,若应用内自带谷歌、Facebook、Apple登录,运行程序可能会出现 "引用多个第三方库"而引发冲突,

SDK功能

1.初始化 2.登录 3.用户中心(绑定、切换、游戏社区、问卷奖励) 4.广告 5.信息上报 6.苹果内购 7.商城评价 8.Firebase云消息功能 9.数数科技用户信息上报

1.工程配置

1.1 U8打包

项目需使用U8工具进行打包,请按照以下步骤进行U8打包

  1. 将U8打包工具放在任意位置,确认channels中MCOOS和common目录下config.json参数是否正确

U8打包common配置

名称描述
product_name游戏简称,例如妙酷测试可写为mkcs
AppIdU8AppID,可和对接人员确认参数是否正确
AppKeyU8AppKey,可和对接人员确认参数是否正确
U8UrlU8Url,可和对接人员确认参数是否正确

U8打包config配置 MCOOS目录下config.js配置详解

名称描述
desc游戏介绍,可直接填入游戏名称,例如妙库测试
CFBundleIdentifier项目bundleID
Channelu8渠道,可和对接人员确认参数是否正确
name渠道名称,默认为MCOOS,请勿修改
key渠道key,可和对接人员确认参数是否正确
gameID渠道游戏id,可和对接人员确认参数是否正确
payKey渠道游戏支付key,可和对接人员确认参数是否正确
channel渠道,可为空
appsFlyerDevKeyAppsFlyer devKey值,需要在appsFlyer进行申请
appleAppID苹果应用ID,需要在苹果应用后台获取。苹果登录或者绑定与AppsFlyer信息上报必填
googleClientID谷歌应用ClientID,需要在谷歌应用后台获取。谷歌登录或者绑定必填
fbAppIdFacebook应用ID,需要在Facebook应用后台获取。Facebook登录或者绑定必填
fbDisplayNAameFacebook应用名称,需要在Facebook应用后台获取。Facebook登录或者绑定必填
gooleAppId谷歌应用AppID,需要在谷歌应用后台获取。谷歌登录或者绑定必填
  1. cd进入buildscript目录,执行以下代码
./build.py  游戏工程的xcodeproj文件地址  ../u8test -n
  1. 运行后会选择渠道,输入‘MCOOS’
  2. 成功后会生成 工程名.MCOOS包
  3. 使用XCode打开 工程名.MCOOS包,填入开发者账号

1.2 其他配置

1.SDK包含苹果登录功能,需要在xcode工程的Signing&Capabilities界面加入Sign in with Apple功能。

xcode添加apple登录功能

2.添加Facebook登录功能

!> SDK包含Facebook登录功能,需要在xcode工程新增swift文件,xcode会自动加入桥头文件。

3.消息推送配置 消息推送配置

1.3 问卷功能

需要在surveyHero创建账号,并制作问卷。 SurveyHero文档链接 https://developer.surveyhero.com/api/ 服务端回调请填写该回调:https://ioshk-api.m-co.cn/survey_webhook_response

2.SDK接口

2.1 初始化(必接)

初始化应该在程序启动时调用, 也就是在didFinishLaunchingWithOptions方法里

#import <U8SDKCore/U8SDK+AppDelegate.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSDictionary *sdkconfig = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"U8SDK"];
[[U8SDK sharedInstance] initWithParams:sdkconfig];
[[U8SDK sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
[[U8Analytics sharedInstance] startLevel:@"1"];
return YES;
}

2.2.1 登录接口

该接口参数可以为空,默认采用IDFV值
登录接口需要在 OnPlatformInit 回调内调用
[[U8SDK sharedInstance] loginCustom:@""];

2.2.2 登出接口

[[U8SDK sharedInstance] logout];

2.3 个人中心接口

[[U8SDK sharedInstance] showAccountCenter];

2.4 上报信息接口(必接)

U8UserExtraData* extraData = [[U8UserExtraData 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)
//extraData.eventName = @"af_xxxxxx"; //若dataType为TYPE_OTHER_EVENT时,eventName为必填项,af上报的事件名
[[U8SDK sharedInstance] submitExtraData:extraData];

调用 U8User.getInstance().submitExtraData(UserExtraData extraData),其中,UserExtraData就是游戏内玩家的数据,比如在选择服务器时,extraData中的dataType为 TYPE_SELECT_SERVER

data_type值含义value
TYPE_SELECT_SERVER选择服务器1
TYPE_CREATE_ROLE角色创建2
TYPE_ENTER_GAME进入游戏3
TYPE_LEVEL_UP角色升级4
TYPE_EXIT_GAME退出游戏5
TYPE_SHOW_RV看完广告6
TYPE_DEVICE_START设备启动7
TYPE_LOGIN_PID设备PID登陆成功8
TYPE_BIND_ACCOUNT绑定账号成功9
TYPE_DEVICE_ENTER_GAME设备成功进入游戏10
TYPE_DEVCIE_ENTER_SERVER设备开始进入服11
TYPE_OTHER_EVENT其他上报信息12
TYPE_TUTORIAL_COMPLETION角色完成引导13
TYPE_LOGIN_ROLE角色登录14
TYPE_DEVICE_LOAD设备加载过程,可能会分几步,所以此上报需要填写lodingEvent字段15
TYPE_RETENTION_2留存两天16
TYPE_RETENTION_3留存三天17

!> 选择服务器时,因为还没有进入游戏,无法知道角色数据,extraData中只需要传入服务器信息即可。

关于U8UserExtraData 数据结构,其中设备加载过程需填写loadingEvent字段值

!> 当data_type值为TYPE_OTHER_EVENT时,将会上报AF与Firebase事件,事件名只能由数字、字母和下划线组成

参数名称参数类型参数说明
dataTypeint调用时机
serverIDString玩家所在服务器的ID
serverNameString玩家所在服务器的名称
roleIDString玩家角色ID
roleNameString玩家角色名称
roleLevelString玩家角色等级
moneyNumString当前角色身上拥有的游戏币数量
roleCreateTimelong角色创建时间,从1970年到现在的时间,单位秒,必须传入真实的数据,否则UC审核不过
roleLevelUpTimelong角色等级变化时间,从1970年到现在的时间,单位秒
vipString玩家VIP等级
loadingEventString表示加载过程的不同阶段,格式为loading_xxx
eventNameString当data_type值为TYPE_OTHER_EVENT时必填,af上报的事件名
paramNSDictionaryaf上报事件的参数

2.5 商城评价

[[U8SDK sharedInstance] storeReview:@"test_test"];
参数传入触发条件

2.6 订阅恢复(选接)

//用户点击订阅恢复时,游戏需传入的参数
//params(NSDictionary类型)中的参数如下:
//extra:订阅恢复时,游戏透传的参数
//serverId:玩家所在服id
[[U8SDK sharedInstance] restoreCompletedTransactions:params];

2.7 获取商品信息(选接)

[[U8SDK sharedInstance] getProductsInfo];

2.8 获取商品回调

productArray(NSMutableArray类型)(包含NSDictionary数据的数组):
//NSDictionary中的参数如下:
//product_id:商品id
//price:价格
//symbol:货币符号
//title:本地化商品名称
//localizedDescription:本地化描述(1.8.7.1新增)
//priceAmountMicros:价格,与price返回相同(1.8.7.1新增)
//countryCode:区域设置的国家或地区代码。国家或地区码的示例包括“GB”、“FR”和“HK”(1.8.7.1新增)
//priceCurrencyCode:区域设置的货币代码。示例货币代码包括“USD”、“EUR”和“JPY”(1.8.7.1新增)

-(void) OnProductsInfoBack:(NSMutableArray*)productArray
{
NSLog(@"%@", productArray);//
}

返回值举例:

[
{
countryCode = CN;
localizedDescription = "\U6309\U6708\U7eed\U8d39\U6309\U6708\U7eed\U8d39\U6309\U6708\U7eed\U8d39\U6309\U6708\U7eed\U8d39\U6309\U6708\U7eed\U8d39\U6309\U6708\U7eed\U8d39";
price = 10;
priceAmountMicros = 10;
priceCurrencyCode = CNY;
"product_id" = "com.miaoju.iap.auto.month";
symbol = "\U00a5";
title = "\U6309\U6708\U7eed\U8d39";
}
]

2.9 支付充值(必接)

U8ProductInfo* productInfo = [[U8ProductInfo alloc] init];
productInfo.productName = @"礼包1";
productInfo.productDesc = @"礼包1";
productInfo.productId = @"libao1";
productInfo.price = [NSNumber numberWithInt:30];
productInfo.buyNum = 1;
productInfo.coinNum = 900;
productInfo.userName = @"test001";
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"; //普通支付notifyUrl
productInfo.subNotifyUrl = @"http://andtest-api.m-co.cn/subtest.php";//订阅支付notifuUrl
NSMutableArray *detailArr = [[NSMutableArray alloc] init];
NSDictionary *dic = @{
@"mj_daoju_id":@"id111", //道具id,游戏自己定义
@"mj_daoju_name":@"name111",//道具名称,游戏自己定义
@"mj_daoju_type":@"type111",//道具类型,游戏自己定义
@"mj_daoju_value":@(0),//道具价值,游戏自己定义
};
[detailArr addObject:dic];
productInfo.productDetails = detailArr;
[[U8SDK sharedInstance] pay:productInfo];

关于U8ProductInfo对象:

参数名称参数类型参数说明
productIdNSString充值商品ID,游戏内的商品ID
productNameNSString商品名称,比如100元宝,500钻石...
productDescNSString商品描述,比如 充值100元宝,赠送20元宝
priceNumber充值金额$\color{red}{单位:美元}$
buyNumNSInteger购买数量,一般都是1
coinNumNSInteger玩家当前身上剩余的游戏币
userNameNSString玩家唯一标识
serverIdNSString玩家所在服务器的ID
serverNameNSString玩家所在服务器的名称
roleIDNSString玩家角色ID
roleNameNSString玩家角色名称
roleLevelNSString玩家角色等级
vipNSString玩家vip等级
notifyUrlNSString游戏服务器支付回调地址,渠道SDK支付成功,异步通知U8Server,U8Server根据该地址,通知游戏服务器发货
subNotifyUrlNSString游戏服务器订阅回调地址,渠道SDK订阅成功,异步通知U8Server,U8Server根据该地址,通知游戏服务器发货
extensionNSString支付成功之后,U8Server通知游戏服务器时,原样返回给游戏服务器
productDetailsNSArray道具详情。非必填参数,但若需要填入该参数,请按照代码实例的内容进行编写

2.10 Naver社区

主页横幅功能

//参数:传入当前UIViewController
-(void)displayNaverBanner:(UIViewController *)mainView;

例子

[[U8SDK sharedInstance] displayNaverBanner:self];

维护用横幅

//参数:传入当前UIViewController
-(void)displaySorry:(UIViewController *)mainView;

例子

[[U8SDK sharedInstance] displaySorry:self];

跳转公告栏

//参数:mainView 传入当前UIViewController
//参数:boardId 公告栏ID
-(void)displayBoard:(UIViewController *)mainView boardId:(NSNumber *)boardId;

例子

[[U8SDK sharedInstance] displayNaverBoard:self boardId:@(1)];

2.11 数数上报

2.11.1 数数科技用户属性设置

//eventType: 0:发送事件;1:用户数据上报set;2:用户数据上报setOnce;3:用户数据上报add;4.公共属性上报;6.一次性事件上报
//trackName:事件名称,当eventType=0或eventType=6时必传,其他情况可不传
//infoDic :上报属性数据。当eventType=0或eventType=6时,infoDic可不传;其他情况必传,字典项
-(void)submitTAInfo:(int)eventType trackName:(NSString *)trackName info:(NSDictionary *)infoDic

2.11.2 获取数数预置属性

返回事件预置属性的Key以"#"开头

-(NSDictionary *)getTAPresetProperties;

2.12 问卷功能接口

初始化问卷

参数
roleID : 角色id
serverID : 服务器id
callbackUrl : 问卷奖励回调地址
-(void)initUserSurver:(NSString *)roleID serverID:(NSString *)serverID callbackUrl:(NSString *)callbackUrl

若有问卷可以显示将收到OnInitUserSurveySuccess回调,此时可显示进入问卷中心入口

打开问卷中心界面

若游戏收到OnInitUserSurveySuccess回调可显示问卷中心入口,此时可以调用以下方法

-(void) openUserSurvey;

2.13 激励视频广告接口

参数名称参数说明是否必填
productName广告位置,可用来标识具体广告位置,需在IronSource后台配置, 为空时,由IronSource返回默认视频奖励
roleID游戏角色ID
extra游戏透传参数,在服务端回调时会原样返回
callbackUrl用户激励视频回调地址
NSDictionary *dic = @{
@"productName" : @"xxx",
@"roleID":@"roleIDxxx",
@"extra":@"extraxxxxx"
@"callbackUrl":@"xxx"
};
[[U8SDK sharedInstance] rewardedVideo:dic];

2.14 获取用户信息(选接)

-(void)getUserInfoBack:(void (^)(id result))successCallBack failCallBack:(void(^)(id error))failCallBack

参考:

[[U8SDK sharedInstance] getUserInfoBack:^(id result) {
NSLog(@"获取用户信息成功,info = %@",result);
} failCallBack:^(id error) {
NSLog(@"获取用户信息失败,error = %@",error);
}];
成功返回例子:
{
"userID" : 171795,
"sdkUserID" : "2F14BBEA-BBF3-4170-986F-20D3C0F1A507",
"country" : "TW",
"regTime" : "2022-07-11 15:10:59",
"currentCountry" : "TW",
"retainedDays" : 3,
"totalCharge" : 0,
"totalChargeNum" : 0
}
失败返回例子:
{
"state":3,
"errorMsg":"xxxxxx"
}

其中获取用户信息成功返回内容

参数名称参数说明
userID用户唯一标识
sdkUserID平台userid
country注册国家
firstChargeTime首次付费时间
lastChargeTime最近一次付费时间
regTime注册时间
retainedDays活跃天数
sdkUserID平台userid
totalCharge总充值金额
totalChargeNum总充值次数
currentCountry当前登录国家

2.15 切换账号接口

-(void)switchAccount;

2.16 绑定账号接口

-(void)bindAccount;

2.17 弹窗引导配置开启消息

弹窗触发频次: 1)每个设备一周(7天)最多弹出2次;超过2次后,一周内不再弹出 2)一天最多弹出一次(0-24点算一天) 3)用户开启后,该用户不再弹出 4)app删除重装后,重新计算次数

-(void)openNotificationAlert;

调用示例

[[U8SDK sharedInstance] openNotificationAlert];

3.AppDelegate事件处理

需要在AppDelegate以下对应的生命周期方法中调用U8SDK种对应这些方法:

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[[U8SDK sharedInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo
{
[[U8SDK sharedInstance] application:application didReceiveRemoteNotification:userInfo];
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
[[U8SDK sharedInstance] application:application didReceiveRemoteNotification:userInfo];
}
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[[U8SDK sharedInstance] application:application didReceiveLocalNotification:notification];
}
- (void)applicationWillResignActive:(UIApplication *)application {
[[U8SDK sharedInstance] applicationWillResignActive:application];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[U8SDK sharedInstance] applicationDidEnterBackground:application];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[U8SDK sharedInstance] applicationWillEnterForeground:application];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[U8SDK sharedInstance] applicationDidBecomeActive:application];
}
- (void)applicationWillTerminate:(UIApplication *)application {
[[U8SDK sharedInstance] applicationWillTerminate:application];
}
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [[U8SDK sharedInstance] application:application handleOpenURL:url];
}
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [[U8SDK sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}

需要在AppDelegate中还需遵循UNUserNotificationCenterDelegate协议,并在下列协议声明方法中调用U8SDK方法响应这些方法

AppDelegate.h

#import <UserNotifications/UNUserNotificationCenter.h>
#import <UserNotifications/UNNotification.h>
#import <UserNotifications/UNNotificationContent.h>
#import <UserNotifications/UNNotificationRequest.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate>

@property (strong, nonatomic) UIWindow *window;


@end

AppDelegate.m

/**
UNUserNotificationCenter delegate
*/
-(void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
NSDictionary *userInfo = notification.request.content.userInfo;
NSLog(@"userInfo1 = %@",userInfo);
return [[U8SDK sharedInstance] userNotificationCenter:center willPresentNotification:notification withCompletionHandler:completionHandler];
}

-(void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)(void))completionHandler{
return [[U8SDK sharedInstance] userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler];
}

4.设置U8SDK回调代理

在初始化成功后, 还需要设置U8SDK的回调函数, 回调对象需要实现U8SDKDelegate的各个接口

[[U8SDK sharedInstance] setDelegate:self];

渠道SDK中初始化成功,登录成功,登出成功,支付成功等,会回调到该接口。 可以参考u8sdkdemo中DemoViewController.m中这些接口的实现。

-(UIView *)GetView
{
return [self GetViewController].view;
}
-(UIViewController *)GetViewController
{
return self;
}

4.1 初始化成功回调

初始化成功后再进行登录操作。

-(void) OnPlatformInit:(NSDictionary*)param
{
[self SendCallback:"OnInitSuc" withParams:param];
}

数数访客ID,游戏服务端上报数数数据用到,初始化成功后可以获取

- (NSString *)getDistinctID;

//例子
NSString *distincetId = [[U8SDK sharedInstance] getDistinctID];
NSLog(@"distincetId %@",distincetId);

AppsFlyer UID,初始化成功后可以获取

- (NSString *)getAfID;

//例子
NSString *afId = [[U8SDK sharedInstance] getAfID];
NSLog(@"afId = %@",afId);

4.2 登录回调

//param(NSDictionary类型)中的参数如下:
//userID:U8Server生成的唯一用户ID
//sdkUserID:渠道SDK平台用户唯一ID,游戏服务器需要将游戏账户ID和该sdkUserID进行绑定。
//username:U8Server生成的用户名,比如234234234.mco, 4353453453.baidu, 65756756756.uc
//sdkUserName:渠道SDK平台用户名,可能为空,部分渠道SDK没有返回用户名
//token:U8Server生成的会话ID,游戏服务器拿该字段去U8Server做二次登录验证
//extension:U8Server返回的扩展字段,部分渠道SDK需要,游戏中无需使用该字段的值
//timestamp:U8Server生成的时间戳,游戏服务器去U8Server做二次登录验证时,传给U8Server
//third_login_type 第三方登陆类型 0:游客 1:Google,2:facebook,3:apple
-(void) OnUserLogin:(NSDictionary*)param
{
[self SendCallback:"OnLoginSuc" withParams:param];
}

4.3 支付回调

一般不需要做逻辑处理,最终支付成功,以U8Server回调通知到游戏服务器为准。 param返回值包括state与extension 其中state为支付状态

state值参数说明
0成功
1用户取消支付
2支付失败,网络错误
3支付失败,支付标识非法
4支付失败,支付信息缺失
//无参数
-(void) OnPayPaid:(NSDictionary*)param
{
[self SendCallback:"OnPaySuc" withParams:param];
}

4.4 切换账号回调

//param(NSDictionary类型)中的参数如下:
//userID:U8Server生成的唯一用户ID
//sdkUserID:渠道SDK平台用户唯一ID,游戏服务器需要将游戏账户ID和该sdkUserID进行绑定。
//username:U8Server生成的用户名,比如234234234.uc,4353453453.baidu,65756756756.360
//sdkUserName:渠道SDK平台用户名,可能为空,部分渠道SDK没有返回用户名
//token:U8Server生成的会话ID,游戏服务器拿该字段去U8Server做二次登录验证
//extension:U8Server返回的扩展字段,部分渠道SDK需要,游戏中无需使用该字段的值
//timestamp:U8Server生成的时间戳,游戏服务器去U8Server做二次登录验证时,传给U8Server
//third_login_type 第三方登陆类型 0:游客 1:Google,2:facebook,3:apple
-(void)OnSwitchAccountBack:(NSDictionary *)accoutInfo{
NSLog(@"切换账号 %@",accoutInfo);
}

4.5 事件上报回调

-(void)OnEventCustom:(NSString *)eventName params:(NSDictionary *)params{
NSLog(@"event Name %@ params %@",eventName,params);
}

4.6 Firebase 云消息

提供OnFBMessageTokenBack回调方法,该方法可以获取firebase的token字段

-(void)OnFBMessageTokenBack:(NSString *)token{
NSLog(@"fireBase token %@",token);
}

4.7 订阅恢复客户端回调

//state:回调状态,0:成功,1:失败
//restoreArray:成功时返回需要恢复订阅的商品id
-(void) OnRestoreCallback:(NSInteger)state restoreArray:(NSMutableArray *)restoreArray{
NSLog(@"demo点击订阅恢复返回");
}

4.8 问卷初始化回调

无返回参数,问卷中心存在问卷将回调该函数

-(void) OnInitUserSurveySuccess{
NSLog(@"可以打开问卷中心");
}

若无问卷或初始化问卷失败。将回调该函数

- (void)OnInitUserSurveyFail{
NSLog(@"无问卷");
}

4.9 激励视频回调

//state:success:视频观看成功,fail:视频观看失败,open:视频打开,end:视频结束,star:视频开始,close:视频关闭,click:视频点击
//若视频观看成功返回奖励金额:rewardAmount
//若视频观看成功返回奖励名称:rewardName
//若视频观看失败返回错误码和错误信息:error、msg
//若state返回close,将会返回isNeedServerNotice,该参数判断是否需要服务端通知发放奖励,1 是有服务端通知,0 是没有服务端通知
-(void)OnRewardedVideoBack:(NSDictionary *)videoInfo{
NSLog(@"激励视频返回 %@",videoInfo);
}

4.9 账号绑定回调

//param(NSDictionary类型)中的参数如下:
//userID:U8Server生成的唯一用户ID
//sdkUserID:渠道SDK平台用户唯一ID,游戏服务器需要将游戏账户ID和该sdkUserID进行绑定。
//username:U8Server生成的用户名,比如234234234.uc,4353453453.baidu,65756756756.360
//sdkUserName:渠道SDK平台用户名,可能为空,部分渠道SDK没有返回用户名
//token:U8Server生成的会话ID,游戏服务器拿该字段去U8Server做二次登录验证
//extension:U8Server返回的扩展字段,部分渠道SDK需要,游戏中无需使用该字段的值
//timestamp:U8Server生成的时间戳,游戏服务器去U8Server做二次登录验证时,传给U8Server
//third_login_type 第三方登陆类型 0:游客 1:Google,2:facebook,3:apple
-(void)OnBindAccountBack:(NSDictionary *)accountInfo{
NSLog(@"绑定账号 %@",accountInfo);
}

上面代码写好之后, 这个xcode就是以后打渠道包的母工程。 接下来,就可以通过U8SDK一键打包工具, 打出各个渠道的渠道包。