新一代SDK | iOS对接

将Smaato作为首要广告服务器的对接说明

(iOS SDK版本21.3.3

GDPR重要说明

作为媒体,您应该集成Consent Management Platform CMP(同意管理平台)和 IAB Europe’s Mobile In-App CMP API v1.0(IAB欧洲移动应用CMP v1.0). 您可以在以下网址找到基于web的CMP的参考实现和相应的原生包装器: GDPR-透明度-和-权限-框架.

如果您想嵌入自己的自定义CMP,则需要使用以下密钥以收集用户同意信息储存在 NSUserDefaults 字段中:

密钥 描述
IABConsent_CMPPresent Boolean

如果应用程序中含有符合IAB规范的CMP,则设置为“YES”。

IABConsent_SubjectToGDPR String

1” = 以GDPR为准
0” = 不受GDPR限制
-1” = 未定(初始化之前的默认值)

IABConsent_ConsentString

String

当使用符合IAB规范的CMP(同意管理平台)时,Base64编码的权限字符串,详见于Consent string and vendor list format v1.1(权限字符串和供应商名单格式v1.1)
IABConsent_ParsedPurposeConsents String 当使用符合IAB规范的CMP(同意管理平台)时,由“0”和“1”组成的字符串,位于位置N的字符说明了purposeID N的权限状态,详见于Global Vendor List(全球供应商名单)
IABConsent_ParsedVendorConsents

String

当使用符合IAB规范的CMP(同意管理平台)时,由“0”和“1”组成的字符串,位于位置N的字符说明了verdorID N的权限状态,详见于Global Vendor List(全球供应商名单)

代码样例:


// User is not subject to GDPR
[[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"IABConsent_SubjectToGDPR"];

CCPA重要说明

加州消费者隐私法案(CCPA)的创建旨在为加州消费者提供更大的透明度和对其个人信息的控制。CCPA是美国首创的此类法规,旨在制定适用于加利福尼亚州管辖范围内开展业务的所有行业的广泛隐私和数据保护规则,而不是着眼于单个行业或特定数据收集和使用惯例。

有关CCPA法规的更多信息,请查看文章California Consumer Privacy Act (CCPA) – FAQ。您还可以查看IAB的美国隐私字符串文档。

如果您的产品有加利福尼亚州用户

作为开发者,您需要确保征询加利福尼亚州用户对私有数据传输的意见(同意或拒绝/选择退出或选择加入)。此答案应使用iAB US Privacy String格式以键“IABUSPrivacy_String”保存在NSUserDefaults中。

以下为代码样例。

Objective-C


- (void)saveCCPAUsPrivacyString:(NSString *)usString
{
    if (usString.length > 0) {
        [NSUserDefaults.standardUserDefaults setObject:usString 
forKey:@"IABUSPrivacy_String"]; // for example "1YNN"
    }
}

Swift


private func saveCCPA(usPrivacy string: String?) {
    guard let usString = string else {
        return
    }
    UserDefaults.standard.set(usString, forKey: "IABUSPrivacy_String" // for example "1YNN")
}

如果代码中存在IABUSPrivacy_String,Smaato新一代SDK会自动读取储存并使用

全屏广告位重要说明

目前,Smaato新一代SDK中,插屏广告兼容全屏广告位。在使用Smaato新一代SDK时,您需要在SPX中选择Interstitial (Display & Video)来变现您的全屏广告位。其余的所有选项此时都会无效。

请检查您的SPX账户中的Interstitial (Display & Video) 是否存在。如果您没有在广告格式的下拉菜单中看到Interstitial (Display & Video)选项,请联系您的Smaato客户经理启动该选项。

  • 当在SPX中创建您的全屏广告位时,选择广告格式中的Interstitial (Display & video)选项。 (图片1)
  • 对于广告素材类型,您有三种选项:(图片2):
    • Display Only将只支持富媒体广告。
    • Video Only将只支持视频广告。
    • Display and Video会支持富媒体和视频广告。

图片1:广告格式下拉选项

图片2:广告素材类型下拉选项

广告测试

Publisher ID: 1100042525  
广告位ID 类型 描述
130626424 富媒体 横幅广告/中等矩形/Leaderboard/Skyscraper
130635694 静态图 横幅广告/中等矩形/Leaderboard/Skyscraper
130635706 MRAID 横幅广告/中等矩形/Leaderboard/Skyscraper
130626426 富媒体/视频 插屏(视频(有end-card) +富媒体插屏320×480,480×320,1024×768 & 768×1024)
130626427 视频 可跳过视频
130626428 激励广告 激励视频
130635048 激励广告 激励视频(无end-card)

对接iOS应用

前提条件

您需要首先下载下列软件以实现新一代SDK和您的iOS项目对接:

选择广告格式

选择接入不同的SDK框架,可以减少您项目的binary size:

SmaatoSDKCore.framework
SmaatoSDKBanner.framework
SmaatoSDKInterstitial.framework
SmaatoSDKRewardedAds.framework
SmaatoSDKRichMedia.framework
SmaatoSDKVideo.framework
SmaatoSDKOpenMeasurement.framework
SmaatoSDKUnifiedBidding.framework

首先,您需要确保将应用连接到正确的框架,这样SDK才可以正确展示目标广告格式。

下面的表格展示了更多可能的配置。比如您想要展示标准横幅,您就不能将应用链接到Core, Banner, RichMedia和OpenMeasurement框架。此处Rich Media意为支持HTML渲染。

框架 横幅/图片+富媒体 插屏/图片+富媒体 插屏/视频 插屏/图片+富媒体+视频 激励/视频
SmaatoSDKCore.framework 1 X X X X X
SmaatoSDKOpenMeasurement.framework 1 X X X X X
SmaatoSDKBanner.framework X        
SmaatoSDKInterstitial.framework   X X X  
SmaatoSDKRewardedAds.framework         X
SmaatoSDKRichMedia.framework X X   X  
SmaatoSDKVideo.framework     X X X
SmaatoSDKUnifiedBidding.framework 2 X* X* X* X* X*

设置新一代SDK

1.) 首先,设置您的SPX账户:https://spx.smaato.com/

2.) 创建并保存Xcode的”Single View“项目。命名为”MyTarget“。然后关闭Xcode。

3.) 然后使用以下代码片段中的一个或多个(有效组合)来在项目目录中创建一个文档并命名为”Podfile“。

所有支持的广告格式(全部为Smaato SDK):

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target 'MyTarget' do
   use_frameworks!
   pod 'smaato-ios-sdk'
end

请注意: 为减小您的应用大小,您可以只说明您想要使用的广告格式。

横幅广告(图片和富媒体):

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target 'MyTarget' do
   use_frameworks!
   pod 'smaato-ios-sdk/Banner'
end

插屏广告(图片,富媒体和视频):

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target 'MyTarget' do
   use_frameworks!
   pod 'smaato-ios-sdk/Interstitial'
end

插屏广告(图片和富媒体):

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target 'MyTarget' do
   use_frameworks!
   pod 'smaato-ios-sdk/Modules/Interstitial'
   pod 'smaato-ios-sdk/Modules/RichMedia'
end

横幅广告和插屏广告(图片和富媒体):

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target 'MyTarget' do
   use_frameworks!
   pod 'smaato-ios-sdk/Modules/Banner'
   pod 'smaato-ios-sdk/Modules/Interstitial'
   pod 'smaato-ios-sdk/Modules/RichMedia'
end

激励广告(视频):

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target 'MyTarget' do
   use_frameworks!
   pod 'smaato-ios-sdk/RewardedAds'
end

4.) 打开终端然后前往项目目录。

$ cd {PATH_TO_PROJECT_DIR}

5.) 下载pods。

$ pod install

6.){PROJECT_NAME}.xcworkspace“文件应出现在项目文件夹中。并且您需要在Xcode中打开”{PROJECT_NAME}.xcworkspace“。

7.) 在”AppDelegate.m”中,导入SmaatoSDKCore模块到application:didFinishLaunchingWithOptions:“中并配置SDK。

Objective-C 代码

// AppDelegate.m
#import "AppDelegate.h"
@import SmaatoSDKCore;
 
@implementation AppDelegate
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
    // initialize SDK first!    
    SMAConfiguration *config = [[SMAConfiguration alloc] initWithPublisherId:@""];
    config.httpsOnly = YES;                 // allow HTTPS traffic only    
    config.logLevel = kSMALogLevelError;    // log errors only
	config.maxAdContentRating = kSMAMaxAdContentRatingUndefined; // ads content restriction based on age
	[SmaatoSDK initSDKWithConfig:config];   
    SmaatoSDK.gpsEnabled = YES; // allow the Smaato SDK to automatically get the user's location and put it inside the ad request
     
    // optional configuration    
    SmaatoSDK.userGender = kSMAGenderFemale;
    SmaatoSDK.userAge = @30;
    SmaatoSDK.userSearchQuery = @"yoga, vegan, san+francisco";
     
    return YES;
}

@end

Swift 代码

// AppDelegate.swift
import UIKit
import SmaatoSDKCore
 
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
     
    var window: UIWindow?
     
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // initialize SDK first!        
        guard let config = SMAConfiguration(publisherId: "") else {
              fatalError("SDK config is nil!")
        }
        config.httpsOnly = true     // allow HTTPS traffic only        
        config.logLevel = .error    // log errors only
		config.maxAdContentRating = .undefined  // ads content restriction based on age
         
        SmaatoSDK.initSDK(withConfig:config)
        SmaatoSDK.gpsEnabled = true // allow the Smaato SDK to automatically get the user's location and put it inside the ad request 
 
        // optional configuration        
        SmaatoSDK.userGender = .male
        SmaatoSDK.userAge = 40
        SmaatoSDK.userSearchQuery = "bitcoin, lamborghini, san+francisco"
         
        return true
    }
}

注意:从版本21.2.1开始,新的gpsEnabled flag将允许SDK在授权的情况下自动获取用户的地理位置。默认情况下,该flag为关闭状态。

横幅广告对接步骤

1.) 在界面生成器中把SMABannerView添加到ViewController

2.) 设计BannerView使能有足够的空间来展示一定大小的横幅广告(例如XXLarge会占用320×50 pt)。

3.) 在面板生成器中,通过IBOutletSMABannerViewViewController连接起来。

//
//  ViewController.h
//

#import "ViewController.h"
@import SmaatoSDKBanner;

@interface ViewController : UIViewController
@property (nonatomic, weak) IBOutlet SMABannerView *bannerView;
@end
//
//  ViewController.swift
//

import UIKit
import SmaatoSDKBanner

class ViewController: UIViewController {  
   @IBOutlet weak var bannerView: SMABannerView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

4.)SMABannerViewDelegate协议中采用ViewController。然后执行需要的SMABannerViewDelegate方法。

//
//  ViewController.m
//

#import "ViewController.h"

// 使用ViewController并使之与SMABannerViewDelegate协议一致
@interface ViewController () <SMABannerViewDelegate>
@end

@implementation ViewController
...
#pragma mark - <SMABannerViewDelegate>

// 返回view controller,在应用内浏览器中展示广告。
- (UIViewController *)presentingViewControllerForBannerView:(SMABannerView *)bannerView {
    return self;
}

// 回调通知:广告过期
- (void)bannerViewDidTTLExpire:(SMABannerView *)bannerView { 
    NSLog(@"Banner TTL has expired. You should load new one.");
}
...
@end
//
//  ViewController.swift
//

import UIKit
import SmaatoSDKBanner

class ViewController: UIViewController {  
    @IBOutlet weak var bannerView: SMABannerView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

extension ViewController: SMABannerViewDelegate {
   // 返回view controller,在应用内浏览器中展示广告。
   func presentingViewController(for bannerView: SMABannerView) -> UIViewController {
        return self
   }

   // 回调通知:广告过期
   func bannerViewDidTTLExpire(_ bannerView: SMABannerView) {
        print("Banner TTL has expired. You should load new one")
    }
}

5.)ViewController类中的”viewDidLoad“,设置BannerView:

- (void)viewDidLoad {
    [super viewDidLoad];   
    self.bannerView.autoreloadInterval = kSMABannerAutoreloadIntervalVeryShort; // (可选)设定需求的自动再加载时间间隔
    self.bannerView.delegate = self;   // (必须)设定delegate
    [self.bannerView loadWithAdSpaceId:@"<SMAATO_ADSPACE_ID>" 
                                                    adSize:kSMABannerAdSizeXXLarge_320x50]; // 所需求的横幅广告的大小
}
override func viewDidLoad() {
    super.viewDidLoad()
    bannerView.autoreloadInterval = .disabled   // (可选)设定需求的自动再加载时间间隔
    bannerView.delegate = self                          // (必须)设定delegate 
    bannerView.load(withAdSpaceId: "<SMAATO_ADSPACE_ID>",  
                                             adSize: .xxLarge_320x50)  // 所需求的横幅广告的大小
}

6.) 在模拟器中建立并运行应用。横幅广告应出现在您的屏幕当中。

插屏广告对接步骤

1.)SMABannerViewDelegate协议中采用ViewController。然后执行需要的SMABannerViewDelegate方法。

//
//  ViewController.m
//

#import "ViewController.h"
@import SmaatoSDKInterstitial;

// 使用ViewController并使之与SMAInterstitialDelegate协议一致
@interface ViewController () <SMAInterstitialDelegate>
@property (nonatomic, strong) SMAInterstitial *interstitial;
@end

@implementation ViewController

...
// 插屏广告加载成功
- (void)interstitialDidLoad:(SMAInterstitial *)interstitial {
    self.interstitial = interstitial;
    [self.interstitial showFromViewController:self];
}
 
// 插屏广告加载失败
- (void)interstitial:(SMAInterstitial *)interstitial didFailWithError:(NSError *)error {
    NSLog(@"Interstitial did fail loading with error: %@", error.localizedDescription);
}

// 插屏广告过期
- (void)interstitialDidTTLExpire:(SMAInterstitial *)interstitial {
    NSLog(@"Interstitial TTL has expired");
}
@end
//
//  ViewController.swift
//

import UIKit
import SmaatoSDKInterstitial

class ViewController: UIViewController {   
    private var interstitial: SMAInterstitial?
}

extension ViewController: SMAInterstitialDelegate {
    // 插屏广告加载成功 
    func interstitialDidLoad(_ interstitialResponse: SMAInterstitial) { 
        interstitial = interstitialResponse
        interstitialResponse.show(from: self)
    }
    
    // 插屏广告加载失败
    func interstitial(_ interstitial: SMAInterstitial?, didFailWithError error: Error) { 
       print("Interstitial did fail loading with error: \(error.localizedDescription)")
    }
    
    // 插屏广告过期
    func interstitialDidTTLExpire(_ interstitial: SMAInterstitial) {
        print("Interstitial TTL has expired")
    }
}

2.)ViewController类中创建一个可以加载插屏广告的方法,以便在您需要的时候可以调用它。

- (void)callWhenYouNeedInterstitial {
    [SmaatoSDK loadInterstitialForAdSpaceId:@"<SMAATO_ADSPACE_ID>"
                            		        delegate:self];
}
func callWhenYouNeedInterstitial() {
    SmaatoSDK.loadInterstitial(forAdSpaceId: "<SMAATO_ADSPACE_ID>", 					                                delegate: self)
}

3.) 调用您的方法(在ViewController类中的”viewDidLoad“当中:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self callWhenYouNeedInterstitial];
}
override func viewDidLoad() {
     super.viewDidLoad()
     callWhenYouNeedInterstitial()
}

4.) 最后在模拟器中建立并运行您的应用。插屏广告在加载后会出现在您的屏幕当中。

激励视频广告对接步骤

1.)SMARewardedInterstitialDelegate协议中采用ViewController。至少执行必需的SMARewardedInterstitialDelegate方法。

//
//  ViewController.m
//

#import "ViewController.h"
@import SmaatoSDKRewardedAds;

// 使用ViewController并使之与SMARewardedInterstitialDelegate协议一致
@interface ViewController () <SMARewardedInterstitialDelegate>
@property (nonatomic, strong) SMARewardedInterstitial *rewardedInterstitial;
@end

@implementation ViewController
...
// 激励视频广告加载成功
- (void)rewardedInterstitialDidLoad:(SMARewardedInterstitial *)rewardedInterstitial {
    self.rewardedInterstitial = rewardedInterstitial;
    [rewardedInterstitial showFromViewController:self];
}
 
//  激励视频广告加载失败
- (void)rewardedInterstitialDidFail:(SMARewardedInterstitial *)rewardedInterstitial withError:(NSError *)error {
    NSLog(@"Rewarded Video did fail loading with error: %@", error.localizedDescription);
}

// 激励视频广告过期
- (void)rewardedInterstitialDidTTLExpire:(SMARewardedInterstitial *)rewardedInterstitial {
    NSLog(@"Rewarded Video TTL has expired");
}

// 激励视频广告播放完毕
- (void)rewardedInterstitialDidReward:(SMARewardedInterstitial *)rewardedInterstitial {
    NSLog(@"Rewarded Video finishes the playing");
}

@end
//
//  ViewController.swift
//

import UIKit
import SmaatoSDKRewardedAds

class ViewController: UIViewController {   
    private var rewardedInterstitial: SMARewardedInterstitial?
}

extension ViewController: SMARewardedInterstitialDelegate {
   ...
    // 激励视频广告加载成功 
    func rewardedInterstitialDidLoad(_ rewardedInterstitial: SMARewardedInterstitial) {
        self.rewardedInterstitial = rewardedInterstitial
        rewardedInterstitial.show(from: self)
    }
    
    // 激励视频广告加载失败
    func rewardedInterstitialDidFail(_ rewardedInterstitial: SMARewardedInterstitial?, withError error: Error) {        
        print("Rewarded Video did fail loading with error: \(error.localizedDescription)")
    }
    
    // 激励视频广告过期
    func rewardedInterstitialDidTTLExpire(_ rewardedInterstitial: SMARewardedInterstitial) {
        print("Rewarded Video TTL has expired")
    }

    // 激励视频广告播放完毕
    func rewardedInterstitialDidReward(_ rewardedInterstitial: SMARewardedInterstitial) {
        print("Rewarded Video finishes playing")
    }
}

2.)ViewController类中创建一个可以加载激励视频广告的方法,以便在您需要的时候可以调用它。

- (void)callWhenYouNeedRewardedVideo {
    [SmaatoSDK loadRewardedInterstitialForAdSpaceId:@"<SMAATO_ADSPACE_ID>"
                                                                         delegate:self];
}
func callWhenYouNeedRewardedVideo() {
    SmaatoSDK.loadRewardedInterstitial(forAdSpaceId: "<SMAATO_ADSPACE_ID>", 
                                                                        delegate: self)
}

3.) 调用您的方法(在ViewController类中的”viewDidLoad“当中:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self callWhenYouNeedRewardedVideo];
}
override func viewDidLoad() {
    super.viewDidLoad()
    callWhenYouNeedRewardedVideo()
}

4.) 最后在模拟器中建立并运行您的应用。视频广告应出现在您的屏幕当中。

Key-Value定向对接步骤

SMAKeyValuePairs是允许创建定向参数的公共组件。

SMAKeyValuePairs类型的一个新的类属性名为keyValuePairs,它被引用到每个广告类型并且允许媒体传递包含在请求中的关键词。

设定SMAKeyValuePairs限制:

  • 每个key最多可有到七个value。如果一个key包含超过七个value,SDK将只选择七个value加入到查询请求中。
  • 每个请求最多可有七个key-value pairs。如果字典中包含超过七个key-value pairs,SDK将只选择七个key-value pairs加入到查询请求中。
  • key的数据类型为字符串,value的数据类型为字符串数组。

keyValuePairs为类属性,而不是类的实例的属性。横幅广告,插屏广告和激励视频广告均可设置该属性。

SMAKeyValuePairs公共头:

@interface SMAKeyValuePairs : NSObject

// 如果字典中已经存在一个key,那么一个对象会附加到已经存在的对象上。否则,key-value pair会被添加。
- (void)addTargetingValue:(NSString *_Nonnull)anObject forKey:(NSString *_Nonnull)aKey;

// 如果字典中已经存在一个key,一个对象会占用该位置。否则,key-value pair会被添加。
- (void)setTargetingValue:(NSString *_Nonnull)anObject forKey:(NSString *_Nonnull)aKey;

// 如果字典中已经存在一个key,一个对象会占用该位置。否则,key-value pair会被添加。
- (void)setTargetingValues:(NSArray<NSString *> *_Nonnull)anObject forKey:(NSString *_Nonnull)aKey;

// 清空字典中的value。
- (void)removeAllKeyValuePairs;

// 定向清除特定的key-value pairs。
- (void)removeKeyValuePairWithKey:(NSString *_Nonnull)aKey;

// 返回所有将要被添加到查询请求中的key-value pairs。
- (NSDictionary *_Nullable)allKeyValuePairs;

@end

横幅广告

由于类属性的原因,一旦完成设定,所有的横幅广告的实例会有一样的值,因为该属性属于类本身。所以总有一种所有实例都可以使用的属性。

  • 初始化一个SMAKeyValuePairs对象并通过公共界面设定您的定向参数。
  • SMABannerView.keyValuePairs属性中设定key-value pair对象。
  • 对横幅广告调用load方法来对请求应用key-value pair。

Objective-C代码

//
//  ViewController.m
//
  
#import "ViewController.h"
@import SmaatoSDKBanner;
  
@interface ViewController ()
  
// SMABannerView通过IBOutlet连接到界面生成器中的ViewController。 
@property (nonatomic) IBOutlet SMABannerView *bannerView;
  
@end
  
@implementation ViewController
  
- (void)viewDidLoad {
    [super viewDidLoad];
  
    // 开始创建并设置定向参数。
    SMAKeyValuePairs *KVP = [SMAKeyValuePairs new];
    [KVP setTargetingValue:@"30" forKey:@"Age"]; // 替换为您在SPX中设置的key-value pair
    [KVP setTargetingValues:@[@"Demo", @"Stage"] forKey:@"Application"]; // 替换为您在SPX中设置的key-value pair
    SMABannerView.keyValuePairs = KVP;
  
    // 当在SPX中替换为您的”AdSpaceID”和您想要的横幅广告大小,发送请求。
    [self.bannerView loadWithAdSpaceId:@"AdSpaceID" adSize:kSMABannerAdSizeXXLarge_320x50];
}
  
@end

Swift代码:

//
//  ViewController.swift
//
  
import Foundation
import SmaatoSDKBanner
  
class ViewController: UIViewController {
    // SMABannerView通过IBOutlet连接到界面生成器中的ViewController。
    @IBOutlet var bannerView: SMABannerView?
  
    override func viewDidLoad() {
        super.viewDidLoad()
  
        // 开始创建并设置定向参数。
        let KVP = SMAKeyValuePairs()
        KVP.setTargetingValue("30", forKey: "Age") // replace with your key-value pairs configured on SPX site
        KVP.setTargetingValues(["Demo", "Stage"], forKey: "Application") // replace with your key-value pairs configured on SPX site
        SMABannerView.keyValuePairs = KVP
  
        // 当在SPX中替换为您的”AdSpaceID”和您想要的横幅广告大小,发送请求。
        self.bannerView?.load(withAdSpaceId: "AdSpaceID", adSize: .xxLarge_320x50)
    }
}

插屏广告

由于类属性的原因,一旦完成设定,所有插屏广告的实例会有一样的值,因为该属性属于类本身。所以总有一种所有实例都可以使用的属性。

  • 初始化一个SMAKeyValuePairs对象并通过公共界面设定您的定向参数。
  • SMAInterstitial.keyValuePairs属性中设定key-value pair对象。
  • 调用loadInterstitial方法来对请求应用key-value pair。

Objective-C代码:

//
//  ViewController.m
//
  
#import "ViewController.h"
@import SmaatoSDKInterstitial;
  
@interface ViewController () <SMAInterstitialDelegate>
  
@end
  
@implementation ViewController
  
- (void)viewDidLoad {
    [super viewDidLoad];
    [self callWhenYouNeedInterstitial];
}
  
- (void)callWhenYouNeedInterstitial {
    // 开始创建并设置定向参数。
    SMAKeyValuePairs *KVP = [SMAKeyValuePairs new];
    [KVP setTargetingValue:@"30" forKey:@"Age"]; // 替换为您在SPX中设置的key-value pair
    [KVP setTargetingValues:@[@"Demo", @"Stage"] forKey:@"Application"]; // 替换为您在SPX中设置的key-value pair
    SMAInterstitial.keyValuePairs = KVP;
  
    // 当在SPX中替换为您的”AdSpaceID”,发送请求。
    [SmaatoSDK loadInterstitialForAdSpaceId:@"AdSpaceID" delegate:self];
}
  
@end

Swift代码:

//
//  ViewController.swift
//
  
import Foundation
import SmaatoSDKInterstitial
  
class ViewController: UIViewController {
  
    override func viewDidLoad() {
        super.viewDidLoad()
        callWhenYouNeedInterstitial()
    }
  
    func callWhenYouNeedInterstitial() {
        // 开始创建并设置定向参数。
        let KVP = SMAKeyValuePairs()
        KVP.setTargetingValue("30", forKey: "Age") // 替换为您在SPX中设置的key-value pair
        KVP.setTargetingValues(["Demo", "Stage"], forKey: "Application") // 替换为您在SPX中设置的key-value pair
        SMAInterstitial.keyValuePairs = KVP
  
        // 当在SPX中替换为您的”AdSpaceID”,发送请求。
        SmaatoSDK.loadInterstitial(forAdSpaceId: "AdSpaceID", delegate: self)
    }
}

激励视频广告

由于类属性的原因,一旦完成设定,所有激励视频广告的实例会有一样的值,因为该属性属于类本身。所以总有一种所有实例都可以使用的属性。

  • 初始化一个SMAKeyValuePairs对象并通过公共界面设定您的定向参数。
  • SMAInterstitial.keyValuePairs属性中设定key-value pair对象。
  • 调用loadRewardedInterstitial方法来对请求应用key-value pair。

Objective-C代码::

//
//  ViewController.m
//
  
#import "ViewController.h"
@import SmaatoSDKRewardedAds;
  
@interface ViewController () <SMARewardedInterstitialDelegate>
  
@end
  
@implementation ViewController
  
- (void)viewDidLoad {
    [super viewDidLoad];
    [self callWhenYouNeedRewardedAds];
}
  
- (void)callWhenYouNeedRewardedAds {
    // 开始创建并设置定向参数。
    SMAKeyValuePairs *KVP = [SMAKeyValuePairs new];
    [KVP setTargetingValue:@"30" forKey:@"Age"]; // 替换为您在SPX中设置的key-value pair
    [KVP setTargetingValues:@[@"Demo", @"Stage"] forKey:@"Application"]; // 替换为您在SPX中设置的key-value pair
    SMARewardedInterstitial.keyValuePairs = KVP;
  
    // 当在SPX中替换为您的”AdSpaceID”,发送请求。
    [SmaatoSDK loadRewardedInterstitialForAdSpaceId:@"AdSpaceID" delegate:self];
}
  
@end

Swift代码:

//
//  ViewController.swift
//
  
import Foundation
import SmaatoSDKRewardedAds
  
class ViewController: UIViewController {
  
    override func viewDidLoad() {
        super.viewDidLoad()
        callWhenYouNeedRewardedAds()
    }
  
    func callWhenYouNeedRewardedAds() {
        // 开始创建并设置定向参数。
        let KVP = SMAKeyValuePairs()
        KVP.setTargetingValue("30", forKey: "Age") // 替换为您在SPX中设置的key-value pair
        KVP.setTargetingValues(["Demo", "Stage"], forKey: "Application") // 替换为您在SPX中设置的key-value pair
        SMARewardedInterstitial.keyValuePairs = KVP
  
        // 当在SPX中替换为您的”AdSpaceID”,发送请求。
        SmaatoSDK.loadRewardedInterstitial(forAdSpaceId: "AdSpaceID", delegate: self)
    }
}

Modified: April 20, 2020 at 11:18 am