新一代SDK | iOS | AdMob对接
将AdMob作为首要广告服务器的对接说明
(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) |
AdMob面板创建
1. 前往AdMob面板 – https://apps.admob.com/v2/mediation/groups/list
2. 点击”Create Mediation Group“按钮
3. 选择您的广告格式。您的可选项为横幅,插屏和激励视频广告。
4. 在下一个页面中选择对应配置。
5. 对于”Ad Unit“的”Add Ad Unit“选项,请选择需要聚合的广告单元。
6. 在”Ad sources“,点击”ADD CUSTOM EVENT“
-
- 提供标签和目标每千次展示费用。
- 在配置”Configure ad units“时提供下列细节作为class命名:
-
-
- 横幅广告:
SMAAdMobSmaatoBannerAdapter
- 插屏广告:
SMAAdMobSmaatoInterstitialAdapter
- 激励视频广告:
SMAAdMobSmaatoRewardedVideoAdapter
- 横幅广告:
-
-
- 传递下列参数:
adspaceId=<YOUR_SPX_ADSPACE_ID>
- 传递下列参数:
SDK对接
由于SDK模块化结构,您可以选择不同的对接方式。以下为一些应添加到您项目里的Podfile的配置示例:
横幅广告(支持富媒体)
pod 'smaato-ios-sdk/Banner'
pod 'smaato-ios-sdk/Adapters/Admob/Banner'
插屏广告(支持富媒体和视频)
pod 'smaato-ios-sdk/Interstitial'
pod 'smaato-ios-sdk/Adapters/Admob/Interstitial'
激励视频广告
pod 'smaato-ios-sdk/RewardedAds'
pod 'smaato-ios-sdk/Adapters/Admob/RewardedAds'
插屏广告(仅支持富媒体)
pod 'smaato-ios-sdk/Modules/Interstitial'
pod 'smaato-ios-sdk/Modules/RichMedia'
pod 'smaato-ios-sdk/Adapters/Admob/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; // 仅载入错误log
config.maxAdContentRating = kSMAMaxAdContentRatingUndefined; // 根据用户年龄限制广告内容
[SmaatoSDK initSDKWithConfig:config];
SmaatoSDK.gpsEnabled = YES; // 允许Smaato SDK获取用户地理位置;默认关闭状态
// 可选的配置
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 // 仅载入错误log
config.maxAdContentRating = .undefined // 根据用户年龄限制广告内容
SmaatoSDK.initSDK(withConfig:config)
SmaatoSDK.gpsEnabled = true // 允许Smaato SDK获取用户地理位置;默认关闭状态
// 可选的配置
SmaatoSDK.userGender = .male
SmaatoSDK.userAge = 40
SmaatoSDK.userSearchQuery = "bitcoin, lamborghini, san+francisco"
return true
}
}
到此Smaato新一代SDK的设置已完成!
Modified: March 1, 2021 at 11:48 am