测试已测试 | ✗ |
语言语言 | obj-cObjective C |
许可证 | 商业 |
发布最后发布 | 2017 年 5 月 |
由 Viacheslav Leonov 和 siarhei.barmotska 维护。
有关将 Ampiri SDK 集成到您的 iOS 应用中的附加文档,请参阅以下链接
Ampiri iOS SDK 支持 iOS 8.0 或更高版本。
您可以使用 Cocoapods(推荐)或手动方式将 AmpiriSDK 添加到您的项目中。
将 AmpiriSDK.framework
和 AMPVastLib.framework
文件添加到您的项目中。
要显示来自客户端中介网络的 标准 横幅广告,您需要添加以下库:
要显示来自客户端中介网络的 横幅广告,需要添加以下库:
要显示来自客户端中介网络的 视频广告,需要添加以下库:
要在您的应用程序中显示来自客户端中介网络的原生广告,您需要添加
警告:Ampiri SDK 4.2.1 被设计和验证过,可以正确地与以下版本的第三方广告网络 SDK 一起使用
如果我们手动添加了其他版本的广告网络 SDK,我们不保证 Ampiri SDK 的稳定和正确行为。
对于上述部分中添加的每个外部广告网络,您应该从适配器文件夹中添加该网络的 SDK 适配器。只需将必要的适配器添加到项目中即可。
您应该在 Ampiri 网站上设置每个添加的外部网络,否则它们将不会用于展示广告。
-ObjC
标志添加到项目设置(其他链接器标志属性)注意:如果您的应用程序无法使用 -ObjC
标志,请将 -force_load $(PROJECT_DIR)/Pods/ampiri-ios-sdk/AmpiriSDK.framework/Versions/Current/AmpiriSDK
标志添加到其他链接器标志
带适配器的 SDK 使用以下系统框架和库。您可以将“自动链接框架”标志设置为 YES
,否则您应该手动将以下系统框架和库添加到您的项目中
WebKit
Security
QuickLook
MobileCoreServices
CoreText
AssetsLibrary
Foundation
CoreData
Social
MessageUI
MediaPlayer
EventKit
EventKitUI
QuartzCore
CoreMedia
CFNetwork
SystemConfiguration
CoreGraphics
StoreKit
CoreTelephony
AVFoundation
AdSupport
AudioToolbox
UIKit
libxml2
libsqlite3
libz
警告:某些 Xcode 版本仅在重新启动 Xcode 之后才支持新的设置。这也清理了 Xcode 缓存并解决了其他问题。
如果有链接问题,请执行以下 TO DO 列表
~/Library/Developer/Xcode/DerivedData
中的您的派生数据文件夹由于Ampiri SDK使用第三方网络加载广告,而我们无法控制这些网络通过https加载内容,因此您应禁用您的应用的ATS以确保Ampiri SDK按预期行为。要禁用ATS,请将以下设置添加到您的应用Info.plist文件中。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
<key>NSAllowsArbitraryLoadsForMedia</key><true/>
<key>NSAllowsArbitraryLoadsInWebContent</key><true/>
</dict>
测试广告位ID(标准):"04c447d7-ffb8-4ba1-985e-4d2b9f88cd69"
可用的横幅广告尺寸
在您的UIViewController子类中使用以下方法
- (AMPBannerView *_Nullable)loadBannerWithSize:(AMPBannerViewSize)size
adUnitId:(NSString *_Nonnull)adUnitId
success:(void (^ _Nullable)(void))success
failure:(void (^ _Nullable)(AMPError *_Nonnull error))failure;
例如
Objective-C
[self.bannerView stop];
self.bannerView = [AmpiriSDK.sharedSDK loadBannerWithSize:AMPBannerViewSizeSmall
adUnitId:@"04c447d7-ffb8-4ba1-985e-4d2b9f88cd69"
success:nil
failure:nil];
[self.view addSubview:self.bannerView];
Swift
if bannerView != nil {
bannerView?.stop()
bannerView?.removeFromSuperview()
bannerView = nil
}
bannerView = AmpiriSDK.shared.loadBanner(with: AMPBannerViewSizeSmall,
adUnitId: "04c447d7-ffb8-4ba1-985e-4d2b9f88cd69",
success: nil,
failure: nil)
请将以下代码添加到viewDidAppear
和viewWillDisappear
方法中
Objective-C
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.bannerView resumeAutoUpdate];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.bannerView pauseAutoUpdate];
}
Swift
override func viewDidAppear(animated: Bool) {
bannerView?.resumeAutoUpdate()
}
override func viewDidDisappear(animated: Bool) {
bannerView?.pauseAutoUpdate()
}
如果您想关闭横幅广告自动更新
self.bannerView.autoUpdate = NO;
如果您想停止并从屏幕上移除横幅广告
[self.bannerView stop];
为了处理横幅广告事件,您应实现块或订阅通知。
方法 | 描述 | NSNotificationCenter键 |
---|---|---|
(void (^ _Nullable)(void))success |
横幅广告成功提供后调用。 | |
(void (^ _Nullable)(AMPError *_Nonnull error))failure |
如果横幅广告未能下载,则调用。 | |
- (instancetype _Nonnull)onClick:(nullable void (^)(void))block |
点击横幅广告后调用。在这之后,应用将被最小化,并打开外部浏览器。 | kAMPNotification_BannerClicked |
测试广告位ID(插页式广告):"2cb34a73-0012-4264-9526-bde1fce2ba92"
插页式广告的大小由屏幕大小自动定义。在您的UIViewController子类中使用以下方法
Objective-C
- (void)loadInterstitialWithAdUnitId:(NSString *_Nonnull)adUnitId
success:(void (^ _Nullable)(AMPInterstitial *_Nonnull interstitial))success
failure:(void (^ _Nullable)(AMPError *_Nonnull error))failure;
- (void)loadInterstitialAndShowWithDelayWithAdUnitId:(NSString *_Nonnull)adUnitId
forViewController:(UIViewController *_Nonnull)viewController
success:(void (^ _Nullable)(AMPInterstitial *_Nonnull interstitial))success
failure:(void (^ _Nullable)(AMPError *_Nonnull error))failure;
插页式广告有两种不同的展示方法。这些是
loadInterstitialWithAdUnitId
loadInterstitialAndShowWithDelayWithAdUnitId
loadInterstitialWithAdUnitId
方法用于加载插页式广告,如果加载成功则调用成功块。您可以从这个块中立即显示插页式广告。loadInterstitialAndShowWithDelayWithAdUnitId
方法加载插页式广告,调用成功块并在从服务器返回延迟后显示它。您可以从成功块中将它保存到您的UIViewController子类属性中,立即显示它,或什么都不做。
注意:如果没有指定延迟,则在加载完成后立即显示插页式广告。
例如
Objective-C
__weak typeof(self) weakSelf = self;
[AmpiriSDK.sharedSDK loadInterstitialWithAdUnitId:@"2cb34a73-0012-4264-9526-bde1fce2ba92"
success:^(AMPInterstitial * _Nonnull interstitial) {
weakSelf.intestitial = interstitial;
[interstitial showFromViewController:weakSelf];
} failure:nil];
[AmpiriSDK.sharedSDK loadInterstitialAndShowWithDelayWithAdUnitId:@"2cb34a73-0012-4264-9526-bde1fce2ba92"
forViewController:self
success:^(AMPInterstitial * _Nonnull interstitial) {
weakSelf.intestitial = interstitial;
} failure:nil];
Swift
AmpiriSDK.shared.loadInterstitial(withAdUnitId: "2cb34a73-0012-4264-9526-bde1fce2ba92",
success: { [unowned self] (interstitial) in
self.interstitial = interstitial
interstitial.show(from: self)
}, failure: nil)
AmpiriSDK.shared.loadInterstitialAndShowWithDelay(withAdUnitId: "2cb34a73-0012-4264-9526-bde1fce2ba92",
for: self,
success: { [unowned self] (interstitial) in
self.interstitial = interstitial
}, failure: nil)
为了处理插页式广告事件,您应实现块或订阅通知。以下是可用的选项:
方法 | 描述 | NSNotificationCenter键 |
---|---|---|
(void (^ _Nullable)(AMPInterstitial *_Nonnull interstitial))success |
在插页式广告提供后调用。在此方法调用后,插页式广告准备就绪,可以显示。 | |
(void (^ _Nullable)(AMPError *_Nonnull error))failure |
如果插页式广告未能下载,则调用。 | |
- (instancetype _Nonnull)onClick:(nullable void (^)(void))block |
在点击插页式广告后调用。在此事件后,应用程序将被最小化,并打开外部浏览器。 | kAMPNotification_InterstitialClicked |
- (instancetype _Nonnull)onDidHide:(nullable void (^)(void))block |
插页式广告从屏幕消失后调用。 | kAMPNotification_InterstitialDidHide |
- (instancetype _Nonnull)onDidShow:(nullable void (^)(void))block |
在插页式广告显示后调用。 | kAMPNotification_InterstitialDidShow |
- (instancetype _Nonnull)onWillHide:(nullable void (^)(void))block |
在点击“关闭”按钮后,直接在插页式广告消失之前调用。 | kAMPNotification_InterstitialWillHide |
- (instancetype _Nonnull)onWillLoad:(nullable void (^)(void))block |
在向服务器发送插页式广告请求之前调用。 | kAMPNotification_InterstitialWillLoad |
- (instancetype _Nonnull)onWillShow:(nullable void (^)(void))block |
在显示插页式广告之前调用。 | kAMPNotification_InterstitialWillShow |
测试视频广告位ID(VIDEO):"87f65c4c-f12d-4bb6-96fd-063fe30c4d69"
在您的UIViewController子类中使用以下方法
Objective-C
- (void)loadVideoWithAdUnitId:(NSString *_Nonnull)adUnitId
success:(void (^ _Nullable)(AMPVideo *_Nonnull video))success
failure:(void (^ _Nullable)(AMPError *_Nonnull error))failure;
例如
Objective-C
[AmpiriSDK.sharedSDK loadVideoWithAdUnitId:@"87f65c4c-f12d-4bb6-96fd-063fe30c4d69"
success:^(AMPVideo *video) {
[video showFromViewController:self];
} failure:nil];
Swift
AmpiriSDK.shared.loadVideo(withAdUnitId: "87f65c4c-f12d-4bb6-96fd-063fe30c4d69", success: { [unowned self]
video in
video.show(from: self)
}, failure: nil)
为了处理视频广告事件,您需要实现块或订阅通知。以下可用的选项包括:
方法 | 描述 | NSNotificationCenter键 |
---|---|---|
(void (^ _Nullable)(AMPVideo *_Nonnull video))success |
在视频加载后调用。在此方法调用之后,视频广告即可准备显示。 | |
(void (^ _Nullable)(AMPError *_Nonnull error))failure |
如果视频广告未下载,则调用。 | |
- (instancetype _Nonnull)onWillShow:(nullable void (^)(void))block |
当视频即将显示时调用。 | kAMPNotification_VideoWillShow |
- (instancetype _Nonnull)onDidShow:(nullable void (^)(void))block |
当视频已经显示时调用。 | kAMPNotification_VideoDidShow |
- (instancetype _Nonnull)onWillHide:(nullable void (^)(void))block |
当视频即将隐藏时调用。 | kAMPNotification_VideoWillHide |
- (instancetype _Nonnull)onDidHide:(nullable void (^)(void))block |
当视频已经隐藏时调用。 | kAMPNotification_VideoDidHide |
- (instancetype _Nonnull)onStart:(nullable void (^)(void))block |
视频启动时调用。 | kAMPNotification_VideoStarted |
- (instancetype _Nonnull)onPause:(nullable void (^)(void))block |
视频暂停时调用。 | kAMPNotification_VideoPause |
- (instancetype _Nonnull)onResume:(nullable void (^)(void))block |
视频恢复播放时调用。 | kAMPNotification_VideoResume |
- (instancetype _Nonnull)onComplete:(nullable void (^)(void))block |
显示视频完成时调用。 | kAMPNotification_VideoCompleted |
- (instancetype _Nonnull)onWillLoad:(nullable void (^)(void))block |
在发送视频请求到服务器之前调用。 | kAMPNotification_VideoWillLoad |
- (instancetype _Nonnull)onClick:(nullable void (^)(void))block |
在点击视频后调用。在此事件发生后,应用将被最小化,并打开外部浏览器。 | kAMPNotification_VideoClicked |
测试原生广告位ID(原生广告):"7f900c7d-7ce3-4190-8e93-310053e70ca2"
我们的原生资产是原始广告数据,没有任何预定义的包装UI。我们只请求此数据的容器以进行事件注册。原生资产的布局由开发者通过Interface Builder(创建.xib文件)或手动在代码中创建UI控件来自定义。在您 UIViewController 子类中使用以下方法:
Objective-C
- (void)loadNativeAdWithAdUnitId:(NSString *_Nonnull)adUnitId
success:(UIView * _Nullable (^ _Nonnull)(AMPNativeAssets *_Nonnull nativeAd))success
failure:(void (^ _Nullable)(AMPError *_Nonnull error))failure;
Swift
func loadNativeAd(withAdUnitId adUnitId: String,
success: @escaping (AMPNativeAssets) -> UIView?,
failure: ((AMPError) -> ()))?)
以下方法执行异步下载:不下载链接资源的原始原生数据,并为该数据请求一个容器视图。
实现自定义原生广告时,可以使用共同算法。
UIView
的自己的子类(例如MyNativeBannerView
),该子类将用作广告视图容器。loadNativeAdWithAdUnitId: 等
,使用所需参数,其中广告单元ID是您的私有广告空间ID。当原生广告成功下载时,将调用成功块。方法返回原始数据对象 AMPNativeAssets
并请求广告容器(用于注册点击和展示,这是必需的),您可以稍后使用此方法为 AMPNativeAssets
注册广告容器以进行交互:- (instancetype _Nonnull)registerViewForInteraction:(nonnull UIView *)view forClickableSubviews:(nullable NSArray)subviews
。当原生广告下载失败时,将调用失败块,并返回 AMPError
例如
Objective-C
__weak typeof(self) weakSelf = self;
[AmpiriSDK.sharedSDK loadNativeAdWithAdUnitId:self.unitID
success:^UIView * _Nonnull(AMPNativeAssets * _Nonnull nativeAd) {
CustomNativeView *nativeView = [CustomNativeView new];
[nativeView fillWithNativeAd:nativeAd];
[[[[nativeAd setTrackImpression:^{
NSLog(@"Ad Impressed");
}] setTrackClick:^{
NSLog(@"Ad Clicked");
}] setTrackLeftApplication:^{
NSLog(@"Left application");
}] registerViewForInteraction:nativeView forClickableSubviews:nil];
[weakSelf.view addSubview:nativeView];
return nativeView;
} failure:^(AMPError * _Nonnull error) {
NSLog(@"Native ad loading error: %@", [error localizedDescription]);
}];
Swift
AmpiriSDK.shared.loadNativeAd(withAdUnitId: "",
success: { [unowned self] (ad: AMPNativeAssets) -> UIView? in
let containerView = CustomNativeView()
containerView.fillWithNativeAd(ad)
ad.setTrackClick({
print("Clicked")
}).setTrackImpression({
print("Impressed")
}).setTrackLeftApplication({
print("Left application")
}).registerView(forInteraction: containerView, forClickableSubviews: nil)
self.view.addSubview(containerView)
return containerView
}) { (error) in
print("Native ad loading error: \(error.localizedDescription)")
}
为了处理自定义原生广告事件,您需要实现块。以下可用的选项包括:
方法 | 描述 |
---|---|
- (instancetype _Nonnull)onImpression:(nullable void (^)(void))impression |
当广告曝光计数时调用。 |
- (instancetype _Nonnull)onClick:(nullable void (^)(void))click |
当广告点击计数时调用。 |
- (instancetype _Nonnull)onLeftApplication:(nullable void (^)(void))leftApplication |
当点击后退出应用时调用。 |
测试原生广告位ID(原生广告):"7f900c7d-7ce3-4190-8e93-310053e70ca2"
原生广告是不带任何预定义包装界面的原始广告表示,这允许开发者自由设计和控制广告,或者为了最简单的集成,您可以使用我们的可自定义模板:基于AMPNativeAdsTemplateType
枚举的列表、Feed、网格和网格图标。
使用此方法通过我们的模板表示原生广告
Objective-C
- (void)loadNativeAdWithAdUnitId:(NSString *_Nonnull)adUnitId
parentViewController:(UIViewController *_Nonnull)viewController
templateType:(AMPNativeAdsTemplateType)templateType
success:(void (^ _Nullable)(UIView *_Nonnull adNativeViewContainer))success
failure:(void (^ _Nullable)(AMPError *_Nonnull error))failure
templateCustomization:(void (^ _Nullable)(AMPTemplateCustomizationObject *_Nonnull templateCustomizationObject))templateCustomization;
Swift
func loadNativeAd(withAdUnitId adUnitId: String,
parentViewController viewController: UIViewController,
templateType: AMPNativeAdsTemplateType,
success: ((UIView) -> ())?,
failure: ((AMPError) -> ())?,
templateCustomization: ((AMPTemplateCustomizationObject) -> ())?)
可用的模板自定义列表这里有
例如
Objective-C
__weak typeof(self) weakSelf = self;
[AmpiriSDK.sharedSDK loadNativeAdWithAdUnitId:@"7f900c7d-7ce3-4190-8e93-310053e70ca2"
parentViewController:self
templateType:AMPNativeAdsTemplateTypeList
success:^(UIView * _Nonnull adNativeViewContainer) {
[weakSelf.view addSubview:adNativeViewContainer];
} failure:nil
templateCustomization:nil];
Swift
AmpiriSDK.shared.loadNativeAd(withAdUnitId: "7f900c7d-7ce3-4190-8e93-310053e70ca2",
parentViewController: self,
templateType: .list,
success: { [unowned self] (view) in
self.addSubview(view)
}, failure: nil,
templateCustomization: nil)
原生广告的自定义布局由开发者通过界面构建器(创建.xib文件)或手动在代码中创建UI控件来配置。在使用您的UIViewController
子类时,使用以下方法
Objective-C
- (void)loadNativeAdWithAdUnitId:(NSString *_Nonnull)adUnitId
parentViewController:(UIViewController *_Nonnull)viewController
adViewClassForRendering:(Class _Nonnull)adViewClass
success:(void (^ _Nullable)(UIView *_Nonnull adNativeViewContainer))success
failure:(void (^ _Nullable)(AMPError *_Nonnull error))failure;
Swift
func loadNativeAd(withAdUnitId adUnitId: String,
parentViewController viewController: UIViewController,
adViewClassForRendering adViewClass: AnyClass,
success: ((UIView) -> ())?,
failure: ((AMPError) -> ())?)
以下方法异步下载原生广告及其所有链接资源,并在下载后将其渲染到绑定的UI控件中。
实现原生广告时有一个通用的算法可以使用
AMPNativeView
的子类,命名任意(例如:MyNativeBannerView
)MyNativeBannerView
的布局。开发者应该在此XIB中将所需的UI控件与来自<AMPNativeViewInterface>
(AMPNativeView
采用的)的属性绑定。必须覆盖MyNativeBannerView
类中的+ (NSString *)xibName
方法,它返回相同XIB的名称。MyNativeBannerView
类的实现必须使用<AMPNativeViewInterface>
(AMPNativeView
采用的)的创建和放置UI控件来完成。loadNativeAdWithAdUnitId: etc
,其中adUnitId
是您的私有广告空间ID,className是MyNativeBannerView
类的名称。在下载广告数据后,SDK立即启动第2步中创建的MyNativeBannerView
类。之后,SDK将原生广告数据渲染到控件边界内。并非所有控件都以这种方式填充,而只有主要控件: ampTitleTextLabel, ampMainTextLabel, ampIconImageView, ampMainMediaView
。渲染完成后,将调用包含此实例的成功完成块。例如
Objective-C
__weak typeof(self) weakSelf = self;
[AmpiriSDK.sharedSDK loadNativeAdWithAdUnitId:@"7f900c7d-7ce3-4190-8e93-310053e70ca2"
parentViewController:self
classForRendering:NSStringFromClass([MyNativeBannerView class])
success:^(UIView *adNativeViewContainer) {
UIView *nativeView = adNativeViewContainer;
nativeView.frame = weakSelf.adContainerView.bounds;
[weakSelf.adContainerView addSubview:nativeView];
[nativeView registerViewControllerForInteraction:weakSelf];
} failure:^(NSError *error) {
}];
Swift
AmpiriSDK.shared.loadNativeAd(withAdUnitId: "7f900c7d-7ce3-4190-8e93-310053e70ca2", parentViewController: self, adViewClassForRendering: classForRendering, success: {
view in
nativeView = view
}, failure: nil)
为了处理原生视图事件,您应该实现块。以下是可用的
方法 | 描述 |
---|---|
- (instancetype _Nonnull)onImpression:(nullable void (^)(void))impression |
当广告曝光计数时调用。 |
- (instancetype _Nonnull)onClick:(nullable void (^)(void))click |
当广告点击计数时调用。 |
- (instancetype _Nonnull)onLeftApplication:(nullable void (^)(void))leftApplication |
当点击后退出应用时调用。 |
用于测试的广告空间ID(类似于原生广告): "7f900c7d-7ce3-4190-8e93-310053e70ca2"
流适配器是一种智能技术,可以将原生广告作为基于UITableView或UICollectionView的美餐中的项来添加。流适配器的设置从服务器端返回,您可以根据需要进行更改。
为了最简单的集成,您可以使用我们的可自定义模板:基于AMPNativeAdsTemplateType
枚举的列表、Feed、网格和网格图标。
Objective-C
- (AMPTableViewStreamAdapter *_Nonnull)createStreamAdapterForTableView:(UITableView *_Nonnull)tableView
parentViewController:(UIViewController *_Nonnull)viewController
adUnitId:(NSString *_Nonnull)adUnitId
templateType:(AMPNativeAdsTemplateType)templateType
templateCustomization:(void (^ _Nullable)(AMPTemplateCustomizationObject *_Nonnull templateCustomizationObject))templateCustomization;
- (AMPCollectionViewStreamAdapter *_Nonnull)createStreamAdapterForCollectionView:(UICollectionView *_Nonnull)collectionView
parentViewController:(UIViewController *_Nonnull)viewController
adUnitId:(NSString *_Nonnull)adUnitId
templateType:(AMPNativeAdsTemplateType)templateType
delegate:(id <AMPCollectionViewStreamAdapterDelegate> _Nullable)delegate
templateCustomization:(void (^ _Nullable)(AMPTemplateCustomizationObject *_Nonnull templateCustomizationObject))templateCustomization;
Swift
func createStreamAdapter(for tableView: UITableView,
parentViewController viewController: UIViewController,
adUnitId: String,
templateType: AMPNativeAdsTemplateType,
templateCustomization: ((AMPTemplateCustomizationObject) -> ())?) -> AMPTableViewStreamAdapter
func createStreamAdapter(for tableView: UITableView,
parentViewController viewController: UIViewController,
adUnitId: String,
adViewClassForRendering adViewClass: AnyClass) -> AMPTableViewStreamAdapter
可用的模板自定义列表这里有
如果您想使用自己的原生广告表示,请使用以下方法
Objective-C
- (AMPTableViewStreamAdapter *_Nonnull)createStreamAdapterForTableView:(UITableView *_Nonnull)tableView
parentViewController:(UIViewController *_Nonnull)viewController
adUnitId:(NSString *_Nonnull)adUnitId
adViewClassForRendering:(Class _Nonnull)adViewClass;
- (AMPCollectionViewStreamAdapter *_Nonnull)createStreamAdapterForCollectionView:(UICollectionView *_Nonnull)collectionView
parentViewController:(UIViewController *_Nonnull)viewController
adUnitId:(NSString *_Nonnull)adUnitId
useDefaultGridMode:(BOOL)gridMode
delegate:(id <AMPCollectionViewStreamAdapterDelegate> _Nullable)delegate
adViewClassForRendering:(Class _Nonnull)adViewClass;
Swift
func createStreamAdapter(for collectionView: UICollectionView,
parentViewController viewController: UIViewController,
adUnitId: String,
templateType: AMPNativeAdsTemplateType,
delegate: AMPCollectionViewStreamAdapterDelegate?,
templateCustomization: ((AMPTemplateCustomizationObject) -> ())?) -> AMPCollectionViewStreamAdapter
func createStreamAdapter(for collectionView: UICollectionView,
parentViewController viewController: UIViewController,
adUnitId: String,
useDefaultGridMode gridMode: Bool,
delegate: AMPCollectionViewStreamAdapterDelegate?,
adViewClassForRendering adViewClass: AnyClass) -> AMPCollectionViewStreamAdapter
这些方法与原生广告相同。您必须使用此类广告的说明在方法中设置adViewClass
字段,但需要实现AMPCollectionViewStreamAdapterDelegate
协议或设置您的UICollectionViewFlowLayout
的estimatedItemSize
属性。
对于UITableView
,您在UITableViewDelegate
和UITableViewDataSource
方法中什么都不用做,就可以在您的美餐中添加广告,原生广告将自动添加。
对于UICollectionView
,如果您仅使用自定义集合视图布局,您需要在UICollectionViewDelegate
和UICollectionViewDataSource
方法中编写一些代码以在您的美餐中添加广告。对于UICollectionViewFlowLayout
,原生广告将自动添加。
Objective-C
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if ([self.adapter shouldDisplayAdAtIndexPath:indexPath]) {
YourAdContainerCollectionViewCell *cell = [collectionView
dequeueReusableCellWithReuseIdentifier:NSStringFromClass([YourAdContainerCollectionViewCell class])
forIndexPath:indexPath];
cell.layer.zPosition = 1000;
return [self.adapter renderedAdCellAtIndexPath:indexPath inCell:cell];
} else {
//your feed cell
}
}
}
Swift
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if (adapter?.shouldDisplayAd(at: indexPath) == true) {
let cell: AMPAdContainerCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "AMPAdContainerCollectionViewCell", for: indexPath) as! AMPAdContainerCollectionViewCell
cell.layer.zPosition = 100
return (adapter?.renderedAdCell(at: indexPath, in: cell))!
} else {
//your feed cell
}
}
自定义集合视图布局说明:如果你想在不包含广告的源中使用某个单元格的原始索引路径,请使用此方法(可能需要从数据数组加载数据)
- (NSIndexPath * _Nullable)originalIndexPath:(NSIndexPath * _Nonnull)indexPath;
如需使用与NSIndexPath
兼容的UITableView
和UICollectionView
方法,请使用以下类别(已在AMPTableViewStreamAdapter.h
和AMPCollectionViewStreamAdapter.h
中声明):UITableView (AMPStreamAdapter)
和UICollectionView (AMPStreamAdapter)
。这些类别包含以amp_
为前缀的方法,它们返回原始的indexPaths。
要处理流适配器事件,您应该实现块或订阅通知。以下供选择:
方法 | 描述 | NSNotificationCenter键 |
---|---|---|
- (instancetype _Nonnull)onAdsDidLoad:(nullable void (^)(void))block |
广告加载完成后的调用。在此事件之后,您可以重新加载UITableView/UICollectionView,或等待-广告将在滚动时自动添加。 | kAMPNotification_StreamAdapterAdsDidLoad |
- (instancetype _Nonnull)onAdsFailed:(nullable void (^)(void))block |
广告加载失败后的调用。 | kAMPNotification_StreamAdapterAdsFailed |
注意:目前流适配器不支持动态修改数据源(插入、移动、删除项)。这项支持将很快添加。
注意:不要忘记使用您的本地变量保留流适配器
要定制我们的模板,请使用在每个原生请求方法中返回的AMPTemplateCustomizationObject实例。以下是可以定制的属性列表
AMPTemplateCustomizationObject的属性 | 描述 |
---|---|
ampBackgroundColor |
广告单元格的颜色 |
ampTitleFont |
广告单元格中标题标签的字体 |
ampTitleColor |
广告单元格中标题标签的文本颜色 |
ampTitleLeftOffset |
广告单元格中标题标签的左偏移 |
ampTitleRightOffset |
广告单元格中标题标签的右偏移 |
ampTitleTextStyle |
广告单元格中标题标签的文本样式(可能为全大写、全小写、首字母大写和默认样式) |
ampDescriptionTextFont |
广告单元格中描述标签的字体 |
ampDescriptionTextColor |
广告单元格中描述标签的文本颜色 |
ampDescriptionTextLeftOffset |
广告单元格中描述标签的左偏移 |
ampDescriptionTextRightOffset |
广告单元格中描述标签的右偏移 |
ampCoverMediaLeftOffset |
广告主媒体视图的左偏移 |
ampCoverMediaRightOffset |
广告主媒体视图的右偏移 |
ampCoverMediaTopOffset |
广告主媒体视图的顶部偏移 |
ampCoverMediaBottomOffset |
广告主媒体视图的底部偏移 |
ampCoverMediaCornerRadius |
广告主媒体层的圆角半径 |
ampCoverMediaAutoPlayEnabled |
启用主媒体视图的视频自动播放 |
ampCTAFont |
号召行动按钮标签的字体 |
ampCTAColor |
号召行动视图的背景颜色 |
ampCTATextColor |
号召行动标签的文本颜色 |
ampCTABorderColor |
号召行动层的边框颜色 |
ampCTACornerRadius |
号召行动层的圆角半径 |
ampCTABorderWidth |
号召行动层的边框宽度 |
ampCTARightOffset |
广告号召行动视图的右偏移 |
ampCTABottomOffset |
广告号召行动视图的底部偏移 |
ampCTATextStyle |
广告单元格中号召行动标签的文本样式(可能为全大写、全小写、首字母大写和默认样式) |
ampSponsoredFont |
赞助标签的字体 |
ampSponsoredColor |
赞助标签的文本颜色 |
ampSponsoredTextStyle |
广告单元格中赞助标签的文本样式(可能为全大写、全小写、首字母大写和默认样式) |
ampIconLeftOffset |
广告应用图标视图的左偏移 |
ampIconTopOffset |
广告应用图标视图的顶部偏移 |
ampIconHeight |
广告应用图标视图的高度 |
ampIconWidth |
广告应用图标视图的宽度 |
ampIconCornerRadius |
广告应用图标层的圆角半径 |
ampIconContentMode |
广告应用图标视图的内容模式 |
ampMediaContentRatio |
广告主媒体视图(网格模板)的内容比 |
ampTextContentRatio |
广告描述(网格模板)的内容比 |
ampGridIconTemplateTitleIconBottomOffset |
网格图标模板中标题标签的底部偏移量 |
ampGridIconTemplateIconCTATopOffset |
网格图标模板中行动号召标签的顶部偏移量 |
在开发阶段,强烈建议将testMode设置为YES
以避免生成错误的印象和点击跟踪。默认设置为NO
。
#import <AmpiriSDK/AmpiriSDK.h>
AmpiriSDK.testMode = YES;
要将用户数据包含在SDK中,请设置以下属性
+ (void)setBirthday:(NSDate *_Nonnull)birthday;
+ (void)setGender:(AMPUserGender)userGender;
+ (void)setInterests:(NSArray<NSString *> *_Nonnull)interests;
例如
#import <AmpiriSDK/AmpiriSDK.h>
[AmpiriSDK setGender:AMPUserGenderMale];
[AmpiriSDK setBirthday:[NSDate date]];
[AmpiriSDK setInterests:@[@"running", @"shopping", @"fitness", @"sport"]];