跳到主要内容

iOS SDK接口说明(OC语言)

1 获取SDK全局单例

说明:本SDK基于单例模式设计,必须使用该接口来获取SDK的唯一实例,才能正常使用SDK。后续接口(除获取SDK版本号接口外)都必须通过单例来调用

接口:

/// 获取全局SDK单例
+ (instancetype)sharedInstance;

调用方式:

[TopSDK sharedInstance];

2 初始化接口

说明:该接口用于进行SDK初始化操作,必须在调用SDK其他接口前尽早调用,初始化结果通过设置的delegate进行回调

接口:

/// 初始化方法(务必尽早调用)
/// @param appId 分配的应用id
- (void)initWithAppId:(NSString *)appId;

参数:

  • appId:由我方分配给CP的对应的应用id

  • completion:初始化结果回调

推荐在AppDelegate.mapplication:didFinishLaunchingWithOptions:方法内进行初始化,如:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[TopSDK.sharedInstance initWithAppId:@"132168550394630144"];
return YES;
}

3 设置Delegate&Protocol

说明:通过设置代理的方式,获取事件调用的结果,如果要获取相关接口的回调,必须在调用该接口前设置代理(如:要获取initWithAppId:接口的回调,则必须在调用初始化接口前设置代理)

协议:

@required

/// SDK初始化结果回调
/// @param success 是否初始化成功
- (void)initSDKWithResult:(BOOL)success;

/// 登录成功回调
/// @param user 登录用户对象
- (void)didLoginSuccessWithUser:(TOPUser *)user;

/// 登录失败回调
/// @param error 错误信息
- (void)didLoginFailureWithError:(NSError *)error;

/// 支付成功回调
/// @param payment 支付信息
- (void)didPaySuccessWithPayment:(TOPPayment *)payment;

/// 支付失败回调
/// @param payment 支付信息
/// @param error 错误信息
- (void)didPayFailureWithPayment:(TOPPayment *)payment
error:(NSError *)error;

/// 登出成功回调
- (void)didLogoutSuccess;

/// 登出失败回调
/// @param error 错误信息
- (void)didLogoutFailureWithError:(NSError *)error;

@optional

/// 获取用户信息成功回调
/// @param user 用户信息
- (void)didGetUserInfoSuccessWithUser:(TOPUser *)user;

/// 获取用户信息失败回调
/// @param error 错误信息
- (void)didGetUserInfoFailureWithError:(NSError *)error;

/// 获取用户账号绑定信息成功回调
/// @param platforms 账号绑定的平台列表
- (void)didGetUserBindInfoSuccessWithPlatforms:(NSArray *)platforms;

/// 获取用户账号绑定信息失败回调
/// @param error 错误信息
- (void)didGetUserBindInfoFailureWithError:(NSError *)error;

/// 绑定账号成功回调
/// @param platform 绑定的平台
- (void)didBindSuccessWithPlatform:(NSString *)platform;

/// 绑定账号失败回调
/// @param platform 绑定的平台
/// @param error 错误信息
- (void)didBindFailureWithPlatform:(NSString *)platform error:(NSError *)error;

/// 查询商品信息成功
/// @param skuList 查询的sku列表
/// @param details 商品详情列表
- (void)didSuccessQuerySkuDetailsWithSkuList:(NSArray *)skuList details:(NSArray *)details;

/// 查询商品信息失败
/// @param skuList 查询的sku列表
/// @param error 错误信息
- (void)didFailedQuerySkuDetailsWithSkuList:(NSArray *)skuList error:(NSError *)error;

为获取这些事件回调,请将需要处理上述回调事件的对象设置为代理并支持TopSDKDelegate协议

比如需要在AppDelegate类中处理这些事件,则需在AppDelegate.m中进行如下设置:

#import "AppDelegate.h"
#import <TOPSDK/TopSDK.h>
// 1 在interface后面声明支持协议TopSDKDelegate
@interface AppDelegate ()<TopSDKDelegate>

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 2 在initWithAppId:方法前设置delegate
TopSDK.sharedInstance.delegate = self;
[TopSDK.sharedInstance initWithAppId:@"132168550394630144"];
[TopSDK.sharedInstance application:application didFinishLaunchingWithOptions:launchOptions];
return YES;
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
return [TopSDK.sharedInstance application:app openURL:url options:options];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [TopSDK.sharedInstance application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}

#pragma mark - TopSDKDelegate

- (void)initSDKWithResult:(BOOL)success {
if (success) {
// 初始化成功
} else {
// 初始化失败
}
}

- (void)didLoginSuccessWithUser:(TOPUser *)user {
// 登录成功,用户信息在user中
}

- (void)didLoginFailureWithError:(NSError *)error {
// 登录失败,error为错误信息
}

- (void)didLogout {
// 登出成功
}

- (void)didPaySuccessWithPayment:(TOPPayment *)payment {
// 支付成功,购买的商品信息在payment
}

- (void)didPayFailureWithPayment:(TOPPayment *)payment
error:(NSError *)error {
// 支付失败,购买的商品信息在payment,error为错误信息
}

- (void)didGetUserInfoSuccessWithUser:(TOPUser *)user {
// 获取用户信息成功,user为用户信息
}

- (void)didGetUserInfoFailureWithError:(NSError *)error {
// 获取用户信息失败,error为错误信息
}

- (void)didGetUserBindInfoSuccessWithPlatforms:(NSArray *)platforms {
// 获取用户绑定信息成功,绑定的平台类型包含在platforms中,例:@[@"APPLE",@"GOOGLE"]
}

- (void)didGetUserBindInfoFailureWithError:(NSError *)error {
// 获取用户绑定信息失败,error为错误信息
}

- (void)didBindSuccessWithPlatform:(NSString *)platform {
// 绑定账号成功,platform为绑定的平台类型,如:GOOGLE
}

- (void)didBindFailureWithPlatform:(NSString *)platform error:(NSError *)error {
// 绑定账号失败,platform为绑定的平台类型,error为错误信息
}

- (void)didGetUserAgeComplianceSuccessWithCompliance:(TOPUserAgeCompliance *)compliance {
// 获取用户年龄合规功能成功",compliance为合规功能开关状态,包含以下属性:
/*
@property (nonatomic, assign) BOOL canPlay; //是否可以游玩游戏
@property (nonatomic, assign) BOOL canChat; //是否可以聊天
@property (nonatomic, assign) BOOL canAddFriend; //是否可以添加游戏内好友
@property (nonatomic, assign) BOOL canPurchase; //是否可以支付
@property (nonatomic, assign) BOOL canLootbox; //是否可以抽卡
@property (nonatomic, assign) BOOL canVoiceChat; //是否可以好友聊天
@property (nonatomic, assign) BOOL canSeeAds; //是否可以看广告
@property (nonatomic, assign) BOOL canShareUserData;//是否可以分享用户数据
*/
}

@end

4 登录接口

说明:调起SDK登录,登录结果会通过delegate进行回调(见 3 设置Delegate&Protocol)

接口:

/// 登录方法
- (void)login;

调用方式:

[[TopSDK sharedInstance] login];

5 登出接口

说明:进行SDK登出,登出成功会通过delegate进行回调(见 3 设置Delegate&Protocol)

接口:

/// 登出方法
- (void)logout;

调用方式:

[[TopSDK sharedInstance] logout];

6 支付接口

说明:调起苹果支付,支付结果会通过delegate进行回调(见 3 设置Delegate&Protocol)

接口:

/// 调起支付
/// @param payment 支付商品信息
/// @param roleInfo 支付角色信息
- (void)payWithPayment:(TOPPayment *)payment role:(TOPRoleInfo *)roleInfo;

参数:

  • payment:商品信息,调起支付时必须传入:商品id(productId),可选传入:商品价格(amount)、商品名称(productName)

  • roleInfo:角色信息

回调:

/// 支付成功回调
/// @param payment 支付信息
- (void)didPaySuccessWithPayment:(TOPPayment *)payment;

/// 支付失败回调
/// @param payment 支付信息
/// @param error 错误信息
- (void)didPayFailureWithPayment:(TOPPayment *)payment
error:(NSError *)error;

调用方式:

TOPPayment *payment = [TOPPayment new];
// 这里传入商品id,商品id需在苹果开发者网站进行配置
payment.productId = @"com.TopSDK.product.01";
payment.amount = 1.0;
payment.productName = @"一元礼包";
payment.developerPayload = @"透传字段";
// 传入角色信息
TOPRoleInfo *role = [TOPRoleInfo new];
role.roleName = @"小明"; // 角色名
role.roleLevel = @"101"; // 角色等级
role.roleId = @"1001"; // 角色id
role.vipLevel = @"10"; // vip等级
role.serverName = @"1区"; // 服务器名称

// 调起支付
[[TopSDK sharedInstance] payWithPayment:payment role:role];

7 唤起用户中心接口

说明:用于唤起用户中心页面,页面会以全屏方式覆盖在当前界面上

接口:

/// 主动唤起用户中心
- (void)enterUserCenter;

调用方式:

[[TopSDK sharedInstance] enterUserCenter];

8 获取用户信息界面接口

说明:在登录成功后,用于获取用户信息

接口:

/// 获取用户信息
- (void)getUserInfo;

回调:

/// 获取用户信息成功回调
/// @param user 用户信息
- (void)didGetUserInfoSuccessWithUser:(TOPUser *)user;

/// 获取用户信息失败回调
/// @param error 错误信息
- (void)didGetUserInfoFailureWithError:(NSError *)error;

调用方式:

[[TopSDK sharedInstance] getUserInfo];

9 获取账号绑定信息接口

说明:在登录成功后,用于获取当前登录用户的账号绑定信息

接口:

/// 获取账号绑定信息
- (void)getUserBindInfo;

回调:

/// 获取用户账号绑定信息成功回调
/// @param platforms 账号绑定的平台列表
- (void)didGetUserBindInfoSuccessWithPlatforms:(NSArray *)platforms;

/// 获取用户账号绑定信息失败回调
/// @param error 错误信息
- (void)didGetUserBindInfoFailureWithError:(NSError *)error;

调用方式:

[[TopSDK sharedInstance] getUserBindInfo];

10 绑定账号接口

说明:在登录成功后,用于绑定其他的第三方账号

接口:

/// 绑定账号
/// @param platform 需要绑定的第三方平台,如:TOPLoginPlatformGoogle,见TopSDKCommon.h
- (void)bindPlatform:(NSString *)platform;

参数:

  • platform:需要绑定的第三方平台,如:TOPLoginPlatformGoogle,具体见 5 支持三方账号类型

回调:

/// 绑定账号成功回调
/// @param platform 绑定的平台
- (void)didBindSuccessWithPlatform:(NSString *)platform;

/// 绑定账号失败回调
/// @param platform 绑定的平台
/// @param error 错误信息
- (void)didBindFailureWithPlatform:(NSString *)platform error:(NSError *)error;

调用方式:

[TopSDK.sharedInstance bindPlatform:TOPLoginPlatformGoogle];

11 账号删除接口

说明:为满足Apple商店审核要求,SDK提供账号删除功能,对接方可直接调用此接口进行SDK层面的账号删除,以满足审核要求

接口:

/// 主动唤起账号删除流程
- (void)accountDelete;

调用方式:

[[TopSDK sharedInstance] accountDelete];

回调:账号删除成功会进行SDK登出,会通过登出成功的delegate进行回调,建议收到登出成功时游戏进行登出操作,无需再次调用SDK的登出接口(见 3 设置Delegate&Protocol)

12 查询商品接口

说明:通过平台官方接口(AppStore)查询指定商品的详情

接口:

/// 查询商品信息
/// @param skuList 商品id列表
- (void)querySkuDetailsOut:(NSArray *)skuList;

参数:

  • skuList:需要查询的商品id列表

回调:

/// 查询商品信息成功
/// @param skuList 查询的sku列表
/// @param details 商品详情列表
- (void)didSuccessQuerySkuDetailsWithSkuList:(NSArray *)skuList details:(NSArray *)details;

/// 查询商品信息失败
/// @param skuList 查询的sku列表
/// @param error 错误信息
- (void)didFailedQuerySkuDetailsWithSkuList:(NSArray *)skuList error:(NSError *)error;

调用方式:

[[TopSDK sharedInstance] querySkuDetailsOut:@[
@"com.topsdk.product.01",
@"com.topsdk.product.02",
@"com.topsdk.product.03",
@"com.topsdk.product.04"
]];

13 应用生命周期事件接口

SDK需要获取应用的生命周期事件以进行后续处理,因此请在应用代理类(Unity一般为UnityAppController.mm,Cocos一般为AppDelegate.mm,iOS原生工程一般为AppDelegate.m)中添加对应的方法,具体如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[TopSDK.sharedInstance application:application didFinishLaunchingWithOptions:launchOptions];
return YES;
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
return [TopSDK.sharedInstance application:app openURL:url options:options];
}

// 仅iOS9以下版本需要添加
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [TopSDK.sharedInstance application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
[TopSDK.sharedInstance applicationDidEnterBackground:application];
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
[TopSDK.sharedInstance applicationWillEnterForeground:application];
}

如果App实现了UIWindowSceneDelegate,请在其应用代理类(一般为SceneDelegate.m)中添加如下方法:

- (void)sceneWillEnterForeground:(UIScene *)scene {
[TopSDK.sharedInstance sceneWillEnterForeground:scene];
}


- (void)sceneDidEnterBackground:(UIScene *)scene {
[TopSDK.sharedInstance sceneDidEnterBackground:scene];
}

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
[TopSDK.sharedInstance scene:scene openURLContexts:URLContexts];
}

14 获取SDK版本号

说明:用于获取SDK版本号的接口

接口:

/// 获取当前SDK的版本号
+ (NSString *)getSDKVersion;

调用方式:

NSString *sdkVersion = [TopSDK getSDKVersion];

15 支持三方账号类型

当前支持的三方账号类型如下(需接入对应的三方SDK后才可用):

三方账号类型
AppleTOPLoginPlatformApple
GoogleTOPLoginPlatformGoogle
FacebookTOPLoginPlatformFacebook
LineTOPLoginPlatformLine
NAVERTOPLoginPlatformNaver
SnapchatTOPLoginPlatformSnapchat
KakaoTOPLoginPlatformKakao
TwitterTOPLoginPlatformTwitter

16 事件上报接口

说明:MeetSDK 已内置 TOPData,用于事件上报至集成的数据平台,如 Appsflyer、Firebase、Adjust。以下为事件上报相关接口说明。其中登录、注册、支付事件由 MeetSDK 自动上报,无需额外调用;其余事件可按业务需要手动调用。

调用 SDK 前请先引用:

#import <TOPData/TOPData.h>

16.1 登录事件(MeetSDK自动上报)

说明:在用户登录时触发,此事件会上报至所有集成的数据平台(Appsflyer、Firebase、Adjust),无需自行调用。

接口:

+ (void)loginEventWithMethod:(NSString *)method;

参数:

  • method:登录使用的方法,比如:GOOGLEFACEBOOKGUEST

16.2 注册事件(MeetSDK自动上报)

说明:在新用户首次注册时触发,此事件会上报至所有集成的数据平台(Appsflyer、Firebase、Adjust),无需自行调用。

接口:

+ (void)signupEventWithMethod:(NSString *)method;

参数:

  • method:登录使用的方法,比如:GOOGLEFACEBOOKGUEST

16.3 支付事件(MeetSDK自动上报)

说明:在用户支付成功时触发,此事件会上报至所有集成的数据平台(Appsflyer、Firebase、Adjust),无需自行调用。

接口:

+ (void)purchaseEventWithData:(TOPPurchaseData *)data;

参数:

TOPPurchaseData 字段说明:

参数名类型介绍
revenuedouble价格,如:1.1
currencystring币种,如:USD
quantityint数量,默认1
productIdstring商品id,如:com.demo.item01
orderIdstring订单号,如:12131231231
receiptIdstring票据id,如:awdfaqwdfqcs

16.4 开始新手引导事件

说明:可选事件,建议在新手引导开始时上报,此事件会上报至所有集成的数据平台(Appsflyer、Firebase、Adjust)。

接口:

+ (void)tutorialBeginEvent;

16.5 完成新手引导事件

说明:可选事件,建议在新手引导结束时上报,此事件会上报至所有集成的数据平台(Appsflyer、Firebase、Adjust)。

接口:

+ (void)tutorialCompleteEvent;

16.6 升级事件

说明:可选事件,建议在游戏角色升级时上报,此事件会上报至所有集成的数据平台(Appsflyer、Firebase、Adjust)。

接口:

+ (void)levelUpEventWithLevel:(NSInteger)level
roleName:(NSString *)roleName;

参数:

参数名类型介绍
levelint等级,如:99
roleNamestring角色名,如:小黑

16.7 成就解锁事件

说明:可选事件,建议在游戏角色解锁成就时上报,此事件会上报至所有集成的数据平台(Appsflyer、Firebase、Adjust)。

接口:

+ (void)unlockAchievementEventWithAchievementId:(NSString *)achievementId;

参数:

参数名类型介绍
achievementIdstring成就id,如:100001

16.8 分享事件

说明:可选事件,建议在触发分享时上报,此事件会上报至所有集成的数据平台(Appsflyer、Firebase、Adjust)。

接口:

+ (void)shareEventWithMethod:(NSString *)method
contentType:(NSString *)contentType
contentId:(NSString *)contentId;

参数:

参数名类型介绍
methodstring分享渠道,如:Facebook、Twitter、Email...
contentTypestring分享内容类型,如:图片、链接、视频、文本
contentIdstring分享内容id,如:活动id

16.9 获得虚拟货币事件

说明:可选事件,建议在玩家获得虚拟货币时调用,此事件仅会上报至 Firebase。

接口:

+ (void)earnVirtualCurrencyEventWithName:(NSString *)name
count:(NSInteger)count;

参数:

参数名类型介绍
namestring虚拟货币名称,如:宝石、钻石
countint虚拟货币数量,如:100

16.10 支出虚拟货币事件

说明:可选事件,建议在玩家支出虚拟货币时调用,此事件仅会上报至 Firebase。

接口:

+ (void)spendVirtualCurrencyEventWithName:(NSString *)name
count:(NSInteger)count
goodsName:(NSString *)goodsName;

参数:

参数名类型介绍
namestring虚拟货币名称,如:宝石、钻石
countint虚拟货币数量,如:100
goodsNamestring购买的商品名称,如:包月会员

16.11 游戏关卡开始事件

说明:可选事件,建议在玩家开始关卡时调用,此事件仅会上报至 Firebase。

接口:

+ (void)levelStartEventWithLevelName:(NSString *)levelName;

参数:

参数名类型介绍
levelNamestring关卡名称,如:1-1

16.12 游戏关卡结束事件

说明:可选事件,建议在玩家结束关卡时调用,此事件仅会上报至 Firebase。

接口:

+ (void)levelEndEventWithLevelName:(NSString *)levelName
success:(BOOL)success;

参数:

参数名类型介绍
levelNamestring关卡名称,如:1-1
successBool是否成功

16.13 自定义事件上报

说明:如果以上模板事件不能满足业务需求,可使用该接口进行自定义事件上报。

接口:

+ (void)reportEvent:(NSString *)eventName
params:(NSDictionary *)params
channelType:(TOPDataChannelType)channelType;

参数:

参数名类型介绍
eventNamestring事件名
paramsJSON Object参数
channelTypeTOPDataChannelType上报渠道类型,默认 TOPDataChannelTypeAll

TOPDataChannelType 说明:

类型说明
TOPDataChannelTypeAll上报到所有接入的数据平台,如:Appsflyer、Firebase、Adjust
TOPDataChannelTypeAppsFlyer仅上报到 Appsflyer
TOPDataChannelTypeFirebase仅上报到 Firebase
TOPDataChannelTypeAdjust仅上报到 Adjust

17 设置用户合规/隐私偏好同意状态

说明:此接口为满足各地区隐私协议合规要求,弹窗设置用户的合规设置/隐私偏好同意状态

接口:

- (void)showComplianceSettings;

参数:无

调用方式:

[[TopSDK sharedInstance] showComplianceSettings];

18 获取用户合规开关状态接口

说明:此接口为满足美区合规要求,针对未成年用户,获取用户是否可以支付、聊天、加好友、抽卡等功能

接口:

- (TOPUserAgeCompliance *)getUserAgeCompliance;

参数:无

调用方式:

TOPUserAgeCompliance *ageCompliance = [[TopSDK sharedInstance] getUserAgeCompliance];

返回:用户合规功能开关的TOPUserAgeCompliance对象,包含以下属性

/*
@property (nonatomic, assign) BOOL canPlay; //是否可以游玩游戏
@property (nonatomic, assign) BOOL canChat; //是否可以聊天
@property (nonatomic, assign) BOOL canAddFriend; //是否可以添加游戏内好友
@property (nonatomic, assign) BOOL canPurchase; //是否可以支付
@property (nonatomic, assign) BOOL canLootbox; //是否可以抽卡
@property (nonatomic, assign) BOOL canVoiceChat; //是否可以好友聊天
@property (nonatomic, assign) BOOL canSeeAds; //是否可以看广告
@property (nonatomic, assign) BOOL canShareUserData;//是否可以分享用户数据
*/

19、请求家长授权接口

说明:此接口为满足美区合规要求,针对未成年用户,发送请求家长授权的功能

接口:

- (void)sendParentAuthorization;

参数:无

调用方式:

[[TopSDK sharedInstance] sendParentAuthorization];

返回:无

20 广告变现功能

20.1 功能说明

MeetSDK 广告变现模块支持激励视频广告和插屏广告,可选择接入 Google AdMob 或 AppLovin MAX。广告 SDK 及隐私同意流程由 MeetSDK 主初始化流程统一处理,必须等待 MeetSDK 初始化成功后再调用广告接口。

每个应用只能链接一个广告插件,不要同时引入 TOPAdMobPlugin.frameworkTOPMAXPlugin.framework。测试阶段请使用广告平台提供的测试广告位。

广告调用流程如下:

loadAd(adUnitID, adType, callback)
→ isAdReady(adUnitID)
→ showAd(adUnitID, viewController, callback)

adType 只在加载广告时传入。SDK 会根据 adUnitID 保存加载时的广告类型,因此检查和展示广告时不需要再次传入 adType

20.2 添加广告模块

TOPAdMobPlugin.frameworkTOPMAXPlugin.framework 与 MeetSDK 基础包一同加入工程,二选一链接。

根据使用的广告平台,在 Info.plist 中选择对应配置。

AdMob 参数配置

AdMob 需要配置 AdMob App ID,并将 IaaPlugin.name 设置为 AdMob

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxx~yyyyyyyy</string>

<key>TOPSDK</key>
<dict>
<key>IaaPlugin</key>
<dict>
<key>name</key>
<string>AdMob</string>
</dict>
</dict>

MAX 参数配置

MAX 需要将 IaaPlugin.name 设置为 MAX,并在 params 中配置 MAX SDK Key。由于 MAX 的隐私同意流程使用 Google UMP,还必须配置 AdMob App ID:

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxx~yyyyyyyy</string>

<key>TOPSDK</key>
<dict>
<key>IaaPlugin</key>
<dict>
<key>name</key>
<string>MAX</string>
<key>params</key>
<dict>
<key>SDK_KEY</key>
<string>YOUR_MAX_SDK_KEY</string>
</dict>
</dict>
</dict>

业务层不要重复调用 AdMob、MAX 或 UMP 的初始化方法。

20.3 广告类型

类型说明
TOPAdTypeRewarded激励视频广告。只应在收到 TOPAdEventRewarded 事件后发放游戏奖励。
TOPAdTypeInterstitial插屏广告。

20.4 加载广告接口

接口:

+ (void)loadAd:(NSString *)adUnitID
adType:(TOPAdType)adType
callback:(TOPIaaLoadCallback)callback;

说明:异步加载指定广告位。相同 adUnitID 在一次加载、检查和展示流程中必须对应同一种广告类型。

参数:

参数名类型必填说明
adUnitIDNSString *在 AdMob 或 MAX 后台创建的广告位 ID,不能为空。它是 loadAd: 后的第一个参数。
adTypeTOPAdType广告类型:激励视频或插屏。
callbackTOPIaaLoadCallback广告加载结果回调。

加载回调:

typedef void (^TOPIaaLoadCallback)(NSString * _Nullable adUnitID,
NSError * _Nullable error);
回调参数说明
adUnitID加载成功时返回对应广告位 ID;加载失败时为 nil
error加载失败时返回错误信息;加载成功时为 nil

20.5 检查广告是否就绪

接口:

+ (BOOL)isAdReady:(NSString *)adUnitID;

参数:

参数名类型必填说明
adUnitIDNSString *调用 loadAd: 时使用的广告位 ID。它是 isAdReady: 后的第一个参数。

返回值:YES 表示广告已加载且可以展示;NO 表示广告尚未就绪、已经展示或已经失效。

20.6 展示广告接口

接口:

+ (void)showAd:(NSString *)adUnitID
fromViewController:(UIViewController *)viewController
callback:(TOPIaaShowCallback)callback;

调用前必须通过 isAdReady: 确认广告已经就绪。

参数:

参数名类型必填说明
adUnitIDNSString *已经成功加载的广告位 ID。它是 showAd: 后的第一个参数。
viewControllerUIViewController *当前可见并用于展示广告的 ViewController。
callbackTOPIaaShowCallback广告展示生命周期回调。

展示回调:

typedef void (^TOPIaaShowCallback)(TOPAdEvent event,
NSError * _Nullable error);
事件说明
TOPAdEventPresented广告已展示。
TOPAdEventImpression广告产生有效曝光。
TOPAdEventClicked用户点击广告。
TOPAdEventRewarded用户满足激励条件。激励视频奖励只能在此事件中发放。
TOPAdEventDismissed用户关闭广告。本次广告已失效,再次展示前需要重新加载。
TOPAdEventFailed广告展示失败。本次广告已失效,可从 error 读取错误信息。

20.7 完整调用示例

#import <TOPSDK/TOPIaa.h>

NSString *adUnitID = @"your-rewarded-ad-unit-id";

[TOPIaaSDK loadAd:adUnitID
adType:TOPAdTypeRewarded
callback:^(NSString * _Nullable loadedAdUnitID, NSError * _Nullable error) {
if (error != nil || ![TOPIaaSDK isAdReady:loadedAdUnitID]) {
return;
}

[TOPIaaSDK showAd:loadedAdUnitID
fromViewController:self
callback:^(TOPAdEvent event, NSError * _Nullable showError) {
switch (event) {
case TOPAdEventRewarded:
// 在这里发放激励视频奖励。
break;
case TOPAdEventDismissed:
case TOPAdEventFailed:
// 本次广告已失效,如需再次展示请重新调用 loadAd:adType:callback:。
break;
default:
break;
}

if (showError != nil) {
// showError.code / showError.localizedDescription
}
}];
}];

20.8 注意事项

  • 必须在 MeetSDK 初始化成功后调用广告接口。
  • loadAd:isAdReady:showAd: 必须使用同一个 adUnitID
  • 不要在广告未就绪时直接调用 showAd:
  • 广告关闭或展示失败后,需要重新调用 loadAd:adType:callback: 才能再次展示。
  • 激励视频奖励只能在 TOPAdEventRewarded 事件中发放;如需服务端校验,由游戏业务自行实现。
  • iOS 可通过 NSError.codelocalizedDescription 获取错误信息:
错误码说明
8200广告模块尚未初始化。
8201未配置广告插件。
8202广告插件加载失败。
8203参数无效。
8204不支持的广告类型。
8205广告加载失败。
8206广告尚未就绪。
8207广告展示失败。
8208隐私同意流程失败。
8209广告 SDK 初始化失败。