海外游戏对接文档--iOS
版本
当前版本及SDK下载
当前版本 3.3.0 历史版本
该SDK集成了谷歌、Facebook、Apple第三方登录功能,若应用内自带谷歌、Facebook、Apple登录,运行程序可能会出现 "引用多个第三方库"而引发冲突,
SDK功能
- 初始化
- 登录
- 用户中心(绑定、切换、游戏社区、问卷奖励)
- 广告
- 信息上报(包含adjust、Firebase、数数上报)
- 苹果内购
- 商城评价
- Firebase云消息功能
- 数数科技用户信息上报
- 客服功能
1.工程配置
1.1 U8接入与更新
游戏若需要自主出包,此点必读。若为渠道代为出包,该内容可不读。
1.1.1 游戏首次接入
1.游戏可以向运营拿到一份对接文件夹(下文统称为配置目录),具体内容如下图所示:
文件名 | 描述 |
---|---|
common | 游戏配置,请将该文件放入u8test目录下,替换原有的common文件 |
channels | 游戏渠道配置,请将该文件放入u8test目录下,替换原有的channels文件 |
U8SDKCore.framework | U8SDK |
REAME.md | 说明文件,内有sdk下载链接,必看 |
GoogleService-Info.plist | 谷歌配置文件。请将该文件放入Plugins/U8SDK_MCOOS/SDK目录下 |
游戏可以打开README.md查看打包工具和第三方SDK的下载地址,将得到一份包含打包工具与第三方SDK的文件(下文统称为打包目录),具体内容如下:
文件夹目录 | 描述 |
---|---|
buildscript | U8打包脚本 |
Core | U8Core层工程 |
Plugins | 插件层工程 |
u8test | 包含游戏各渠道配置信息 |
Plugins/U8SDK_MCOOS 文件目录详解
文件名 | 描述 |
---|---|
xcode_process.py | 渠道打包脚本 |
libU8SDK_MCOOS.a | MCOOS渠道SDK |
SDK | 第三方SDK |
U8SDK_MCOOS | 渠道代码 |
U8SDK_MCOOS.xcodeproj | 渠道工程 |
2.更换游戏配置参数 将配置目录下的common文件夹直接替换打包目录下的u8test/common文件夹
将配置目录下的channels文件夹直接替换打包目录下的u8test/channels文件夹
首次对接的游戏必须完成以上步骤,请参照1.2内容进行U8打包
1.1.2 游戏更新渠道信息
1.游戏可以向运营拿到一份对接更新文件夹(下文统称为"更新配置目录"),具体内容如下图所示:
2.若渠道参数需要更新请做如下操作
将"更新配置目录"下的common文件夹直接替换"游戏打包目录"下的u8test/common文件夹
将"更新配置目录"下的channels文件夹直接替换"游戏打包目录"下的u8test/channels文件夹
3.若渠道有SDK更新 游戏可以打开README.md查看打包工具和第三方SDK的下载地址,将得到一份包含打包工具与第三方SDK的文件(下文统称为"更新打包目录"),具体内容如下:
将对"更新打包目录"下的Plugins/U8SDK_MCOOS文件夹直接替换"游戏打包目录下"的Plugins/U8SDK_MCOOS文件夹
完成以上步骤后,请参照1.2内容进行U8打包
1.2 使用脚本打包
若不使用脚本打包,请参考此说明手动处理
项目需使用U8工具进行打包,请按照以下步骤进行U8打包
- 将U8打包工具放在任意位置
- cd进入buildscript目录,执行以下代码
./build.py 游戏工程的xcodeproj文件地址 ../u8test -n
例子
./build.py /Users/game_u8/u8test/U8SDKDemo/U8SDKDemo.xcodeproj ../u8test -n
- 运行后会选择渠道,输入‘MCOOS’
- 成功后会生成 工程名.MCOOS包
- 使用XCode打开 工程名.MCOOS包,填入开发者账号
1.3 使用CocoaPods引入SDK
CocoaPods是一个用来帮助我们管理第三方依赖库的工具,他可以解决库与库之间的依赖关系,下载库的源码,同时通过创建一个 Xcode 的 workspace 来将这些第三方库与我们的工程连接起来,方便开发使。如果还未安装Cocoapods环境,请参考CocoaPods官方教程。
选择CocoaPods接入,需要用到的下列pod信息,请根据以下步骤集成并确认:
1、修改 /Plugins/U8SDK_MCOOS 目录下xcode_process.py的内容,将下面这部分内容进行删除
"files": [
"libU8SDK_MCOOS.a",
],
"folders": [
"SDK"
],
按照 1.2 使用脚本打包 进行操作,该脚本将执行一些xcode手动配置工作
通过页面输出的pod内容,修改xcode工程的Podfile文件, 注:请pod对应的SDK及Adapter库有版本依赖,pod语句中请添加SDK版本号
# U8SDK
pod 'MCOOSSDK'
pod 'U8MCOOSSDK'
# Firebase
pod 'FirebaseAnalytics'
pod 'FirebaseAuth'
pod 'FirebaseFirestore'
pod 'FirebaseMessaging'
#AppsFlyer
pod 'AppsFlyerFramework'
# Google-Sign
pod 'GoogleSignIn','5.0.2'
pod 'GoogleUtilities'
# FB
pod 'FBSDKCoreKit/Swift'
pod 'FBSDKLoginKit/Swift'
# sskj
pod 'ThinkingSDK'
# IronSource
pod 'IronSourceSDK','7.5.0.0'
pod 'IronSourceAppLovinAdapter','4.3.40.3'
pod 'IronSourceFacebookAdapter','4.3.43.0'
pod 'IronSourceAdMobAdapter','4.3.47.0'
pod 'IronSourcePangleAdapter','4.3.23.1'
pod 'IronSourceUnityAdsAdapter','4.3.31.2'
# adjust
pod 'Adjust', '~> 4.33.3'
# apiHelp
pod 'AIHelpSDK', '~>3.5.2'
1.4 其他配置
SDK包含苹果登录功能,需要在xcode工程的Signing&Capabilities界面加入Sign in with Apple功能。
添加swift文件
SDK包含Facebook登录功能,需要在xcode工程新增swift文件,xcode会自动加入桥头文件。
消息推送配置
1.5 问卷功能
需要在surveyHero创建账号,并制作问卷。
SurveyHero文档链接: https://developer.surveyhero.com/api/
服务端回调请填写该回调:https://ioshk-api.m-co.cn/survey_webhook_response
2.SDK接口
所有接口调用,都通过U8SDK单例类来调用。引入头文件。
#import <U8SDKCore/U8SDK+AppDelegate.h>
2.0 生命周期(必接)
需要在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];
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
return [[U8SDK sharedInstance] application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
}
需要在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];
}
2.1 初始化(必接)
初始化应该在程序启动时调用, 也就是在didFinishLaunchingWithOptions方法里
#import <U8SDKCore/U8SDK+AppDelegate.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[U8SDK sharedInstance] setDelegate:self];
NSDictionary *sdkconfig = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"U8SDK"];
[[U8SDK sharedInstance] initWithParams:sdkconfig];
[[U8SDK sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
[[U8Analytics sharedInstance] startLevel:@"1"];
return YES;
}
初始化成功详情请见3.1 初始化成功回调
2.2 登录接口(必接)
该接口参数可以为空,默认采用IDFV值。 登录接口需要在3.1 初始化成功回调里调用
[[U8SDK sharedInstance] loginCustom:@""];
登录回调详情请见3.2 登录回调
2.3 登出接口
[[U8SDK sharedInstance] logout];
2.4 个人中心接口
该功能涉及到问卷功能的展示,需要在"进入游戏"后调用。
[[U8SDK sharedInstance] showAccountCenter];
2.5 上报信息接口(必接)
接口:
-(void) submitExtraData:(U8UserExtraData*)data;
其中,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 |
调用示例:
U8UserExtraData* extraData = [[U8UserExtraData alloc] init];
extraData.dataType = TYPE_ENTER_GAME;
extraData.roleID = @"testRole";
extraData.roleName = @"角色名称";
extraData.serverID = 1;
extraData.serverName = @"第一区";
extraData.roleLevel = @"1";
extraData.vip = 5;
extraData.moneyNum = 100;
extraData.roleCreateTime = time(NULL);
extraData.roleLevelUpTime = time(NULL)
//extraData.eventName = @"af_xxxxxx"; //若dataType为TYPE_OTHER_EVENT时,eventName为必填项
[[U8SDK sharedInstance] submitExtraData:extraData];
选择服务器时,因为还没有进入游戏,无法知道角色数据,extraData中只需要传入服务器信息即可。
关于U8UserExtraData 数据结构,其中设备加载过程需填写loadingEvent字段值
当data_type值为TYPE_OTHER_EVENT时,将会上报AF、Firebase或adjust事件,事件名只能由数字、字母和下划线组成
参数名称 | 参数类型 | 参数说明 |
---|---|---|
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等级,且该参数需要传入纯数字,例如1、2、3 |
loadingEvent | String | 表示加载过程的不同阶段,格式为loading_xxx |
eventName | String | 事件名,当data_type值为TYPE_OTHER_EVENT时必填 |
param | NSDictionary | af上报事件的参数 |
customData | NSDictionary | 自定义数据,格式:{'key':'value', 'key':'value'} |
userTags | NSArray | 用户标签 |
事件上报回调详情请见3.5 事件上报回调
2.6 支付充值(必接)
支付接口,回调详情请见3.3 支付回调,但一般不需要做逻辑处理,最终支付结果,以U8Server回调通知到游戏服务器为准
-(void) pay:(U8ProductInfo*) profuctInfo;
U8ProductInfo对象:
参数名称 | 参数类型 | 参数说明 |
---|---|---|
productId | NSString | 充值商品ID,游戏内的商品ID |
productName | NSString | 商品名称,比如100元宝,500钻石... |
productDesc | NSString | 商品描述,比如 充值100元宝,赠送20元宝 |
price | Number | 充值金额{单位:美元} |
buyNum | NSInteger | 购买数量,一般都是1 |
coinNum | NSInteger | 玩家当前身上剩余的游戏币 |
userName | NSString | 玩家唯一标识 |
serverId | NSString | 玩家所在服务器的ID |
serverName | NSString | 玩家所在服务器的名称 |
roleID | NSString | 玩家角色ID |
roleName | NSString | 玩家角色名称 |
roleLevel | NSString | 玩家角色等级 |
vip | NSString | 玩家vip等级,且该参数需要传入纯数字,例如1、2、3 |
notifyUrl | NSString | 游戏服务器支付回调地址,渠道SDK支付成功,异步通知U8Server,U8Server根据该地址,通知游戏服务器发货 |
subNotifyUrl | NSString | 游戏服务器订阅回调地址,渠道SDK订阅成功,异步通知U8Server,U8Server根据该地址,通知游戏服务器发货 |
extension | NSString | 支付成功之后,U8Server通知游戏服务器时,原样返回给游戏服务器 |
productDetails | NSArray | 道具详情。非必填参数,但若需要填入该参数,请按照代码实例的内容进行编写 |
调用示例:
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];
2.7 商城评价
需要传入"触发条件",示例如下:
[[U8SDK sharedInstance] storeReview:@"test_test"];
2.8 订阅恢复
用户点击订阅恢复时,游戏需传入的参数。 params(NSDictionary类型)中的参数如下:
参数名称 | 参数说明 |
---|---|
extra | 订阅恢复时,游戏透传的参数 |
serverId | 玩家所在服id |
[[U8SDK sharedInstance] restoreCompletedTransactions:params];
订阅恢复客户端回调详情请见 3.7 订阅恢复客户端回调
2.9 获取商品信息
海外游戏可以调用该接口获取本地化商品信息。商品信息根据AppStore用户账号地区来决定。
[[U8SDK sharedInstance] getProductsInfo];
商品信息回调详情请见 3.11 商品信息回调
2.10 Naver社区
主页横幅功能
传入参数说明:
参数名称 | 参数说明 |
---|---|
mainView | 传入当前UIViewController |
-(void)displayNaverBanner:(UIViewController *)mainView;
例子
[[U8SDK sharedInstance] displayNaverBanner:self];
维护用横幅
传入参数说明:
参数名称 | 参数说明 |
---|---|
mainView | 传入当前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以"#"开头。 其中"#install_time"是日期数据类型,如果直接将NSDictionary转为json字符串会导致程序崩溃。建议先将"#install_time"转化为字符串类型,再将NSDictionary转为json字符串-(NSDictionary *)getTAPresetProperties;
2.12 问卷功能接口
初始化问卷
传入参数说明:
参数名称 | 参数说明 |
---|---|
roleID | 角色id |
serverID | 服务器id |
callbackUrl | 问卷奖励回调地址 |
-(void)initUserSurver:(NSString *)roleID serverID:(NSString *)serverID callbackUrl:(NSString *)callbackUrl
问卷初始化回调详情请见 3.8 问卷初始化回调。若有问卷,将收到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];
激励视频广告回调详情请见 3.9 激励视频回调
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 切换账号接口
调用该接口,会显示SDK内置的切换账号界面。
-(void)switchAccount;
切换账号回调详情请见 3.4 切换账号回调
2.16 绑定账号接口
调用该接口,会显示SDK内置的绑定账号界面。
-(void)bindAccount;
账号绑定回调详情请见 3.10 账号绑定回调
2.17 弹窗引导配置开启消息
- 每个设备一周(7天)最多弹出2次;超过2次后,一周内不再弹出
- 一天最多弹出一次(0-24点算一天)
- 用户开启后,该用户不再弹出
- app删除重装后,重新计算次数
接口:
-(void)openNotificationAlert;
调用示例
[[U8SDK sharedInstance] openNotificationAlert];
2.18 设置调试模式
该接口需在init接口之后调用,避免出现部分日志没打印的情况。
-(void)setLogDebugMode:(BOOL)enable;
调用示例
//关闭调试模式
[[U8SDK sharedInstance] setLogDebugMode:NO];
//开启调试模式
[[U8SDK sharedInstance] setLogDebugMode:YES];
2.19 客服功能
2.19.1 是否开启FAQ功能
判断游戏是否开启FAQ功能,请在Init通知成功后调用。若运营人员在发行后台开启FAQ模块开关,该方法将返回YES,若运营人员未开启FAQ模块,该方法将返回NO。
-(BOOL)getShowFAQ;
调用示例
BOOL isOpenShowFAQ = [[U8SDK sharedInstance] getShowFAQ];
2.19.2 是否开启客服系统功能
判断游戏是否开启客服系统功能,请在Init通知成功后调用。若运营人员在发行后台开启"客服系统"开关,该方法将返回YES,若运营人员未开启"客服系统"模块,该方法将返回NO。
-(BOOL)getShowConversation;
调用示例
//判断游戏是否开启客服系统功能
BOOL isOpenConversation = [[U8SDK sharedInstance] getShowConversation];
2.19.3 FAQ模块
点击进入FAQ页面
-(void)showFAQ;
调用示例
//打开FAQ模块
[[U8SDK sharedInstance] showFAQ];
2.19.4 客服系统模块
点击进入客服系统页面
-(void)showConversation;
调用示例
[[U8SDK sharedInstance] showConversation];
2.20 获取用户虚拟币信息
海外游戏可以调用该接口获取用户虚拟币信息。
[[U8SDK sharedInstance] getViurualCoinInfo];
用户虚拟币信息回调详情请见 3.13 用户虚拟币信息回调
2.21 Facebook分享功能接口
- Facebook分享接口,暂时只做了分享图片链接接口,并且一次只能分享一张图片。
U8ShareInfo参数内容
参数名称 | 参数类型 | 参数说明 |
---|---|---|
type | U8ShareType | 其中纯文本为U8ShareTypeText=0,图片为U8ShareTypeImage=1,视频为U8ShareTypeVideo=2 |
imgUrl | NSString | 图片链接,当type为U8ShareTypeImage(图片)时必传 |
U8ShareInfo *shareInfo = [[U8ShareInfo alloc] init];
[shareInfo setValue:@"https://images.pexels.com/photos/21936231/pexels-photo-21936231.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" forKey:@"imgUrl"];
[shareInfo setValue:@1 forKey: @"type"];
[[U8SDK sharedInstance] share:shareInfo];
Facebook分享回调详情请见 3.14 Facebook分享回调
3.U8SDK回调
3.0 设置U8SDK回调代理
在初始化之前, 还需要设置U8SDK的回调函数, 回调对象需要实现U8SDKDelegate的各个接口 调用示例:
[[U8SDK sharedInstance] setDelegate:self];
渠道SDK中初始化成功,登录成功,登出成功,支付成功等,会回调到该接口。 可以参考u8sdkdemo中DemoViewController.m中这些接口的实现。
其中GetView、GetViewController回调需要实现,否则程序将无法正常运行
-(UIView*) GetView;
-(UIViewController*) GetViewController;
调用示例:
-(UIView *)GetView
{
return [self GetViewController].view;
}
-(UIViewController *)GetViewController
{
//return [UIApplication sharedApplication].keyWindow.rootViewController;
return self;
}
3.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);
3.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];
}
3.3 支付回调
一般不需要做逻辑处理,最终支付成功,以U8Server回调通知到游戏服务器为准。 param返回值包括state与extension 其中state为支付状态
state值 | 参数说明 |
---|---|
0 | 成功 |
1 | 用户取消支付 |
2 | 支付失败,网络错误 |
3 | 支付失败,支付标识非法 |
4 | 支付失败,支付信息缺失 |
-(void) OnPayPaid:(NSDictionary*)param
{
[self SendCallback:"OnPaySuc" withParams:param];
}
3.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);
}
3.5 事件上报回调
-(void)OnEventCustom:(NSString *)eventName params:(NSDictionary *)params{
NSLog(@"event Name %@ params %@",eventName,params);
}
3.6 Firebase 云消息
提供OnFBMessageTokenBack回调方法,该方法可以获取firebase的token字段
-(void)OnFBMessageTokenBack:(NSString *)token{
NSLog(@"fireBase token %@",token);
}
3.7 订阅恢复客户端回调
回调返回内容:
名称 | 说明 |
---|---|
state | 回调状态,0:成功,1:失败 |
restoreArray | 成功时返回需要恢复订阅的商品id |
-(void) OnRestoreCallback:(NSInteger)state restoreArray:(NSMutableArray *)restoreArray{
NSLog(@"demo点击订阅恢复返回");
}
3.8 问卷初始化回调
无返回参数,问卷中心存在问卷将回调该函数
-(void) OnInitUserSurveySuccess{
NSLog(@"可以打开问卷中心");
}
若无问卷或初始化问卷失败。将回调该函数
- (void)OnInitUserSurveyFail{
NSLog(@"无问卷");
}
3.9 激励视频回调
返回videoInfo(NSDictionary)包含以下内容:
名称 | 说明 |
---|---|
state:success | 视频观看成功,fail:视频观看失败,open:视频打开,end:视频结束,star:视频开始,close:视频关闭,click:视频点击 |
rewardAmount | 若视频观看成功返回奖励金额 |
rewardName | 若视频观看成功返回奖励名称 |
error | 若视频观看失败返回错误码 |
msg | 若视频观看失败返回错误信息 |
isNeedServerNotice | 若state返回close,将返回改值。该值判断是否需要服务端通知发放奖励,1 是有服务端通知,0 是没有服务端通知 |
-(void)OnRewardedVideoBack:(NSDictionary *)videoInfo{
NSLog(@"激励视频返回 %@",videoInfo);
}
3.10 账号绑定回调
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一键打包工具, 打出各个渠道的渠道包。
3.11 商品信息回调
需要传入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";
}
]
3.12 获取adjustID回调
当获取到adid或adid发生改变时,该回调接口会返回具体的adid值。
- (void)OnAdidBack:(NSString *)adid{
NSLog(@"adid back adid = %@",adid);
}
若游戏对接过程中想要单独获取adid值,可参考以下方法。但需注意,若未获取到adjustID时,该值可能为空,最好在OnAdidBack回调通知后再使用下面的方法获取adid。
NSString *adidStr = [U8SDK sharedInstance].adid;
3.13 用户虚拟币信息回调
需要传入NSDictionary参数。
其中NSDictionary中的参数如下:
参数名称 | 参数说明 |
---|---|
virtual_coin_name | 虚拟币名称 |
virtual_coin_num | 虚拟币数量 |
-(void)OnVirtualInfoBack:(NSDictionary *)virtualInfo{
NSLog(@"virtualCoin info %@",virtualInfo);
}
3.14 Facebook分享回调
返回参数shareInfo(NSDictionary)包含以下内容:
名称 | 说明 |
---|---|
state | 0=成功;1=失败;2=取消;3=开始分享;4=分享参数不齐全 |
platform | 1=Facebook |
msg | 若state=0,返回成功;若state不为0,返回错误原因 |
-(void) OnShareInfoBack:(NSDictionary *)shareInfo{
NSLog("share back %@",shareInfo);
}
4.历史版本具体说明
2.3.1版本
时间:2023年9月8日
更新内容:更新Facebook SDK版本,更新IronSource广告版本
SDK | SDK版本 | Adapter版本 |
---|---|---|
更新Facebook | - | - |
Ironsource | 7.5.0.0 | 4.3.40.3 |
10.7.0 | 4.3.47 | |
AppLovin | 11.10.1 | 4.3.40 |
6.14.0 | 4.3.42 | |
Pangle | 5.4.0.7 | 4.3.23 |
UnityAds | 4.8.0 | 4.3.31 |
更新流程:
- 若是从2.3.0进行更新,只需更新渠道SDK目录1.1.2 游戏更新渠道信息 第三点,更新后再使用U8脚本进行打包。
- 若是从2.3.0之前的版本进行更新,建议完整的按照1.1.2 游戏更新渠道信息说明进行更新。
- 若使用Cocoapods对接SDK,请更新Podfile文件内容。以下为Cocoapod 引用代码:
# IronSource
pod 'IronSourceSDK','7.5.0.0'
pod 'IronSourceAppLovinAdapter','4.3.40.3'
pod 'IronSourceFacebookAdapter','4.3.43.0'
pod 'IronSourceAdMobAdapter','4.3.47.0'
pod 'IronSourcePangleAdapter','4.3.23.1'
pod 'IronSourceUnityAdsAdapter','4.3.31.2'