اگر شما iOS برنامه استفاده می کندWKWebView
برای نمایش محتوای وب، ممکن است بخواهید به دلایل زیر بهینه سازی رفتار کلیک را در نظر بگیرید:
WKWebView
پشتیبانی نمی کند مرور زبانه ای کلیکهای تبلیغاتی که سعی در باز کردن یک برگه جدید دارند بهطور پیشفرض هیچ کاری انجام نمیدهند.
کلیکهای تبلیغاتی که در همان برگه باز میشوند، صفحه را بارگیری مجدد میکنند. ممکن است بخواهید کلیکهای تبلیغاتی را مجبور کنید که خارج از
WKWebView
باز شوند، برای مثال اگر میزبان بازیهای H5 هستید و میخواهید وضعیت هر بازی را حفظ کنید.تکمیل خودکار اطلاعات کارت اعتباری را در
WKWebView
پشتیبانی نمی کند. این می تواند منجر به تبدیل تجارت الکترونیک کمتر برای تبلیغ کنندگان شود و بر درآمدزایی محتوای وب تأثیر منفی بگذارد.
- ورود به سیستم گوگلنیست پشتیبانی شده در
WKWebView
.
این راهنما مراحل توصیه شده را برای بهینهسازی رفتار کلیک در نمایشهای وب تلفن همراه با حفظ محتوای نمای وب ارائه میکند.
پیش نیازها
- راهنمای تنظیم نمای وب را کامل کنید.
پیاده سازی
پیوندهای تبلیغاتی میتوانند ویژگی href
target را روی _blank
، _top
، _self
یا _parent
تنظیم کنند.با Ad Manager می توانید با تنظیم تبلیغات برای باز شدن در یک برگه یا پنجره جدید، ویژگی هدف را کنترل کنید که _blank
یا _top
باشد.پیوندهای تبلیغاتی همچنین می توانند شامل توابع جاوا اسکریپت مانند window.open(url, "_blank")
باشند.
جدول زیر نحوه عملکرد هر یک از این پیوندها را در یک نمای وب توضیح می دهد.
ویژگی هدف href | رفتار کلیکی پیش فرض WKWebView |
---|---|
target="_blank" | پیوند توسط نمای وب مدیریت نمی شود . |
target="_top" | بارگیری مجدد پیوند در نمای وب موجود. |
target="_self" | بارگیری مجدد پیوند در نمای وب موجود. |
target="_parent" | بارگیری مجدد پیوند در نمای وب موجود. |
تابع جاوا اسکریپت | رفتار کلیکی پیش فرض WKWebView |
window.open(url, "_blank") | پیوند توسط نمای وب مدیریت نمی شود . |
این مراحل را برای بهینه سازی رفتار کلیک در خود دنبال کنیدWKWebView
مثال:
WKUIDelegate
در نمونهWKWebView
خود تنظیم کنید.-
webView(_:createWebViewWith:for:windowFeatures:)
را پیاده سازی کنید.
-
WKNavigationDelegate
را روی نمونهWKWebView
خود تنظیم کنید.-
webView(_:decidePolicyFor:decisionHandler:)
را پیاده سازی کنید.
-
تعیین کنید که آیا رفتار URL کلیک را بهینه کنید.
بررسی کنید که آیا ویژگی
navigationType
در شیءWKNavigationAction
یک نوع کلیک است که می خواهید بهینه سازی کنید. قطعه کد.linkActivated
را بررسی می کند که فقط برای کلیک روی پیوندی با ویژگیhref
اعمال می شود.ویژگی
targetFrame
را در شیءWKNavigationAction
بررسی کنید. اگرnil
برگرداند، به این معنی است که هدف پیمایش یک پنجره جدید است. از آنجایی کهWKWebView
نمی تواند آن کلیک را مدیریت کند، این کلیک ها باید به صورت دستی انجام شوند.
تصمیم بگیرید که آیا URL را در یک مرورگر خارجی،
SFSafariViewController
یا نمای وب موجود باز کنید. قطعه کد نشان می دهد که چگونه با ارائه یکSFSafariViewController
URL هایی را که از سایت دور می شوند باز کنید.
نمونه کد
قطعه کد زیر نحوه بهینه سازی رفتار کلیک در نمای وب را نشان می دهد. به عنوان مثال، بررسی می کند که آیا دامنه فعلی با دامنه هدف متفاوت است یا خیر. این فقط یک رویکرد است زیرا معیارهایی که استفاده می کنید ممکن است متفاوت باشد.
سویفت
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
}
}
هدف-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 مورد نظر را باز می کند.
- هنگام بازگشت به برنامه، شمارنده صفحه آزمایشی به صفر نمی رسد تا وضعیت صفحه حفظ شود.