アプリで iOS
WKWebView
ウェブ コンテンツを表示するには、
をご活用ください。
WKWebView
は同意しない タブ形式ブラウジングを タブ ブラウジングです。新しいタブを開こうとする広告をクリックしても何も起こらない できます。
同じタブで広告をクリックして開くと、ページが再読み込みされます。必要に応じて
WKWebView
の外で広告がクリックされて開く(H5 をホストしている場合など) 特定のゲームを 維持します。WKWebView
では、自動入力はクレジット カード情報に対応していません。この場合、 広告主の e コマースのコンバージョンが減り、 ウェブ コンテンツの収益化です。
- Google ログイン
ではない
サポートされている
WKWebView
。
このガイドでは、モバイルでのクリック動作を最適化するための推奨手順を説明します ウェブビューのコンテンツは保持されます。
前提条件
- ウェブビューの設定を完了していること ご覧ください
実装
広告リンクでは href
のターゲット属性を _blank
、_top
、
_self
、_parent
など)。
アド マネージャーでは、ターゲット属性を _blank
または _top
に管理できます。
広告を新しいタブで開くか、
ウィンドウ。
広告リンクには、次のような JavaScript 関数も含めることができます。
window.open(url, "_blank")
。
次の表は、これらの各リンクがウェブビューでどのように動作するかを示しています。
href 個のターゲット属性 |
WKWebView のデフォルトのクリック動作 |
---|---|
target="_blank" |
ウェブビューで処理されないリンク。 |
target="_top" |
既存のウェブビューでリンクを再読み込みします。 |
target="_self" |
既存のウェブビューでリンクを再読み込みします。 |
target="_parent" |
既存のウェブビューでリンクを再読み込みします。 |
JavaScript 関数 | WKWebView のデフォルトのクリック動作 |
window.open(url, "_blank") |
ウェブビューで処理されないリンク。 |
以下の手順で、
WKWebView
インスタンス:
WKWebView
でWKUIDelegate
を設定します 作成します。WKNavigationDelegate
をWKWebView
インスタンス。クリック URL の動作を最適化するかどうかを決定します。
navigationType
プロパティがWKNavigationAction
オブジェクトは、 クリックタイプを指定しますコード スニペットは、 (.linkActivated
) これは、href
属性が設定されたリンクのクリックにのみ適用されます。targetFrame
を確認しますWKNavigationAction
オブジェクトのプロパティ。nil
が返された場合は、次のことを意味します。 新しいウィンドウがナビゲーションの ターゲットになりますWKWebView
は処理できないため クリックを手動で処理する必要があります。
URL を外部ブラウザで開くかどうかを決定します。
SFSafariViewController
既存のウェブビューに表示されます別のページから移動する URL を開く方法を示すコード スニペットSFSafariViewController
をプレゼンテーションします。
サンプルコード
次のコード スニペットは、ウェブビューのクリック動作を最適化する方法を示しています。として 現在のドメインがターゲット ドメインと異なるかどうかを確認します。 使用する基準はさまざまであるため、これはあくまでも 1 つの方法です。
Swift
import GoogleMobileAds
import SafariServices
import WebKit
class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// ... Register the WKWebView.
// 1. Set the WKUIDelegate on your WKWebView instance.
webView.uiDelegate = self;
// 2. Set the WKNavigationDelegate on your WKWebView instance.
webView.navigationDelegate = self
}
// Implement the WKUIDelegate method.
func webView(
_ webView: WKWebView,
createWebViewWith configuration: WKWebViewConfiguration,
for navigationAction: WKNavigationAction,
windowFeatures: WKWindowFeatures) -> WKWebView? {
guard let url = navigationAction.request.url,
let currentDomain = webView.url?.host,
let targetDomain = url.host else { return nil }
// 3. Determine whether to optimize the behavior of the click URL.
if didHandleClickBehavior(
url: url,
currentDomain: currentDomain,
targetDomain: targetDomain,
navigationAction: navigationAction) {
print("URL opened in SFSafariViewController.")
}
return nil
}
// Implement the WKNavigationDelegate method.
func webView(
_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
{
guard let url = navigationAction.request.url,
let currentDomain = webView.url?.host,
let targetDomain = url.host else { return decisionHandler(.cancel) }
// 3. Determine whether to optimize the behavior of the click URL.
if didHandleClickBehavior(
url: url,
currentDomain: currentDomain,
targetDomain: targetDomain,
navigationAction: navigationAction) {
return decisionHandler(.cancel)
}
decisionHandler(.allow)
}
// Implement a helper method to handle click behavior.
func didHandleClickBehavior(
url: URL,
currentDomain: String,
targetDomain: String,
navigationAction: WKNavigationAction) -> Bool {
// Check if the navigationType is a link with an href attribute or
// if the target of the navigation is a new window.
guard navigationAction.navigationType == .linkActivated ||
navigationAction.targetFrame == nil,
// If the current domain does not equal the target domain,
// the assumption is the user is navigating away from the site.
currentDomain != targetDomain else { return false }
// 4. Open the URL in a SFSafariViewController.
let safariViewController = SFSafariViewController(url: url)
present(safariViewController, animated: true)
return true
}
}
Objective-C
@import GoogleMobileAds;
@import SafariServices;
@import WebKit;
@interface ViewController () <WKNavigationDelegate, WKUIDelegate>
@property(nonatomic, strong) WKWebView *webView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// ... Register the WKWebView.
// 1. Set the WKUIDelegate on your WKWebView instance.
self.webView.uiDelegate = self;
// 2. Set the WKNavigationDelegate on your WKWebView instance.
self.webView.navigationDelegate = self;
}
// Implement the WKUIDelegate method.
- (WKWebView *)webView:(WKWebView *)webView
createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration
forNavigationAction:(WKNavigationAction *)navigationAction
windowFeatures:(WKWindowFeatures *)windowFeatures {
NSURL *url = navigationAction.request.URL;
NSString *currentDomain = webView.URL.host;
NSString *targetDomain = navigationAction.request.URL.host;
// 3. Determine whether to optimize the behavior of the click URL.
if ([self didHandleClickBehaviorForURL: url
currentDomain: currentDomain
targetDomain: targetDomain
navigationAction: navigationAction]) {
NSLog(@"URL opened in SFSafariViewController.");
}
return nil;
}
// Implement the WKNavigationDelegate method.
- (void)webView:(WKWebView *)webView
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
decisionHandler:
(void (^)(WKNavigationActionPolicy))decisionHandler {
NSURL *url = navigationAction.request.URL;
NSString *currentDomain = webView.URL.host;
NSString *targetDomain = navigationAction.request.URL.host;
// 3. Determine whether to optimize the behavior of the click URL.
if ([self didHandleClickBehaviorForURL: url
currentDomain: currentDomain
targetDomain: targetDomain
navigationAction: navigationAction]) {
decisionHandler(WKNavigationActionPolicyCancel);
return;
}
decisionHandler(WKNavigationActionPolicyAllow);
}
// Implement a helper method to handle click behavior.
- (BOOL)didHandleClickBehaviorForURL:(NSURL *)url
currentDomain:(NSString *)currentDomain
targetDomain:(NSString *)targetDomain
navigationAction:(WKNavigationAction *)navigationAction {
if (!url || !currentDomain || !targetDomain) {
return NO;
}
// Check if the navigationType is a link with an href attribute or
// if the target of the navigation is a new window.
if ((navigationAction.navigationType == WKNavigationTypeLinkActivated
|| !navigationAction.targetFrame)
// If the current domain does not equal the target domain,
// the assumption is the user is navigating away from the site.
&& ![currentDomain isEqualToString: targetDomain]) {
// 4. Open the URL in a SFSafariViewController.
SFSafariViewController *safariViewController =
[[SFSafariViewController alloc] initWithURL:url];
[self presentViewController:safariViewController animated:YES
completion:nil];
return YES;
}
return NO;
}
ページ ナビゲーションをテストする
ページ ナビゲーションの変更をテストするには、
https://webview-api-for-ads-test.glitch.me#click-behavior-tests
ウェブビューに統合しますそれぞれのリンクタイプをクリックすると、その内容が 確認しましょう
その際は、次の点をよくご確認ください。
- 各リンクをクリックすると、目的の URL が開きます。
- アプリに戻ってもテストページのカウンタはゼロにリセットされず、 ページの状態が保持されたことを検証できます。