این راهنما برای ناشران در نظر گرفته شده است که تبلیغات باز برنامه را ادغام می کنند.
تبلیغات باز برنامه یک قالب تبلیغاتی ویژه است که برای ناشرانی که مایل به کسب درآمد از صفحه بارگذاری برنامه خود هستند در نظر گرفته شده است. تبلیغات باز برنامه می تواند توسط کاربران شما در هر زمانی بسته شود. هنگامی که کاربران برنامه شما را در پیش زمینه می آورند، می توان تبلیغات باز برنامه را نشان داد.
آگهیهای باز برنامه بهطور خودکار یک منطقه نام تجاری کوچک را نشان میدهد تا کاربران بدانند که در برنامه شما هستند. در اینجا نمونه ای از ظاهر یک تبلیغ باز برنامه آمده است:
در سطح بالا، در اینجا مراحل لازم برای اجرای تبلیغات باز برنامه وجود دارد:
- یک کلاس مدیر ایجاد کنید که یک تبلیغ را قبل از اینکه نیاز به نمایش آن داشته باشید بارگیری می کند.
- نمایش افزوده در طول رویدادهای پیش زمینه برنامه.
- رسیدگی به تماس های ارائه.
پیش نیازها
- دستورالعمل های راه اندازی را در راهنمای شروع ما دنبال کنید.
- بدانید که چگونه دستگاه خود را به عنوان یک دستگاه آزمایشی پیکربندی کنید.
همیشه با تبلیغات آزمایشی تست کنید
هنگام ساخت و آزمایش برنامه های خود، مطمئن شوید که از تبلیغات آزمایشی به جای تبلیغات زنده و تولیدی استفاده می کنید. عدم انجام این کار می تواند منجر به تعلیق حساب شما شود.
ساده ترین راه برای بارگیری تبلیغات آزمایشی استفاده از شناسه واحد آگهی آزمایشی اختصاصی ما برای تبلیغات باز برنامه است:
ca-app-pub-3940256099942544/5575463023
این بهطور ویژه پیکربندی شده است تا تبلیغات آزمایشی را برای هر درخواست بازگرداند، و شما میتوانید هنگام کدنویسی، آزمایش و اشکالزدایی از آن در برنامههای خود استفاده کنید. فقط مطمئن شوید که قبل از انتشار برنامه خود، آن را با شناسه واحد تبلیغاتی خود جایگزین کنید.
برای کسب اطلاعات بیشتر در مورد نحوه عملکرد تبلیغات آزمایشی SDK Ads Mobile، به Test Ads مراجعه کنید.
یک کلاس مدیر اجرا کنید
تبلیغ شما باید به سرعت نمایش داده شود، بنابراین بهتر است قبل از نیاز به نمایش آگهی خود، آن را بارگیری کنید. به این ترتیب، به محض ورود کاربر به اپلیکیشن شما، یک تبلیغ آماده خواهید داشت. یک کلاس مدیر را برای درخواست تبلیغات قبل از زمانی که نیاز به نمایش آگهی دارید، پیاده کنید.
یک کلاس singleton جدید به نام AppOpenAdManager
ایجاد کنید:
سویفت
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/admob/answer/9341964
let timeoutInterval: TimeInterval = 4 * 3_600
static let shared = AppOpenAdManager()
هدف-C
@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/admob/answer/9341964
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
خود را پیاده سازی کنید:
سویفت
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)
}
هدف-C
@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
یک تبلیغ را بارگیری کنید
مرحله بعدی بارگیری یک تبلیغ باز برنامه است:
سویفت
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: "ca-app-pub-3940256099942544/5575463023", request: Request())
appOpenAd?.fullScreenContentDelegate = self
loadTime = Date()
} catch {
print("App open ad failed to load with error: \(error.localizedDescription)")
appOpenAd = nil
loadTime = nil
}
isLoadingAd = false
}
هدف-C
- (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:@"ca-app-pub-3940256099942544/5575463023"
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];
}];
}
نمایش یک آگهی
مرحله بعدی نمایش یک تبلیغ باز برنامه است. اگر هیچ تبلیغی در دسترس نیست، سعی کنید یک آگهی جدید بارگذاری کنید.
سویفت
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 {
appOpenAd.present(from: nil)
isShowingAd = true
}
}
هدف-C
- (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()
تماس بگیرید تا در صورت موجود بودن یک تبلیغ، یا بارگذاری آگهی جدید، تبلیغی را نشان دهد.
سویفت
func applicationDidBecomeActive(_ application: UIApplication) {
// Show the app open ad when the app is foregrounded.
AppOpenAdManager.shared.showAdIfAvailable()
}
هدف-C
- (void) applicationDidBecomeActive:(UIApplication *)application {
// Show the app open ad when the app is foregrounded.
[AppOpenAdManager.sharedInstance showAdIfAvailable];
}
رسیدگی به تماس های ارائه
برای دریافت اعلانهای رویدادهای ارائه، باید GADFullScreenContentDelegate
به ویژگی fullScreenContentDelegate آگهی برگشتی اختصاص دهید:
سویفت
appOpenAd?.fullScreenContentDelegate = self
هدف-C
self.appOpenAd.fullScreenContentDelegate = self;
بهویژه، میخواهید پس از پایان ارائه آگهی، آگهی باز بعدی برنامه را درخواست کنید. کد زیر نحوه پیاده سازی پروتکل را در فایل AppOpenAdManager
خود نشان می دهد:
سویفت
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()
}
}
هدف-C
- (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
را برمی گرداند. قبل از اینکه بخواهید تبلیغ را نشان دهید، مطمئن شوید که اعتبار مرجع تبلیغ خود را بررسی کرده اید.
سویفت
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)
}
هدف-C
- (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 _appOpenAd && [self wasLoadTimeLessThanNHoursAgo:kTimeoutInterval];
}
صفحه نمایش های شروع و بارگذاری سرد
مستندات فرض میکنند که شما فقط زمانی تبلیغات باز برنامه را نشان میدهید که کاربران برنامه شما را زمانی که در حافظه به حالت تعلیق در میآیند در جلوی زمین قرار میدهند. "شروع سرد" زمانی رخ می دهد که برنامه شما راه اندازی می شود اما قبلاً در حافظه تعلیق نشده بود.
یک مثال از شروع سرد زمانی است که کاربر برای اولین بار برنامه شما را باز می کند. با شروع سرد، آگهی باز برنامه بارگیری شده قبلی که فوراً آماده نمایش باشد، نخواهید داشت. تأخیر بین درخواست تبلیغ و دریافت مجدد آگهی میتواند موقعیتی را ایجاد کند که کاربران بتوانند قبل از غافلگیری از یک آگهی خارج از زمینه، به طور خلاصه از برنامه شما استفاده کنند. این باید اجتناب شود زیرا تجربه کاربری بدی است.
روش ترجیحی برای استفاده از تبلیغات باز برنامه در شروع سرد این است که از صفحه بارگیری برای بارگیری دارایی های بازی یا برنامه خود استفاده کنید و فقط تبلیغ را از صفحه بارگیری نشان دهید. اگر برنامه شما بارگیری کامل شده است و کاربر را به محتوای اصلی برنامه شما فرستاده است، تبلیغ را نشان ندهید.
بهترین شیوه ها
Google برای کمک به کسب درآمد از صفحه بارگیری برنامه، تبلیغات باز برنامه ایجاد کرده است، اما مهم است که بهترین شیوه ها را در نظر داشته باشید تا کاربران از استفاده از برنامه شما لذت ببرند. مطمئن شوید که:
- منتظر بمانید تا اولین تبلیغ باز شده برنامه شما نمایش داده شود تا زمانی که کاربران چند بار از برنامه شما استفاده کنند.
- تبلیغات باز برنامه را در مواقعی نشان دهید که کاربران شما در غیر این صورت منتظر بارگیری برنامه شما هستند.
- اگر صفحه بارگیری زیر آگهی باز برنامه دارید و صفحه بارگیری شما قبل از رد شدن آگهی بارگیری کامل می شود، ممکن است بخواهید صفحه بارگیری خود را به روش
adDidDismissFullScreenContent
رد کنید.
مثال کامل در GitHub
مراحل بعدی
درباره حریم خصوصی کاربر بیشتر بیاموزید.