You need to enable JavaScript to run this app.
导航
iOS SDK集成
最近更新时间:2024.08.28 12:00:09首次发布时间:2022.07.12 11:06:45
一. 简介

GMP 资源位 SDK 是 GMP 对外提供的资源位数据管理的 SDK 。
资源位 SDK 主要提供两种接入方式

  • 自渲染

用户调用 API 接口,获取 GMP 资源位配置数据,自行处理视图渲染、交互监听,在交互变化时通知 SDK。

  • SDK 渲染

SDK 内部完成一系列流程,包括 请求配置、数据处理、视图渲染(banner 视图的样式)、图片缓存、交互监听、事件上报。

二. SDK 集成

1 配置应用鉴权信息

需提供 iOS 应用包名和开发者 team id,然后在 GMP 后台配置(管理中心-消息管理-客户端SDK-鉴权配置),需保证与 app 的实际信息一致,可联系您的客户端开发人员获取。该项配置用于接口的安全鉴权校验,不会用于其他用途。
示例如下:

team id:55XXXX22XX

bundle id:com.example.gmp

在 GMP 控制台中配置 APP 的鉴权信息
alt

iOS 鉴权所需的配置信息以及获取方式如下

1.1 team id 获取

team id 需要在苹果开发者后台上获取,在账号页面下滑,找到会员资格详细信息,其中的团队 ID 就是 team id
alt

1.1 bundle id 获取

iOS 工程上的 bundl identifier
alt

2 集成 SDK

注意

资源位 SDK 集成 Demo,可参考 https://www.volcengine.com/docs/6315/1130446
Demo 需要在初始化时配置对应的参数才能获取到对应的数据

2.1 集成 Finder SDK

资源位 SDK 依赖 Finder SDK 进行数据回流,在使用资源位 SDK 前,请确保已经集成了 Finder SDK,并且 Finder SDK 版本在 6.15.2 以上。

Finder iOS SDK接入指南地址:Finder接入

2.2 集成资源位 SDK

cocoapods 引入方式(推荐)

推荐使用 cocoapods 集成资源位 SDK,在 Podfile 中,引入 SDK,并执行pod install --repo-update更新Pods
iOS 弹窗、资源位 SDK 版本记录

//需要额外添加一个这两个source
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/volcengine/volcengine-specs.git'

pod 'GMPReachSDK', '请到版本记录获取最新版本', 
		:subspecs => [
				'Popup',
				'Resource',
				'Core',
				'Finder' #数据上报功能子库,当引入此子库时,SDK 会默认使用 Finder SDK 来进行数据上报和获取 id,若不使用 Finder SDK 上报数据,可不引入此库,但需要自己实现数据上报功能,详见 4.2其他平台uba配置部分
		]

手动引入方式

推荐您远程引入SDK。如特殊情况需要手动引入,请补充阅读本小节。

请在 iOS 弹窗、资源位 SDK 版本记录 下载对应版本文件,然后将下载好的文件解压后拉入项目工程中即可

说明

如果您的工程中未引入 SDWebImage 库,还需下载以下文件,并且解压后拖入到项目工程中

SDWebImage.framework.zip
303.35KB

3 初始化 SDK

3.1 获取初始化必备 id

3.1.1 获取项目 id 和应用 id

在gmp首页,点击右上角头像-项目管理,即可进入项目后台页查看对应项目的项目id和应用id(项目id是初始化资源位sdk的appid,应用id是用于初始化Finder SDK的appid)

3.1.2 获取 mainAccountId

进入火山引擎控制台,点击右上角头像 icon,红框中的账号 ID 即是 mainAccountId

3.2 初始化

首先您需要初始化 Finder SDK,具体可参考:初始化 Finder SDK - 火山引擎
在初始化的地方导入 GMPReachSDK.h,建议在 appdelegate.mdidFinishLaunchingWithOptions 方法中进行资源位 SDK 的初始化。

3.2.1 初始化示例(私有化版本)

注意

如果您的app中涉及隐私弹窗协议,请在同意隐私协议之后进行 SDK 初始化

#import <GMPReachSDK/GMPReachSDK.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    GMPReachConfig *reachConfig = [[GMPReachConfig alloc] init];
    reachConfig.appId = @"{{APPID}}";      // GMP 项目ID
    reachConfig.host = @"{{host}}";        // 私有化部署域名
    reachConfig.enableLog = YES;           // 是否打开日志
    reachConfig.teamId = @"XXXXXXXX";      // 开发者账号 teamid,从苹果开发者后台获取,请确保与 GMP 平台上配置的一致
    //如果项目支持自动登陆,用户画像已经存在,需要提前设置上 
    reachConfig.uuid = @"uuid"; 
    reachConfig.uuidType = @"uuid_type";
    // 设置资源位的缓存等级
    GMPResourceManager.sharedManager.cacheLevel = GMPResourceCacheLevelAllCache;
    [GMPResourceManager startWithConfig:reachConfig];
}

3.2.2 初始化示例(SaaS版本)

注意

如果您的app中涉及隐私弹窗协议,请在同意隐私协议之后进行 SDK 初始化

#import <GMPReachSDK/GMPReachSDK.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    GMPReachConfig *reachConfig = [[GMPReachConfig alloc] init];
    reachConfig.appId = @"{{APPID}}";      // GMP 项目ID
    reachConfig.enableLog = YES;           // 是否打开日志
    reachConfig.mainAccountId = @"{{MainAccountId}}"; // SaaS 火山引擎账号 id
    reachConfig.teamId = @"XXXXXXXX";      // 开发者账号 teamid,从苹果开发者后台获取,请确保与 GMP 平台上配置的一致
    //如果项目支持自动登陆,用户画像已经存在,需要提前设置上 
    reachConfig.uuid = @"uuid"; 
    reachConfig.uuidType = @"uuid_type";
    // 设置资源位的缓存等级
    GMPResourceManager.sharedManager.cacheLevel = GMPResourceCacheLevelAllCache;
    [GMPResourceManager startWithConfig:reachConfig];
}

3.2.3 参数详情

ReachConfig 详细配置如下

参数 类型 是否必填 描述
appId NSString GMP 项目ID,获取方法见 3.1.1
host NSString 私有化部署的域名(SaaS 环境下无需设置此属性)
enableLog BOOL 是否打开日志
uuid NSString 用户id,若初始化 SDK 时已存在自有帐号体系的用户 id,则需传入自有帐号体系用户 id,否则传空
uuidType NSString 自有帐号体系的用户 id 在 cdp 上对应的 id code
enableLog BOOL 是否打开日志
teamId NSString 开发者账号 teamid,从苹果开发者后台获取,请确保与 GMP 平台上配置的一致
mainAccountId NSString saas 环境下必须传入,获取方法详见 3.1.2
ubaInstance id 设置finder配置,如无特殊需求可不传入

以下是资源位 SDK 需要传入的参数

参数 类型 是否必填 描述
reachConfig GMPReachConfig 触达配置

3.3 更新用户画像

如您的产品中有账户体系,请在用户登录后立即设置 uuid,以保证用户登录前后口径一致性。Finder SDK 登陆态变化可参考:Finder SDK 登陆态变化

除此之外,您还需要及时通知资源位SDK用户画像的变化

警告

在SDK版本 >= 2.1.0 之后,更新用户画像只能通过手动更新,旧版升级上来的请改成手动更新模式
注意 : 务必在 BDAutoTrack.setCurrentUserUniqueID 设置前调用手动更新

2.1.0 以下版本需要为 ReachConfig 增加以下配置:

GMPReachConfig *reachConfig = [[GMPReachConfig alloc] init];
// 设置自动更新 uuid 为关闭
reachConfig.isAutoUpdateUserId = NO; 
// ...省略其他配置...
[GMPResourceManager startWithConfig:reachConfig];;

以下配置在各个SDK版本均要配置
登录用户

// uuid: 自有账号体系 id
// uuidType: 自有账号体系 id 类型,需要在 CDP 平台上查看对应的 id code
[GMPResourceManager updateUUID:@“uuid” uuidType:@"uuidType"];

退出登录

// uuid , uuid type 填空字符串
[GMPResourceManager updateUUID:@“” uuidType:@""];
[BDAutoTrack clearUserUniqueID]

4 其他可选配置

4.1 其他平台 UBA 配置

若使用 Finder SDK 进行数据上报,则无需关注此部分。若确认不使用 Finder SDK 上报数据,而是使用自己的 UBA 库进行数据上报,则需自行实现 UBA 上报能力,并注入到 SDK 中

4.1.1 实现 GMPUBAInterface 接口

// 首先需要实现 GMPUBAInterface 接口
    
@interface UBAImplement : NSObject <GMPUBAInterface>

@end
    
@implementation UBAImplement

- (instancetype)init {
    if (self = [super init]) {
        // 在 UBA 事件发生时应调用 GMPPopupManager consumeEvent 方法通知事件发生
        [[BDAutoTrack sharedTrack] setEventHandler:^BDAutoTrackEventPolicy(BDAutoTrackDataType type, NSString * _Nonnull event, NSMutableDictionary<NSString *, id> * _Nonnull properties) {
            [GMPPopupManager consumeEvent:event params:properties];
            return BDAutoTrackEventPolicyAccept;
        } forTypes:BDAutoTrackDataTypeAll];
    }
    return self;
}

- (NSDictionary *)getCommonParams {
		// 返回 UBA 额外参数,会附加于 SDK 请求中,需传入 appid 即可
    return @{ @"finder_app_id": @([[BDAutoTrack appID] integerValue]) };
}

- (NSString *)getDid {
		// 返回 UBA 的唯一设备标识,若无返回 nil 即可
    return [BDAutoTrack rangersDeviceID];;
}

- (NSString *)getBaseId {
		// 返回 UBA 的唯一用户标识,若无返回 nil 即可
    return [BDAutoTrack ssID];
}

- (BOOL)eventV3:(NSString *)event params:(NSDictionary *)params {
		// 使用 UBA 的事件上报接口进行事件上报
    return [BDAutoTrack eventV3:event params:params];
}

@end

4.1.2 设置 ubaInstance

// 完成自定义 UBA 类实现后,需要在 SDK 初始化时将 UBA 实例传入 GMPReachConfig
GMPReachConfig *reachConfig = [[GMPReachConfig alloc] init];
reachConfig.ubaInstance = [[UBAImplement alloc] init];

4.2 设置资源位缓存等级

说明

资源位SDK内置了兜底缓存 & 用户缓存的双重缓存逻辑 (兜底缓存为gmp前端配置的兜底素材,用户缓存为上一次拉取该资源位id返回的素材),其中用户缓存优先级大于兜底缓存,在网络异常/gmp服务端异常时会读取本地缓存或兜底素材作为对应资源位id的返回,如果接入方本身具有兜底能力可以在接入时设置资源位的缓存等级

缓存等级 策略
GMPResourceCacheLevelNoneCache 不开启缓存
GMPResourceCacheLevelDefaultResourceCache 只开启兜底缓存
GMPResourceCacheLevelLastRequestCache 只开启用户缓存(缓存上一次请求的素材)
GMPResourceCacheLevelAllCache 开启所有缓存,若不设置缓存等级,默认使用此策略

代码示例

// 设置资源位的缓存等级
GMPResourceManager.sharedManager.cacheLevel = GMPResourceCacheLevelAllCache;
三. SDK 渲染方式接入资源位

通过 SDK 生成资源位视图,并根据 resourceId 填充资源位数据,视图的位置尺寸由用户定义

1 banner

1.1 参数说明

属性变量名称 属性含义
autoScrollTimeInterval 轮播时间间隔,单位为秒(s),默认为5s
autoScroll 自动轮播,默认YES
placeholderImage 轮播视图为空的默认错误占位图
imageViewContentMode 图片的填充模式,包括轮播图以及没有轮播图时的背景图
currentPageIndicatorImage pageControl 选中时的图片
normalPageIndicatorImage pageControl 未选中时的图片
currentPageIndicatorColor 非图片模式pageControl 选中的颜色
normalPageIndicatorColor 非图片模式pageControl 未选中的颜色
currentPageIndicatorSize pageControl 选中时的大小
normalPageIndicatorSize pageControl 未选中时的大小
pageIndicatorSpaing pageControl 间距大小
isShowPageControl 是否显示pageControl

1.2 初始化资源位视图

在需要的位置调用资源位视图的初始化方法并加载指定资源位 id,示例

#import <GMPReachSDK/GMPReachSDK.h>

GMPResourceView *resourceView = [[GMPResourceView alloc] init];
resourceView.delegate = self;
[resourceView loadResource:@"resource_id"];

加载资源位数据方法介绍

/** 
 * 加载资源位数据
 * @param  resourceID 资源位 id 
 */
- (void)loadResource:(nonnull NSString *)resourceID;

资源位回调方法
在创建资源位视图后,设置资源位视图的代理 resourceView.delegate = self,可在代理中实现以下代理方法监听,resourceView 的数据请求状态,resourceView 的交互行为。

/** 
 * 资源位数据加载成功
 *
 * @param  resourceView 资源位视图
 */
- (void)resourceDataLoadSuccess:(GMPResourceView *)resourceView;

/**
 * 资源位数据加载失败
 *
 * @param  resourceView 资源位视图
 * @param  error 错误对象
 */
- (void)resourceDataLoadFailed:(GMPResourceView *)resourceView error:(NSError *)error;

/**
 * 资源位帧位展示
 *
 * @param  resourceView 资源位视图 
 * @param  index 展示到第几个帧位
 */
- (void)resourceView:(GMPResourceView *)resourceView didScrollToIndex:(NSInteger)index;

/**
 * 资源位点击
 *
 * @param  resourceView 资源位视图
 * @param  navigateUrl 跳转链接
 */
- (BOOL)resourceView:(GMPResourceView *)resourceView didClickNavigateUrl:(NSString *)navigateUrl;

2 闪屏

说明

说明:为避免闪屏网络请求对启动的阻塞,每次闪屏拉取都是 先取上一次成功的缓存渲染,再默默拉取最新资源位缓存到本地

2.1 参数说明

字端 说明 类型
imageContentMode 作用于图片类型资源位填充模式,默认值 UIViewContentModeScaleToFill enum

2.2 初始化闪屏视图

#import <GMPReachSDK/GMPReachSDK.h>

GMPSplashView *splashView = [[GMPSplashView alloc] initWithRootViewController:rootVC];
splashView.delegate = self;
[splashView loadResource:@"resource_id"];

闪屏页方法回调

@protocol GMPSplashViewDelegate <NSObject>
/**
 * 启动页数据加载成功
 *
 * @param  splashView 启动页视图
 * @param  resourceData 资源位数据
 */
- (void)splashView:(GMPSplashView *)splashView resourceLoadSuccess:(GMPResourceData *)resourceData;

/**
 * 启动页数据加载失败
 *
 * @param  splashView 启动页视图
 * @param  error 错误信息
 */
- (void)splashView:(GMPSplashView *)splashView resourceLoadFailed:(NSError *)error;

/**
 * 启动页点击
 *
 * @param  splashView 启动页视图
 * @param  url 跳转链接
 *
 * @return  是否自行处理跳转链接 YES:自行处理     NO:SDK 默认处理
 */
- (BOOL)splashView:(GMPSplashView *)splashView didClick:(NSString *)url;

/**
 * 启动页展示成功
 *
 * @param  splashView 启动页视图
 * @param  resourceData 素材数据
 */
- (void)splashView:(GMPSplashView *)splashView showSuccess:(GMPResourceData *)resourceData;

/**
 * 启动页展示成功
 *
 * @param  splashView 启动页视图
 * @param  error 错误信息
 */
- (void)splashView:(GMPSplashView *)splashView showFailed:(NSError *)error;

/**
 * 启动页展示成功
 *
 * @param  splashView 启动页视图
 * @param  resourceData 资源位数据
 */
- (void)splashView:(GMPSplashView *)splashView showFinished:(GMPResourceData *)resourceData;
四. 自渲染方式接入资源位

仅提供资源位数据

1 资源位数据模型说明

1.1 GMPResourceData

属性名 类型 含义
resourceID NSString 资源位 id
items NSArray 资源位下所有帧位集合

1.2 GMPResourceItem

属性名 类型 含义
resourceID NSString 所属资源位 id
frameID NSArray 资源位下所有帧位集合
materialID NSString 素材 id
type GMPResourceItemType 素材类型
  • Image图片
  • Text文本
  • content_collection自定义类型
  • Splash 闪屏类型
  • text NSString 文本
    imageUrl NSString 图片链接
    navigateUrl NSString 跳转链接
    customizeInfo NSArray 自定义类型资源位内容合集
    extra NSString 扩展json字段 用于存放和具体资源位类型关系比较大的信息 比如闪屏页存倒计时

    1.3 GMPResourceCustomizeInfo

    属性名 类型 含义
    customizeType NSInteger 自定义类型
  • 1、文本
  • 2、图片
  • 3、跳转链接
  • 4、内容合集
  • text NSString 文本
    imageUrl NSString 图片url
    navigateUrl NSString 素材点击跳转链接url
    fieldName NSString 自定义字端参数名称
    fieldShowName NSString 自定义字显示名称
    resourcesCollectionIds NSArray 内容合集

    2 请求资源位数据

    在需要拉取资源位数据的页面导入对应的 .h 文件
    根据 resourceId资源位id)获取对应的资源位数据,相关 api 如下

    /**
     * 请求单个资源位数据
     *
     * @param  resourceID 资源位 id
     * @param  success 请求成功回调
     * @param  failure 请求失败回调
     */
    + (void)resourceDataWithResourceID:(NSString *)resourceID success:(void(^)(GMPResourceData *resourceData))success failure:(void(^)(NSError *error))failure;
    
    /**
     * 请求多个资源位数据
     *
     * @param  resourceIDs 一组资源位 id
     * @param  success 请求成功回调
     * @param  failure 请求失败回调
     */
    + (void)resourceDataWithResourceIDs:(NSArray<NSString *> *)resourceIDs success:(void(^)(NSArray<GMPResourceData *> *resourceDatas))success failure:(void(^)(NSError *error))failure;
    

    使用示例

    // 请求资源位数据
    [GMPResourceManager resourceDataWithResourceID:@"resourceID" success:^(GMPResourceData* resourceData) {
        // 请求数据成功回调
    
    } failure:^(NSError* error) {
        // 请求数据失败回调
    
    }];

    3 自渲染接入闪屏页

    说明

    我们推荐您使用sdk渲染的方式接入闪屏页,但如果存在某些定制化接入的需求可以参考下列方法获取闪屏页配置信息并完成自渲染和数据上报

    下列为 GMPResourceItem 类获取闪屏页配置的方法

    字段名类型含义
    getCountDownNSInteger获取素材配置的倒计时,单位为s,如果不存在则默认返回-1
    getValidDateNSInteger获取素材失效时间戳,单位为ms,如果不存在该字段则默认返回-1

    使用示例

    NSInteger countDown = [resourceItem getCountDown];// 获取倒计时 
    double validDate = [resourceItem getValidDate];// 获取素材失效时间戳 
    
    if (vaildDate != -1 && vaildDate < [[NSDate date] timeIntervalSince1970] * 1000) { // 素材失效 
    
    }
    //素材未失效 
    if(countDown != -1) { 
    	// 设置倒计时数据 
    }

    4 自渲染埋点上报

    埋点上报相关方法,请在对应的资源位帧位展示成功、失败和点击时调用 GMPBannerTracker 对应的类方法进行上报。

    #import <GMPReachSDK/GMPReachSDK.h>
    
    /// 资源位展示成功埋点
    /// @param  resourceItem 展示成功的帧位对象
    + (void)trackerForResourceShowSuccess:(GMPResourceItem *)resourceItem;
    
    /// 资源位展示失败埋点
    /// @param  resourceItem 展示失败的帧位对象
    /// @param  errorMessage 错误信息
    + (void)trackerForResourceShowFailed:(GMPResourceItem *)resourceItem errorMessage:(NSString *)errorMessage;
    
    /// 素材点击埋点
    /// @param  resourceItem 被点击素材的帧位对象
    /// @param  errorMessage 错误信息
    /// @param  isClickUrl 是否跳转链接
    + (void)trackerForItemClick:(GMPResourceItem *)resourceItem errorMessage:(NSString *)errorMessage isClickUrl:(BOOL)isClickUrl;
    

    示例:

    #import <GMPReachSDK/GMPReachSDK.h>
    
    /// 资源位展示成功埋点
    [GMPResourceTracker trackerForResourceShowSuccess:resourceItem];
    
    /// 资源位展示失败埋点
    [GMPResourceTracker trackerForResourceShowFailed:resourceItem errorMessage:errorMessage];
    
    /// 素材点击埋点
    [GMPResourceTracker trackerForItemClick:resourceItem errorMessage:errorMessage isClickUrl:YES];
    
    五. 自渲染接入算法资源位

    1 简介

    算法资源位是通过算法推荐结合用户的行为偏好数据,实现个性化的资源位物料下发

    2 算法资源位数据模型说明

    • GMPRecParams(请求算法资源位的参数)
    属性名类型含义
    resourceIdNSString算法资源位id

    spm

    NSString

    SPM(Super Position Model)全称超级位置模型,主要用于标识行为发生的位置。SPM位置编码由A/B/C/D四段构成,各分段分别代表 A:业务, B:页面, C:页面区块, D:区块内点位。段之间用$##$分隔,即A$##$B$##$C$##$D,spm各段建议传明文。某一段为空时直接传空字符串,如第二段为空, 则传“A$##$$##$C$##$D”。
    1.业务:业务名称,如今日头条
    2.页面:如首页、发现页-推荐等
    3.页面区块:如广告位、猜你喜欢
    4.区块内点位:在区块内的具体位置,如顶部轮播图、推荐列表等
    预期上同一个位置下不同的资源位对应的spm是一致的

    contextItemIdNSString算法资源位的推荐类型为相关推荐时,传入 GMPRecResourceItem 的 contentId
    contextItemTypeNSString算法资源位的推荐类型为相关推荐时,传入 GMPRecResourceItem 的 recContentType
    pageNSInteger推荐列表页数(默认为0,轮播可以不传)
      • GMPRecResourceData(请求算法资源位的返回response)
    属性名类型含义
    resourceIDNSString资源位id
    itemsNSArray< GMPRecResourceItem>素材列表
    resourceTypeGMPRecResourceType(枚举)算法资源位类型(BANNER:轮播 RECOMMENDED_LIST:推荐列表)
    • GMPRecResourceItem
    属性名类型含义
    resourceIDNSString资源位id
    materialIDNSString素材id
    frameIDNSString帧位id
    titleNSString素材标题,对应物料上传的item_title
    typeNSString素材类型,对应物料上传的itemType
    customizeInfoNSDictionary素材数据,对应物料上传的json内容
    resourceTypeGMPRecResourceType(枚举)算法资源位类型(BANNER:轮播 RECOMMENDED_LIST:推荐列表)
    recParamsGMPRecParams算法资源位请求参数

    3 请求算法资源位数据

    • 创建资源位参数
    GMPRecParams *params = [[GMPRecParams alloc] init];
    params.resourceId = @"currentRecListId";
    params.contextItemId = @"contextItemId";
    params.contextItemType = @"currentRecType";
    params.spm = @"spm";
    params.page = 1;
    • 发起算法资源位请求
    [GMPResourceManager getRecResource:params success:^(GMPRecResourceData * _Nonnull resourceData) {
        // 成功回调
    } failure:^(NSError * _Nonnull error) {
        // 失败回调
    }];
    • 请求下一页的素材
    GMPRecParams *params = [[GMPRecParams alloc] init];
    params.resourceId = @"currentRecListId";
    params.contextItemId = @"contextItemId";
    params.contextItemType = @"currentRecType";
    params.spm = @"spm";
    params.page = newpage;,
    [GMPResourceManager getRecResource:params success:^(GMPRecResourceData * _Nonnull resourceData) {
        // 成功回调
    } failure:^(NSError * _Nonnull error) {
        // 失败回调
    }];

    4 算法资源位埋点上报

    埋点上报相关方法,请在对应的资源位帧位展示成功、失败和点击时调用 GMPBannerTracker 对应的类方法进行上报。

    #import <GMPReachSDK/GMPReachSDK.h>
    
    /// 资源位展示成功埋点
    /// @param  resourceItem 展示成功的帧位对象
    + (void)trackerForResourceShowSuccess:(id<GMPResourceBaseItem>)resourceItem;
    
    /// 资源位展示失败埋点
    /// @param  resourceItem 展示失败的帧位对象
    /// @param  errorMessage 错误信息
    + (void)trackerForResourceShowFailed:(id<GMPResourceBaseItem>)resourceItem errorMessage:(NSString *)errorMessage;
    
    /// 素材点击埋点
    /// @param  resourceItem 被点击素材的帧位对象
    /// @param  errorMessage 错误信息
    /// @param  isClickUrl 是否跳转链接
    + (void)trackerForItemClick:(id<GMPResourceBaseItem>)resourceItem errorMessage:(NSString *)errorMessage isClickUrl:(BOOL)isClickUrl;
    
    /// 素材停留时长
    /// @param  resourceItem 帧位对象
    /// @param  duration 停留时长
    + (void)trackerForStayDuration:(id<GMPResourceBaseItem>)resourceItem duration:(NSInteger)duration;
    

    示例:

    #import <GMPReachSDK/GMPReachSDK.h>
    
    /// 资源位展示成功埋点
    [GMPResourceTracker trackerForResourceShowSuccess:resourceItem];
    
    /// 资源位展示失败埋点
    [GMPResourceTracker trackerForResourceShowFailed:resourceItem errorMessage:errorMessage];
    
    /// 素材点击埋点
    [GMPResourceTracker trackerForItemClick:resourceItem errorMessage:errorMessage isClickUrl:YES];
    
    /// 素材停留时长
    [GMPResourceTracker trackerForStayDuration:resourceItem duration:duration];
    
    六. 异常错误码
    错误码错误信息错误原因
    400param empty参数错误,请检查 sdk 是否正常初始化,是否存在参数漏出传
    500Server error服务器异常
    100001network error设备网络异常
    100002json serializa errorJson 序列化异常
    100003resource id empty请求的资源位 id 为空
    100004resource is empty资源位数据为空,请检查资源位配置和资源位 id 是否正确
    100005render error资源位 sdk 渲染错误,不支持的渲染类型
    100006authorization error鉴权失败
    200001resource expire资源位过期资源位过期
    200002resource download failed资源位素材下载失败
    七. 接入方问题排查 CheckList
    • FinderSDK 是否正确接入,在资源位初始化前是否完成 FinderSDK 的初始化,日志过滤"BDAutotrack"可查看 FinderSDK 初始化相关日志。
    • 检查是否完成了资源位初始化的必选参数配置,日志过滤"GMPResource"查看相关日志。
    • 检查配置的域名是否正确,可抓包查看请求是否正常
    八. 常见问题

    1 如何判断是否初始化成功?

    日志过滤"GMPResource"查看是否有资源位初始化完成日志

    2 发起资源位请求后无资源

    检查初始化配置是否正确,可在日志中过滤"GMPResource"查看错误日志,或者抓包查看请求是否成功响应

    3 SDK 缓存说明

    • 闪屏类型资源位:SDK 内部会一直缓存拉取成功的闪屏素材,展示前判断是否过期,过期则不展示
    • SDK 内部会按照 网络请求返回数据>缓存数据>兜底数据 的优先级返回资源位数据,其中缓存数据与兜底数据往往会在网络异常的情况下返回,在极端情况下若这两类数据都无法正常返回会回调 failure,这种情况下接入方可根据自己的业务逻辑添加容错数据
    ★版本记录

    iOS 弹窗、资源位SDK 版本记录