概要
WKWebViewをAdrop SDKに登録して、アプリ内のウェブコンテンツでバックフィル広告を表示できます。Info.plist設定
WebViewでバックフィル広告を有効にするには、Info.plistに以下のキーを追加してください:
Info.plist
<key>GADIntegrationManager</key>
<string>webview</string>
この設定はWebViewでバックフィル広告が正常に動作するために必要です。この設定がないとバックフィル広告が表示されない場合があります。
WebView登録
import WebKit
import AdropAds
class WebViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// WKWebViewConfigurationオブジェクトを初期化
let webViewConfiguration = WKWebViewConfiguration()
// "playsinline"属性を持つHTML動画をインラインで再生
webViewConfiguration.allowsInlineMediaPlayback = true
// "autoplay"属性を持つHTML動画を自動再生
webViewConfiguration.mediaTypesRequiringUserActionForPlayback = []
// WKWebViewConfigurationオブジェクトでWKWebViewを初期化
webView = WKWebView(frame: view.frame, configuration: webViewConfiguration)
// バックフィル広告サポートのためにWebViewを登録
// コンテンツ読み込み前にできるだけ早く呼び出す
Adrop.registerWebView(webView)
// Webコンテンツを読み込む
if let url = URL(string: "https://your-website.com") {
webView.load(URLRequest(url: url))
}
}
}
@import WebKit;
@import AdropAds;
@interface WebViewController ()
@property (nonatomic, weak) IBOutlet WKWebView *webView;
@end
@implementation WebViewController
- (void)viewDidLoad {
[super viewDidLoad];
// WKWebViewConfigurationオブジェクトを初期化
WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];
// "playsinline"属性を持つHTML動画をインラインで再生
webViewConfiguration.allowsInlineMediaPlayback = YES;
// "autoplay"属性を持つHTML動画を自動再生
webViewConfiguration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
// WKWebViewConfigurationオブジェクトでWKWebViewを初期化
self.webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:webViewConfiguration];
[self.view addSubview:self.webView];
// バックフィル広告サポートのためにWebViewを登録
// コンテンツ読み込み前にできるだけ早く呼び出す
[Adrop registerWebView:self.webView];
// Webコンテンツを読み込む
NSURL *url = [NSURL URLWithString:@"https://your-website.com"];
[self.webView loadRequest:[NSURLRequest requestWithURL:url]];
}
@end
registerWebView()はメインスレッドで呼び出す必要があります。
Webコンテンツを読み込む前にできるだけ早く呼び出してください(例:viewDidLoad)。WebViewでバックフィル広告を使用するには
adrop-ads-backfillモジュールが必要です。モジュールがインストールされていない場合、registerWebView()は静かに無視されます。外部URLの処理
アプリで自社ドメイン以外のURLを外部ブラウザで開くロジックがある場合、広告リソースリクエスト(例:googleads.g.doubleclick.net)がブロックされないようにする必要があります。
広告リソース(iframe、スクリプトなど)は広告SDKによって自動的にロードされ、ユーザーが直接クリックしたものではありません。ユーザーが直接クリックしたメインフレームのナビゲーションのみを外部ブラウザにリダイレクトしてください。
import UIKit
import WebKit
let allowedHost = "my-domain.com"
func webView(_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = navigationAction.request.url else {
decisionHandler(.cancel)
return
}
let host = url.host ?? ""
// ユーザーが直接クリックした場合のみ外部ブラウザで開く
// 広告リソース(例:googleads.g.doubleclick.net)はiframe/スクリプトでロードされるためブロックしない
if !host.contains(allowedHost),
navigationAction.navigationType == .linkActivated {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
NSString *allowedHost = @"my-domain.com";
- (void)webView:(WKWebView *)webView
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
NSURL *url = navigationAction.request.URL;
if (!url) {
decisionHandler(WKNavigationActionPolicyCancel);
return;
}
NSString *host = url.host ?: @"";
// ユーザーが直接クリックした場合のみ外部ブラウザで開く
// 広告リソース(例:googleads.g.doubleclick.net)はiframe/スクリプトでロードされるためブロックしない
if (![host containsString:allowedHost] &&
navigationAction.navigationType == WKNavigationTypeLinkActivated) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
decisionHandler(WKNavigationActionPolicyCancel);
return;
}
decisionHandler(WKNavigationActionPolicyAllow);
}
自社ドメイン以外のすべてのリクエストをブロックまたはリダイレクトしないでください。
googleads.g.doubleclick.netのような広告リソースはバックフィル広告のプロセスで自動的にロードされ、WebView内で正常にロードされる必要があります。関連ドキュメント
バナー広告
バナー広告の実装方法を確認
リファレンス
APIリファレンス
サンプル
サンプルリポジトリ