این راهنما برای ناشرانی است که آگهیهای باز شدن برنامه را ادغام میکنند.
آگهیهای باز شدن برنامه قالب آگهی ویژهای است که برای ناشرانی درنظر گرفته شده است که میخواهند از صفحههای بار کردن برنامه خود درآمدزایی کنند. کاربران شما میتوانند آگهیهای در صفحه باز شدن برنامه را هروقت خواستند ببندند. وقتی کاربران برنامه شما را به پیشنما میآورند، آگهیهای باز شدن برنامه میتواند نمایش داده شود.
آگهیهای باز شدن برنامه بهطور خودکار یک ناحیه کوچک نمانامسازی را نشان میدهند تا کاربران بدانند که در برنامه شما هستند. در اینجا نمونهای از ظاهر آگهی باز شدن برنامه آورده شده است:

در سطح بالا، مراحل لازم برای پیادهسازی آگهیهای در صفحه باز شدن برنامه در اینجا آمده است:
- کلاس مدیری ایجاد کنید که آگهی را قبلاز اینکه لازم باشد نمایش دهید بار کند.
- آگهی را درطول رویدادهای پیشزمینه برنامه نشان دهید.
- مدیریت کردن تماسهای برگشتی ارائه.
پیشنیازها
- Google Mobile Ads SDK را راهاندازی کنید.
- با نحوه پیکربندی دستگاهتان بهعنوان دستگاه آزمایشی آشنا باشید.
همیشه با آگهیهای آزمایشی آزمایش کنید
هنگام ساختن و آزمایش کردن برنامههایتان، حتماً از آگهیهای آزمایشی استفاده کنید نه آگهیهای زنده و تولیدی. انجام ندادن این کار میتواند منجر به تعلیق حسابتان شود.
سادهترین راه برای بار کردن آگهیهای آزمایشی، استفاده از شناسه واحد آگهی آزمایشی اختصاصی ما برای آگهیهای باز شدن برنامه است:
/21775744923/example/app-open
این شناسه بهطور ویژه پیکربندی شده است تا برای هر درخواست، آگهیهای آزمایشی برگرداند و شما میتوانید آزادانه از آن در برنامههای خودتان هنگام کدنویسی، آزمایش، و اشکالزدایی استفاده کنید. فقط مطمئن شوید که قبلاز انتشار برنامهتان، آن را با شناسه واحد آگهی خودتان جایگزین کنید.
برای اطلاعات بیشتر درباره نحوه عملکرد آگهیهای آزمایشی Google Mobile Ads SDK، به آگهیهای آزمایشی مراجعه کنید.
پیادهسازی کلاس مدیر
آگهی شما باید سریع نشان داده شود، بنابراین بهتر است آگهیتان را قبلاز اینکه لازم باشد نمایش دهید بار کنید. به این ترتیب، بهمحض اینکه کاربر وارد برنامه شما میشود، آگهی آماده نمایش خواهد بود. یک کلاس مدیر را پیادهسازی کنید تا درخواستهای آگهی را قبلاز زمانی که نیاز به نمایش آگهی دارید، انجام دهد.
کلاس تکعضوی جدیدی بهنام AppOpenAdManager ایجاد کنید:
Swift
class AppOpenAdManager: NSObject {
/// The app open ad.
var appOpenAd: AppOpenAd?
/// Maintains a reference to the delegate.
weak var appOpenAdManagerDelegate: AppOpenAdManagerDelegate?
/// Keeps track of if an app open ad is loading.
var isLoadingAd = false
/// Keeps track of if an app open ad is showing.
var isShowingAd = false
/// Keeps track of the time when an app open ad was loaded to discard expired ad.
var loadTime: Date?
/// For more interval details, see https://support.google.com/admanager/answer/9351867
let timeoutInterval: TimeInterval = 4 * 3_600
static let shared = AppOpenAdManager()
آبجکتیو-سی
@interface AppOpenAdManager ()
/// The app open ad.
@property(nonatomic, strong, nullable) GADAppOpenAd *appOpenAd;
/// Keeps track of if an app open ad is loading.
@property(nonatomic, assign) BOOL isLoadingAd;
/// Keeps track of if an app open ad is showing.
@property(nonatomic, assign) BOOL isShowingAd;
/// Keeps track of the time when an app open ad was loaded to discard expired ad.
@property(nonatomic, strong, nullable) NSDate *loadTime;
@end
/// For more interval details, see https://support.google.com/admanager/answer/9351867
static const NSInteger kTimeoutInterval = 4;
@implementation AppOpenAdManager
+ (nonnull AppOpenAdManager *)sharedInstance {
static AppOpenAdManager *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[AppOpenAdManager alloc] init];
});
return instance;
}
و پروتکل AppOpenAdManagerDelegate آن را اجرا کنید:
Swift
protocol AppOpenAdManagerDelegate: AnyObject {
/// Method to be invoked when an app open ad life cycle is complete (i.e. dismissed or fails to
/// show).
func appOpenAdManagerAdDidComplete(_ appOpenAdManager: AppOpenAdManager)
}
آبجکتیو-سی
@protocol AppOpenAdManagerDelegate <NSObject>
/// Method to be invoked when an app open ad life cycle is complete (i.e. dismissed or fails to
/// show).
- (void)adDidComplete;
@end
بار کردن آگهی
مرحله بعدی بار کردن آگهی در صفحه باز شدن برنامه است:
Swift
func loadAd() async {
// Do not load ad if there is an unused ad or one is already loading.
if isLoadingAd || isAdAvailable() {
return
}
isLoadingAd = true
do {
appOpenAd = try await AppOpenAd.load(
with: "/21775744923/example/app-open", request: AdManagerRequest())
appOpenAd?.fullScreenContentDelegate = self
loadTime = Date()
} catch {
print("App open ad failed to load with error: \(error.localizedDescription)")
appOpenAd = nil
loadTime = nil
}
isLoadingAd = false
}
آبجکتیو-سی
- (void)loadAd {
// Do not load ad if there is an unused ad or one is already loading.
if ([self isAdAvailable] || self.isLoadingAd) {
return;
}
self.isLoadingAd = YES;
[GADAppOpenAd loadWithAdUnitID:@"/21775744923/example/app-open"
request:[GADRequest request]
completionHandler:^(GADAppOpenAd * _Nullable appOpenAd, NSError * _Nullable error) {
self.isLoadingAd = NO;
if (error) {
NSLog(@"App open ad failed to load with error: %@", error);
self.appOpenAd = nil;
self.loadTime = nil;
return;
}
self.appOpenAd = appOpenAd;
self.appOpenAd.fullScreenContentDelegate = self;
self.loadTime = [NSDate date];
}];
}
نمایش آگهی
مرحله بعدی نمایش آگهی در صفحه باز شدن برنامه است. اگر آگهی دردسترس نیست، سعی کنید آگهی جدیدی بار کنید.
Swift
func showAdIfAvailable() {
// If the app open ad is already showing, do not show the ad again.
if isShowingAd {
return print("App open ad is already showing.")
}
// If the app open ad is not available yet but is supposed to show, load
// a new ad.
if !isAdAvailable() {
print("App open ad is not ready yet.")
// The app open ad is considered to be complete in this example.
appOpenAdManagerDelegate?.appOpenAdManagerAdDidComplete(self)
// Load a new ad.
return
}
if let appOpenAd {
print("App open ad will be displayed.")
appOpenAd.present(from: nil)
isShowingAd = true
}
}
آبجکتیو-سی
- (void)showAdIfAvailable {
// If the app open ad is already showing, do not show the ad again.
if (self.isShowingAd) {
NSLog(@"App open ad is already showing.");
return;
}
// If the app open ad is not available yet but is supposed to show, load
// a new ad.
if (![self isAdAvailable]) {
NSLog(@"App open ad is not ready yet.");
// The app open ad is considered to be complete in this example.
[self adDidComplete];
// Load a new ad.
return;
}
[self.appOpenAd presentFromRootViewController:nil];
self.isShowingAd = YES;
}
نمایش آگهی درطول رویدادهای پیشزمینه برنامه
وقتی برنامه فعال شد، showAdIfAvailable() را فراخوانی کنید تا آگهیای را نشان دهد (اگر
آگهیای دردسترس باشد) یا آگهی جدیدی را بار کند.
Swift
func applicationDidBecomeActive(_ application: UIApplication) {
// Show the app open ad when the app is foregrounded.
AppOpenAdManager.shared.showAdIfAvailable()
}
آبجکتیو-سی
- (void) applicationDidBecomeActive:(UIApplication *)application {
// Show the app open ad when the app is foregrounded.
[AppOpenAdManager.sharedInstance showAdIfAvailable];
}
مدیریت کردن تماسهای برگشتی ارائه
برای دریافت اعلانهای مربوط به رویدادهای ارائه، باید
GADFullScreenContentDelegate را به ویژگی fullScreenContentDelegate`s
آگهی برگرداندهشده اختصاص دهید:
Swift
appOpenAd?.fullScreenContentDelegate = self
آبجکتیو-سی
self.appOpenAd.fullScreenContentDelegate = self;
بهویژه، باید آگهی در صفحه باز شدن برنامه بعدی را پساز پایان ارائه آگهی اول درخواست کنید. کد زیر نحوه پیادهسازی پروتکل را
در فایل AppOpenAdManager نشان میدهد:
Swift
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("App open ad recorded an impression.")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("App open ad recorded a click.")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("App open ad will be dismissed.")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("App open ad will be presented.")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("App open ad was dismissed.")
appOpenAd = nil
isShowingAd = false
appOpenAdManagerDelegate?.appOpenAdManagerAdDidComplete(self)
Task {
await loadAd()
}
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("App open ad failed to present with error: \(error.localizedDescription)")
appOpenAd = nil
isShowingAd = false
appOpenAdManagerDelegate?.appOpenAdManagerAdDidComplete(self)
Task {
await loadAd()
}
}
آبجکتیو-سی
- (void)adDidRecordImpression:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad recorded an impression.");
}
- (void)adDidRecordClick:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad recorded a click.");
}
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad will be presented.");
}
- (void)adWillDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad will be dismissed.");
}
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad was dismissed.");
self.appOpenAd = nil;
self.isShowingAd = NO;
[self adDidComplete];
[self loadAd];
}
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
NSLog(@"App open ad failed to present with error: %@", error.localizedDescription);
self.appOpenAd = nil;
self.isShowingAd = NO;
[self adDidComplete];
[self loadAd];
}
توجه به انقضای آگهی
برای اطمینان از اینکه آگهی منقضیشده را نشان نمیدهید، میتوانید روشی را به نماینده برنامه اضافه کنید که زمان سپریشده از بار شدن مرجع آگهی را بررسی کند.
در AppOpenAdManager، یک ویژگی Date بهنام loadTime اضافه کنید و
ویژگی را هنگام بار شدن آگهی تنظیم کنید. سپس میتوانید روشی اضافه کنید که اگر کمتر از تعداد ساعت مشخصی از بار شدن آگهیتان گذشته باشد، true را برگرداند. حتماً
پیشاز تلاش برای نمایش آگهی، اعتبار مرجع آگهیتان را بررسی کنید.
Swift
private func wasLoadTimeLessThanNHoursAgo(timeoutInterval: TimeInterval) -> Bool {
// Check if ad was loaded more than n hours ago.
if let loadTime = loadTime {
return Date().timeIntervalSince(loadTime) < timeoutInterval
}
return false
}
private func isAdAvailable() -> Bool {
// Check if ad exists and can be shown.
return appOpenAd != nil && wasLoadTimeLessThanNHoursAgo(timeoutInterval: timeoutInterval)
}
آبجکتیو-سی
- (BOOL)wasLoadTimeLessThanNHoursAgo:(int)n {
// Check if ad was loaded more than n hours ago.
NSDate *now = [NSDate date];
NSTimeInterval timeIntervalBetweenNowAndLoadTime = [now timeIntervalSinceDate:self.loadTime];
double secondsPerHour = 3600.0;
double intervalInHours = timeIntervalBetweenNowAndLoadTime / secondsPerHour;
return intervalInHours < n;
}
- (BOOL)isAdAvailable {
// Check if ad exists and can be shown.
return self.appOpenAd && [self wasLoadTimeLessThanNHoursAgo:kTimeoutInterval];
}
شروع سرد و صفحهنمایشهای بار کردن
در این سند فرض شده است که شما آگهیهای در صفحه باز شدن برنامه را فقط زمانی نشان میدهید که کاربران برنامه شما را وقتی در حافظه معلق است در پیشزمینه قرار میدهند. «راهاندازی سرد» زمانی اتفاق میافتد که برنامه شما راهاندازی میشود اما قبلاً در حافظه تعلیق نشده است.
نمونهای از راهاندازی سرد زمانی است که کاربر برای اولینبار برنامهتان را باز میکند. با راهاندازی سرد، آگهی در صفحه باز شدن برنامه که قبلاً بار شده باشد و آماده نمایش فوری باشد نخواهید داشت. تأخیر بین زمانی که آگهی درخواست میکنید و زمانی که آگهی را دریافت میکنید میتواند شرایطی ایجاد کند که کاربران بتوانند برای مدت کوتاهی از برنامهتان استفاده کنند و سپس با آگهیای که با بافتار مطابقت ندارد غافلگیر شوند. باید از این کار اجتناب شود زیرا تجربه کاربری بدی است.
روش ترجیحی برای استفاده از آگهی در صفحه باز شدن برنامه در راهاندازی سرد، استفاده از صفحه بارگیری برای بار کردن داراییهای بازی یا برنامه و نمایش آگهی فقط از صفحه بارگیری است. اگر بار کردن برنامهتان تکمیل شده است و کاربر را به محتوای اصلی برنامهتان فرستاده است، آگهی را نشان ندهید.
روالهای مطلوب
Google آگهیهای باز شدن برنامه را برای کمک به شما در درآمدزایی از صفحه بارگیری برنامهتان ساخته است، اما مهم است که روالهای مطلوب را در ذهن داشته باشید تا کاربران از استفاده از برنامهتان لذت ببرند. حتماً:
- برای نمایش اولین آگهی در صفحه باز شدن برنامه، صبر کنید تا کاربرانتان چند بار از برنامهتان استفاده کنند.
- آگهیهای در صفحه باز شدن برنامه را در زمانهایی نشان دهید که کاربران درحال انتظار برای بار شدن برنامهتان هستند.
- اگر صفحه بارگیریای زیر آگهی در صفحه باز شدن برنامه دارید و صفحه بارگیریتان
پیشاز بسته شدن آگهی بارگیری را تکمیل میکند، شاید بخواهید صفحه بارگیریتان را
در روش
adDidDismissFullScreenContentببندید.
نمونه کامل در GitHub
مراحل بعدی
درباره حریم خصوصی کاربر بیشتر بدانید.