新一代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 |
“ |
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(全球供应商名单) |
IABConsent_SubjectToGDPR
被设为“1”,那么作为媒体的您需要使密钥IABConsent_ConsentString
包含有效的权限字符串(用户会在广告展示前被要求提供)。否则这样的广告请求会在服务器端被处理为掉且不会有返回。代码示例
// 用户不受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会自动读取储存并使用
1YNN:
用户没有opt-out;1NYY:
用户选择opt-out,此时不可以使用用户数据。全屏广告位重要说明
目前,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 classes:
-
- Custom event class data:
{"adspaceId":"<YOUR_SPX_ADSPACE_ID>"}
- Custom event class data:
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: March 1, 2021 at 11:49 am