ampiri-ios-sdk 4.2.1

ampiri-ios-sdk 4.2.1

测试已测试
语言语言 obj-cObjective C
许可证 商业
发布最后发布2017 年 5 月

Viacheslav Leonovsiarhei.barmotska 维护。



  • 作者
  • Ampiri

目录

Ampiri 支持

有关将 Ampiri SDK 集成到您的 iOS 应用中的附加文档,请参阅以下链接

初始化

Ampiri iOS SDK 支持 iOS 8.0 或更高版本。

您可以使用 Cocoapods(推荐)或手动方式将 AmpiriSDK 添加到您的项目中。

手动添加 SDK

1. 将 SDK 文件添加到您的项目中(必需)

AmpiriSDK.frameworkAMPVastLib.framework 文件添加到您的项目中。

2. 添加外部库(推荐)

要显示来自客户端中介网络的 标准 横幅广告,您需要添加以下库:

要显示来自客户端中介网络的 横幅广告,需要添加以下库:

要显示来自客户端中介网络的 视频广告,需要添加以下库:

要在您的应用程序中显示来自客户端中介网络的原生广告,您需要添加

警告:Ampiri SDK 4.2.1 被设计和验证过,可以正确地与以下版本的第三方广告网络 SDK 一起使用

  • AdColony – 3.1.1
  • Chartboost – 6.6.3
  • Google Mobile Ads – 7.20.0
  • NativeX – 5.5.9
  • Unity Ads – 2.1.0
  • Vungle – 4.1.0
  • Facebook Audience – 4.20.2
  • MoPub – 4.14.0
  • AppLovin – 3.1
  • 百度 - 4.5
  • 腾讯 - 4.5.4
  • InLoco - 2.4.4

如果我们手动添加了其他版本的广告网络 SDK,我们不保证 Ampiri SDK 的稳定和正确行为。

3. 将 SDK 外部适配器添加到您的项目中

对于上述部分中添加的每个外部广告网络,您应该从适配器文件夹中添加该网络的 SDK 适配器。只需将必要的适配器添加到项目中即可。

  • AdColony – libAMPAdColonyAdapter
  • Chartboost – libAMPChartboostAdapter
  • Google Mobile Ads – libAMPGoogleMobileAdsAdapter
  • NativeX – libAMPNativeXAdapter
  • Unity Ads – libAMPUnityAdsAdapter
  • Vungle – libAMPVungleAdapter
  • Facebook Audience – libAMPFBAudienceAdapter
  • MoPub – libAMPMopubAdapter
  • AppLovin – libAMPAppLovinAdapter
  • 百度 - libAMPBaiduAdapter
  • 腾讯 - libAMPTencentAdapter
  • InLoco – libAMPInLocoAdapter

4. 设置外部网络

您应该在 Ampiri 网站上设置每个添加的外部网络,否则它们将不会用于展示广告。

5.-ObjC 标志添加到项目设置(其他链接器标志属性)

注意:如果您的应用程序无法使用 -ObjC 标志,请将 -force_load $(PROJECT_DIR)/Pods/ampiri-ios-sdk/AmpiriSDK.framework/Versions/Current/AmpiriSDK 标志添加到其他链接器标志

6. 需要的系统库

带适配器的 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 列表

  • 清理构建
  • 重新启动 Xcode
  • 删除 ~/Library/Developer/Xcode/DerivedData 中的您的派生数据文件夹
  • 重新启动计算机

在 iOS 9.0 及更高版本中的 ATS 设置

由于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" 可用的横幅广告尺寸

  • AMPBannerViewSizeSmall (320x50)(推荐)
  • AMPBannerViewSizeLarge (728x90)

在您的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)

请将以下代码添加到viewDidAppearviewWillDisappear方法中

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) -> ()))?)

以下方法执行异步下载:不下载链接资源的原始原生数据,并为该数据请求一个容器视图。

实现自定义原生广告时,可以使用共同算法。

  1. 创建名为 UIView 的自己的子类(例如MyNativeBannerView),该子类将用作广告视图容器。
  2. 在广告视图容器内渲染其他控件,如标签、按钮和图像视图。
  3. 调用 loadNativeAdWithAdUnitId: 等,使用所需参数,其中广告单元ID是您的私有广告空间ID。当原生广告成功下载时,将调用成功块。方法返回原始数据对象 AMPNativeAssets 并请求广告容器(用于注册点击和展示,这是必需的),您可以稍后使用此方法为 AMPNativeAssets注册广告容器以进行交互:- (instancetype _Nonnull)registerViewForInteraction:(nonnull UIView *)view forClickableSubviews:(nullable NSArray)subviews。当原生广告下载失败时,将调用失败块,并返回 AMPError
  4. 在屏幕上显示广告容器。

例如

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控件中。

实现原生广告时有一个通用的算法可以使用

  1. 创建您的AMPNativeView的子类,命名任意(例如:MyNativeBannerView)
  2. 选择两种选项之一
    • XIB选项 - 在一个单独的XIB文件中设计MyNativeBannerView的布局。开发者应该在此XIB中将所需的UI控件与来自<AMPNativeViewInterface>AMPNativeView采用的)的属性绑定。必须覆盖MyNativeBannerView类中的+ (NSString *)xibName方法,它返回相同XIB的名称。
    • 编码选项 - MyNativeBannerView类的实现必须使用<AMPNativeViewInterface>AMPNativeView采用的)的创建和放置UI控件来完成。
  3. 使用所需参数调用loadNativeAdWithAdUnitId: etc,其中adUnitId是您的私有广告空间ID,className是MyNativeBannerView类的名称。在下载广告数据后,SDK立即启动第2步中创建的MyNativeBannerView类。之后,SDK将原生广告数据渲染到控件边界内。并非所有控件都以这种方式填充,而只有主要控件: ampTitleTextLabel, ampMainTextLabel, ampIconImageView, ampMainMediaView。渲染完成后,将调用包含此实例的成功完成块。
  4. 在屏幕上展示广告视图容器。

例如

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"

流适配器是一种智能技术,可以将原生广告作为基于UITableViewUICollectionView的美餐中的项来添加。流适配器的设置从服务器端返回,您可以根据需要进行更改。

为了最简单的集成,您可以使用我们的可自定义模板:基于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协议或设置您的UICollectionViewFlowLayoutestimatedItemSize属性。

对于UITableView,您在UITableViewDelegateUITableViewDataSource方法中什么都不用做,就可以在您的美餐中添加广告,原生广告将自动添加。

对于UICollectionView,如果您仅使用自定义集合视图布局,您需要在UICollectionViewDelegateUICollectionViewDataSource方法中编写一些代码以在您的美餐中添加广告。对于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兼容的UITableViewUICollectionView方法,请使用以下类别(已在AMPTableViewStreamAdapter.hAMPCollectionViewStreamAdapter.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"]];