目录
版本历史
- 版本 1.0.0
开始之前
- Santa SDK 推荐在响应广告请求并在实际展示之间(曝光缓存时间)控制在10分钟以内(IAB 推荐)。
- 如果广告响应后展示时间比这个时间长,则可能会因为广告活动而无效。
SDK 信息
SantaSDK是用Xcode 15.1,iOS 12.0版本构建的。
- 参考 1: 查看App Store提交SDK的最小要求
- 参考 2: 查看最小要求和支持的SDK
开始使用
应用程序设置
Santa SDK for CocoaPods 添加方法
Pod Install
构建Podfile
pod init
或
vi Podfile
修改Podfile
target 'MyApp' do
use_frameworks!
pod 'SantaSDK'
end
安装Podfile
pod install
Info.plist 设置
键 | 值 | 描述 |
---|---|---|
隐私 - 跟踪使用描述 | 例如:为了提供个性化广告,将使用设备识别数据。 | 使用该功能的应用访问设备追踪数据的原因 |
隐私 - 总是位置和使用时位置使用描述 | 例如:为了提供个性化广告,将使用用户的位置数据。 | 使用该功能的应用需要始终访问用户位置信息的原因 |
隐私 - 使用时位置使用描述 | 例如:为了提供个性化广告,将使用用户的位置数据。 | 使用该功能的应用需要在使用时访问用户位置信息的原因 |
隐私 - 位置默认精度降低 | 例如:是或否 | 是否使用精确位置信息的值 |
文章应用
应用注册
单元ID发出
横幅广告
详细内容请参考横幅广告样本。
1. 声明用于请求广告的变量
// 광고 인스턴스
var adView : STAdView?
// 광고가 표시될 뷰
var adViewContainer : UIView!
2. 创建广告实例
/**
* @param adUnitId - 광고 유닛 ID
* @param size - 원하는 광고 크기입니다.
*/
STAdView(adUnitId: String?, size: CGSize?)
示例)
// 광고 인스턴스 생성
self.adView = STAdView(adUnitId: "adUnitId", size: self.adViewContainer.frame.size)
if let adView = self.adView {
// 대리자 전달
adView.delegate = self
// 광고 포맷 선택 (adFormat: [SantaSDK.STAdFormat]?)
adView.adFormat = [.HTML]
}
3. 向广告位置添加广告视图
self.adViewContainer.addSubview(adView)
// 광고 뷰에 레이아웃 적용
self.setAutoLayout(view: self.adViewContainer, adView: adView)
4. 请求广告
self.adView.loadAd()
横幅广告 Protocol (STAdViewDelegate Protocol Reference)
// 광고를 성공적으로로드하면 전송됩니다.
func adViewDidLoadAd(_ view: STAdView?)
// 광고로드에 실패 할 때 전송됩니다.
func adViewDidFailToLoadAd(_ view: STAdView?)
// 콘텐츠를로드하려고 할 때 전송됩니다.
func willLoadViewForAd(_ view: STAdView?)
// 모달 콘텐츠를 닫았을 때 전송되어 애플리케이션에 제어권을 반환합니다.
func didLoadViewForAd(_ view: STAdView?)
// 사용자가 광고를 탭하여 애플리케이션에서 나 가려고 할 때 전송됩니다.
func willLeaveApplicationFromAd(_ view: STAdView?)
全屏广告
详细内容请参考全屏广告样本。
1. 声明用于请求全屏广告的变量
// 전면 광고 인스턴스
var interstitial: STInterstitialAdView?
2. 调用创建全屏广告实例的函数
/**
* @param adUnitId - 광고 유닛 ID
*/
STInterstitialAdView.interstitialAdControllerForAdUnitId(_ adUnitId: String) -> STInterstitialAdView
示例)
// 전면 광고 인스턴스 생성
self.interstitial = STInterstitialAdView.interstitialAdControllerForAdUnitId(adUnitId)
if let interstitial = interstitial {
// 대리자 전달
interstitial.delegate = self
// 광고 포맷 선택 (adFormat: [SantaSDK.STAdFormat]?)
interstitial.adFormat = [.HTML]
}
3. 请求全屏广告
self.interstitial.loadAd()
4. 显示全屏广告
/**
* @param controller 전면 광고를 표시하는 데 사용해야하는 UIViewController입니다.
*/
STInterstitialAdView.showFromViewController(_ controller: UIViewController? = nil)
示例)
self.interstitial?.showFromViewController(self)
全屏广告 Protocol (STInterstitialAdViewDelegate Protocol Reference)
// 전면 광고를 성공적으로로드하면 전송됩니다.
func interstitialDidLoadAd(_ interstitial: STInterstitialAdView?)
// 광고를로드하지 못할 때 전송됩니다.
func interstitialDidFailToLoadAd(_ interstitial: STInterstitialAdView?)
// 전면 광고가 화면에 표시되기 직전에 전송됩니다.
func interstitialWillAppear(_ interstitial: STInterstitialAdView?)
// 전면 광고가 화면에 표시된 후에 전송됩니다.
func interstitialDidAppear(_ interstitial: STInterstitialAdView?)
// 전면 광고가 화면에 표시되지 못할때
func interstitialDidFailToShow(_ interstitial: STInterstitialAdView?)
// 전면 광고가 화면에서 닫히기 직전에 전송됩니다.
func interstitialWillDisappear(_ interstitial: STInterstitialAdView?)
// 전면 광고가 화면에서 해제 된 후 전송되어 애플리케이션에 제어권이 반환됩니다.
func interstitialDidDisappear(_ interstitial: STInterstitialAdView?)
// 로드된 전면 광고를 더 이상 표시 할 수 없을 때 전송됩니다.
func interstitialDidExpire(_ interstitial: STInterstitialAdView?)
// 사용자가 전면 광고를 탭하고 광고가 타겟 작업을 수행하려고 할 때 전송됩니다.
func interstitialDidReceiveTapEvent(_ interstitial: STInterstitialAdView?)
原生广告
详细内容请参考原生广告样本。
1. 声明原生广告视图类
根据原生协议,使用UIView类构建需要的项目。
详细内容请参考示例代码。
原生广告视图 Protocol (STNativeAdRenderingDelegate Protocol Reference)
// 메인 텍스트에 사용하고있는 UILabel을 반환합니다.
func nativeMainTextLabel() -> UILabel?
// 제목 텍스트에 사용중인 UILabel을 반환합니다.
func nativeTitleTextLabel() -> UILabel?
// 아이콘 이미지에 사용중인 UIImageView를 반환합니다.
func nativeIconImageView() -> UIImageView?
// 메인 이미지에 사용중인 UIImageView를 반환합니다.
func nativeMainImageView() -> UIImageView?
// 비디오에 사용하는 UIView를 반환합니다. (동영상 광고를 게재할 때만 이를 구현하면 됩니다.)
func nativeVideoView() -> UIView?
// 클릭 유도 문안 (cta) 텍스트에 사용중인 UILabel을 반환합니다.
func nativeCallToActionTextLabel() -> UILabel?
// 개인 정보 아이콘에 대해 뷰가 사용중인 UIImageView를 반환합니다.
func nativePrivacyInformationIconImageView() -> UIImageView?
示例)
class NativeView: UIView {
var titleLabel: UILabel!
var mainTextLabel: UILabel!
var iconImageView: UIImageView!
var mainImageView: UIImageView!
var mainVideoView: UIView!
var privacyInformationIconImageView: UIImageView!
var ctaLabel: UILabel!
}
2. 声明原生广告实例变量
// 네이티브 광고 인스턴스 선언
var nativeAd: STNativeAd?
// 네이티브 광고가 표시될 뷰 선언
var adViewContainer : UIView!
3. 原生广告请求预处理
STNativeAdManager.initNativeAdWithAdUnitIdentifier(_ identifier: String, _ adViewClass: AnyClass?)
示例)
STNativeAdManager.initNativeAdWithAdUnitIdentifier(adUnitId, NativeView.self)
// 광고 포맷 선택 (adFormat: [SantaSDK.STAdFormat]?)
STNativeAdManager.adFormat([.NATIVE])
4. 请求并显示原生广告
STNativeAdManager.startWithCompletionHandler { (request, response, error) in
if error != nil {
// 에러 처리
} else {
self.nativeAd = response
self.nativeAd?.delegate = self
// 네이티브 광고 표시
self.displayAd()
}
}
func displayAd() {
// 기존에 표시되던 View들을 제거
adViewContainer.subviews.forEach { subview in
subview.removeFromSuperview()
}
// 광고 위치에 네이티브 광고 뷰 추가
if let adView = nativeAd?.retrieveAdViewWithError(nil) {
adViewContainer.addSubview(adView)
setAutoLayout2(view: adViewContainer, adView: adView)
}
}
混合广告
有关详细信息,请参阅混合广告示例。
1. 声明用于请求广告的变量
// WebView로 전달될 데이터 매니저 인스턴스
var adTagManager: STAdTagManager?
// 광고가 표시될 웹뷰
var webView: WKWebView!
2. 准备广告请求所需数据
/**
* @param adUnitId - 광고 유닛 ID
* @param size - 원하는 광고 크기입니다.
*/
adTagManager = STAdTagManager()
// 광고식별자 요청은 광고 요청 전에 완료되야합니다.
adTagManager?.requestTrackingAuthorization() { _ in
// 위치 - 사용자 승인 요청
self.adTagManager?.requestLocation()
}
3. 在WebView页面加载前注入数据
WKNavigationDelegate {
// MARK: Javascript 주입 방법 - 페이지 로딩 전에 데이터를 주입 시킨다
// 웹 컨텐츠를 수신하기 시작할때 데이터 바인딩
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
// 기본 데이터 외 문서에 추가할 데이터
let source = self.adTagManager?.makeSource(["custom_key" : "custom_value"]) ?? ""
// json 형태로 데이터 주입
webView.evaluateJavaScript("window.santa_sdk=\(source);", completionHandler: { result, error in
if error != nil {
print("ERROR : \(String(describing: error))")
} else {
// 성공
}
})
}
}
WKNavigationDelegate 协议
// 웹 컨텐츠를 수신하기 시작할때
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!)
添加广告实例选项
- 根据需要,可以为广告实例添加其他设置。
testing
:是否进行测试广告请求。location
:设置位置信息。显示相关度更高的广告。keywords
:设置自定义元数据。coppa
:根据美国儿童在线隐私保护法,如果将用户设置为13岁以下,则限制个人信息以供广告竞价处理。(IP、设备ID、地理信息等)rewarded
:设置是否提供地面奖励。