新一代SDK | iOS | MoPub对接

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

(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(全球供应商名单)

代码示例

// 用户不受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)

MoPub面板创建

1. 前往MoPub面板 – https://app.mopub.com/networks

2. 点击”New network“按钮

3. 从列表底部选择”Custom SDK network

4. 在下面两个页面中设定目标参数。

5. 在”App & ad unit setup“中,完成以下设定:

    • Custom event classes:
      • 横幅广告: SMAMoPubSmaatoBannerAdapter
      • 插屏广告: SMAMoPubSmaatoInterstitialAdapter
      • 激励视频广告: SMAMoPubSmaatoRewardedVideoAdapter
    • Custom event class data:
      • {"adspaceId":"<YOUR_SPX_ADSPACE_ID>"}

SDK对接

由于SDK模块化结构,您可以选择不同的对接方式。以下为一些应添加到您下项目中的Podfile中的配置示例:

横幅广告(支持富媒体)

pod 'smaato-ios-sdk/Banner'
pod 'smaato-ios-sdk/Adapters/MoPub/Banner'

插屏广告(支持富媒体和视频)

pod 'smaato-ios-sdk/Interstitial'
pod 'smaato-ios-sdk/Adapters/MoPub/Interstitial'

激励视频广告

pod 'smaato-ios-sdk/RewardedAds'
pod 'smaato-ios-sdk/Adapters/MoPub/RewardedAds'

插屏广告 (仅支持富媒体)

pod 'smaato-ios-sdk/Modules/Interstitial'
pod 'smaato-ios-sdk/Modules/RichMedia'
pod 'smaato-ios-sdk/Adapters/MoPub/Interstitial'

SDK初始化

AppDelegate.m / Objective-C

//
//  AppDelegate.m
//
 
#import "AppDelegate.h"
 
@import SmaatoSDKCore; // Import SmaatoSDKCore
 
@implementation AppDelegate
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 先初始化SDK!
    SMAConfiguration *config = [[SMAConfiguration alloc] initWithPublisherId:@"<SMAATO_PUBLISHER_ID>"];
    config.httpsOnly = YES;  // 仅允许HTTPS流量
    config.logLevel = kSMALogLevelError;  // 仅载入错误   
	config.maxAdContentRating = kSMAMaxAdContentRatingUndefined; // ads content restriction based on age
 
    [SmaatoSDK initSDKWithConfig:config];
	SmaatoSDK.gpsEnabled = YES;           // 允许Smaato SDK在授权的情况下获取GPS地理位置;默认关闭
    
    // 可选的配置
    SmaatoSDK.userGender = kSMAGenderFemale;
    SmaatoSDK.userAge = @30;
    SmaatoSDK.userSearchQuery = @"yoga, vegan, san+francisco";
    
    return YES;
}
 
@end

AppDelegate.swift / Swift

//
//  AppDelegate.swift
//
 
import UIKit
import SmaatoSDKCore
 
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {   
    var window: UIWindow?
     
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 先初始化SDK!
        guard let config = SMAConfiguration(publisherId: "<SMAATO_PUBLISHER_ID>") else {
              fatalError("SDK config is nil!")
        }
        config.httpsOnly = true   // 仅允许HTTPS流量
        config.logLevel = .error  // 仅载入错误
		config.maxAdContentRating = .undefined // ads content restriction based on age
        
        SmaatoSDK.initSDK(withConfig:config)
		SmaatoSDK.gpsEnabled = true // 允许Smaato SDK在授权的情况下获取GPS地理位置;默认关闭
        
        // 可选的配置
        SmaatoSDK.userGender = .male
        SmaatoSDK.userAge = 40
        SmaatoSDK.userSearchQuery = "bitcoin, lamborghini, san+francisco"
        
        return true
    }
}

使用Mopub SDK Mediation Configuration Class来初始化Smaato SDK

AppDelegate.m / Objective-C

//
// AppDelegate.m 
#import "AppDelegate.h"

@import SmaatoSDKCore; // Import SmaatoSDKCore 
@import MoPub; // Import MoPub
@implementation AppDelegate
  
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    MPMoPubConfiguration *sdkConfig = [[MPMoPubConfiguration alloc] initWithAdUnitIdForAppInitialization:@ "];
 
    sdkConfig.globalMediationSettings = @[];
    sdkConfig.loggingLevel = MPBLogLevelInfo;
    sdkConfig.allowLegitimateInterest = YES;
    sdkConfig.additionalNetworks = @[SMAMoPubBaseAdapterConfiguration.class];
     
    NSMutableDictionary *smaatoConfig = [NSMutableDictionary new];
    [smaatoConfig setObject:@"" forKey:@"publisherId"];
    [smaatoConfig setObject:@(YES) forKey:@"httpsOnly"];
    [smaatoConfig setObject:@(NO) forKey:@"loggingDisabled"];
    [smaatoConfig setObject:@(kSMALogLevelError) forKey:@"logLevel"];
    [smaatoConfig setObject:@(kSMAMaxAdContentRatingUndefined) forKey:@"maxAdContentRating"];
 
    sdkConfig.mediatedNetworkConfigurations = [@{@"SMAMoPubBaseAdapterConfiguration":smaatoConfig} mutableCopy];
 
    [[MoPub sharedInstance] initializeSdkWithConfiguration:sdkConfig completion:^{
        NSLog(@"SDK initialization complete");
        // SDK initialization complete. Ready to make ad requests.
        SmaatoSDK.gpsEnabled = YES;
        SmaatoSDK.userGender = kSMAGenderFemale;
        SmaatoSDK.userAge = @30;
        SmaatoSDK.userSearchQuery = @"yoga, vegan, san+francisco";
    }];
     
    return YES;
}
  
@end

AppDelegate.swift / Swift

//
// AppDelegate.swift
import UIKit
import SmaatoSDKCore
  
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {  
    var window: UIWindow?
      
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization: "")
        sdkConfig.globalMediationSettings = []
        sdkConfig.loggingLevel = .info
        sdkConfig.allowLegitimateInterest = true
        sdkConfig.additionalNetworks = SMAMoPubBaseAdapterConfiguration()
        
        var smaatoConfig: [AnyHashable : Any] = [:]
        smaatoConfig.setObject("Publisher_ID", forKey: "publisherId")
        smaatoConfig.setObject(true, forKey: "httpsOnly")
        smaatoConfig.setObject(false, forKey: "loggingDisabled")
        smaatoConfig.setObject(kSMALogLevelError, forKey: "logLevel")
        smaatoConfig.setObject(kSMAMaxAdContentRatingUndefined, forKey: "maxAdContentRating")
        
        sdkConfig.mediatedNetworkConfigurations = [
        "SMAMoPubBaseAdapterConfiguration": smaatoConfig
        ]
        
        MoPub.sharedInstance().initializeSdk(with: sdkConfig) {
            print("SDK initialization complete.")
            SmaatoSDK.gpsEnabled = true
            SmaatoSDK.userGender = kSMAGenderFemale
            SmaatoSDK.userAge = 30
            SmaatoSDK.userSearchQuery = "yoga, vegan, san+francisco"
        }
         
        return true
    }
}

在此处,publisherId 是必填项,其他字段可以不填。

更多信息请浏览 https://developers.mopub.com/publishers/ios/initialize/#initialize-custom-ad-networks。

到此Smaato新一代SDK的设置已完成!

Modified: April 20, 2020 at 12:33 pm