অ্যাপ খুলুন বিজ্ঞাপন

এই নির্দেশিকাটি প্রকাশকদের জন্য তৈরি করা হয়েছে যারা অ্যাপ খোলা বিজ্ঞাপনগুলিকে একীভূত করে।

অ্যাপ খোলা বিজ্ঞাপন হল একটি বিশেষ বিজ্ঞাপন বিন্যাস যা প্রকাশকদের জন্য তাদের অ্যাপ লোড স্ক্রীন নগদীকরণ করতে ইচ্ছুক। অ্যাপ খোলা বিজ্ঞাপন যে কোনো সময় আপনার ব্যবহারকারীদের দ্বারা বন্ধ করা যেতে পারে. যখন ব্যবহারকারীরা আপনার অ্যাপটিকে অগ্রভাগে নিয়ে আসে তখন অ্যাপ খোলা বিজ্ঞাপন দেখানো হতে পারে।

অ্যাপ খোলা বিজ্ঞাপনগুলি স্বয়ংক্রিয়ভাবে একটি ছোট ব্র্যান্ডিং এলাকা দেখায় যাতে ব্যবহারকারীরা জানতে পারে যে তারা আপনার অ্যাপে রয়েছে। একটি অ্যাপ খোলা বিজ্ঞাপন দেখতে কেমন তার একটি উদাহরণ এখানে দেওয়া হল:

উচ্চ স্তরে, অ্যাপ খোলা বিজ্ঞাপনগুলি বাস্তবায়নের জন্য প্রয়োজনীয় পদক্ষেপগুলি এখানে দেওয়া হল:

  1. একটি ম্যানেজার ক্লাস তৈরি করুন যেটি আপনাকে এটি প্রদর্শন করার আগে একটি বিজ্ঞাপন লোড করে।
  2. অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টের সময় যোগ দেখান।
  3. উপস্থাপনা কলব্যাকগুলি পরিচালনা করুন।

পূর্বশর্ত

সর্বদা পরীক্ষার বিজ্ঞাপন দিয়ে পরীক্ষা করুন

আপনার অ্যাপ তৈরি এবং পরীক্ষা করার সময়, নিশ্চিত করুন যে আপনি লাইভ, প্রোডাকশন বিজ্ঞাপনের পরিবর্তে পরীক্ষামূলক বিজ্ঞাপন ব্যবহার করছেন। এটি করতে ব্যর্থ হলে আপনার অ্যাকাউন্ট স্থগিত হতে পারে।

পরীক্ষার বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল অ্যাপ খোলা বিজ্ঞাপনের জন্য আমাদের ডেডিকেটেড টেস্ট বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:

/21775744923/example/app-open

প্রতিটি অনুরোধের জন্য পরীক্ষার বিজ্ঞাপনগুলি ফেরত দেওয়ার জন্য এটি বিশেষভাবে কনফিগার করা হয়েছে এবং কোডিং, পরীক্ষা এবং ডিবাগ করার সময় আপনি এটিকে আপনার নিজস্ব অ্যাপে ব্যবহার করতে পারবেন৷ আপনার অ্যাপ প্রকাশ করার আগে শুধু নিশ্চিত করুন যে আপনি এটিকে আপনার নিজের বিজ্ঞাপন ইউনিট আইডি দিয়ে প্রতিস্থাপন করেছেন।

মোবাইল বিজ্ঞাপন SDK-এর পরীক্ষার বিজ্ঞাপনগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, পরীক্ষা বিজ্ঞাপনগুলি দেখুন।

একটি ম্যানেজার ক্লাস বাস্তবায়ন করুন

আপনার বিজ্ঞাপনটি দ্রুত দেখানো উচিত, তাই আপনার বিজ্ঞাপনটি প্রদর্শন করার আগে লোড করা ভাল। এইভাবে, ব্যবহারকারী আপনার অ্যাপে প্রবেশ করার সাথে সাথে আপনার কাছে একটি বিজ্ঞাপন তৈরি হবে। আপনার বিজ্ঞাপন দেখানোর আগে বিজ্ঞাপনের অনুরোধ করার জন্য একটি ম্যানেজার ক্লাস প্রয়োগ করুন।

AppOpenAdManager নামে একটি নতুন সিঙ্গেলটন ক্লাস তৈরি করুন এবং এটি নিম্নরূপ পূরণ করুন:

সুইফট

class AppOpenAdManager: NSObject {
  var appOpenAd: GADAppOpenAd?
  var isLoadingAd = false.
  var isShowingAd = false

  static let shared = AppOpenAdManager()

  private func loadAd() async {
    // TODO: Implement loading an ad.
  }

  func showAdIfAvailable() {
    // TODO: Implement showing an ad.
  }

  private func isAdAvailable() -> Bool {
    // Check if ad exists and can be shown.
    return appOpenAd != nil
  }
}

উদ্দেশ্য-C

@interface AppOpenAdManager ()
@property(nonatomic, strong) GADAppOpenAd *appOpenAd;
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;

@end

@implementation AppOpenAdManager

+ (nonnull AppOpenAdManager *)sharedInstance {
  static AppOpenAdManager *instance = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    instance = [[AppOpenAdManager alloc] init];
  });
  return instance;
}

- (void)loadAd {
  // TODO: Implement loading an ad.
}

// Add this method to the .h file.
- (void)showAdIfAvailable {
  // TODO: Implement showing an ad.
}

- (BOOL)isAdAvailable {
  // Check if ad exists and can be shown.
  return self.appOpenAd != nil;
}

@end

একটি বিজ্ঞাপন লোড করুন

পরবর্তী ধাপ হল loadAd() পদ্ধতিটি পূরণ করা।

সুইফট

private 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 GADAppOpenAd.load(
      withAdUnitID: "/21775744923/example/app-open", request: GAMRequest())
  } catch {
    print("App open ad failed to load with error: \(error.localizedDescription)")
  }
  isLoadingAd = false
}

উদ্দেশ্য-C

- (void)loadAd {
  // Do not load ad if there is an unused ad or one is already loading.
  if (self.isLoadingAd || [self isAdAvailable]) {
    return;
  }
  self.isLoadingAd = YES;

  [GADAppOpenAd loadWithAdUnitID:@"/21775744923/example/app-open"
                       request:[GAMRequest request]
             completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
               self.isLoadingAd = NO;
               if (error) {
                 NSLog(@"Failed to load app open ad: %@", error);
                 return;
               }
               self.appOpenAd = appOpenAd;
             }];
}

একটি বিজ্ঞাপন দেখান

পরবর্তী ধাপ হল showAdIfAvailable() পদ্ধতিটি পূরণ করা। কোনো বিজ্ঞাপন উপলব্ধ না হলে, পদ্ধতিটি একটি বিজ্ঞাপন লোড করার চেষ্টা করে।

সুইফট

func showAdIfAvailable() {
  // If the app open ad is already showing, do not show the ad again.
  guard !isShowingAd else { return }

  // If the app open ad is not available yet but is supposed to show, load
  // a new ad.
  if !isAdAvailable() {
    Task {
      await loadAd()
    }
    return
  }

  if let ad = appOpenAd {
    isShowingAd = true
    ad.present(fromRootViewController: nil)
  }
}

উদ্দেশ্য-C

- (void)showAdIfAvailable {
  // If the app open ad is already showing, do not show the ad again.
  if (self.isShowingAd) {
    return;
  }

  // If the app open ad is not available yet but is supposed to show, load a
  // new ad.
  if (![self isAdAvailable]) {
    [self loadAd];
    return;
  }

  self.isShowingAd = YES;
  [self.appOpenAd presentFromRootViewController:nil];
}

অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টের সময় বিজ্ঞাপনটি দেখান

অ্যাপ্লিকেশানটি সক্রিয় হয়ে গেলে, একটি উপলব্ধ থাকলে একটি বিজ্ঞাপন দেখানোর জন্য showAdIfAvailable() এ কল করুন বা একটি নতুন লোড করুন৷

সুইফট

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
  // ...

  func applicationDidBecomeActive(_ application: UIApplication) {
    // Show the app open ad when the app is foregrounded.
    AppOpenAdManager.shared.showAdIfAvailable()
  }
}

উদ্দেশ্য-C

@implementation AppDelegate
// ...

- (void) applicationDidBecomeActive:(UIApplication *)application {
  // Show the app open ad when the app is foregrounded.
  [AppOpenAdManager.sharedInstance showAdIfAvailable];
}

@end

উপস্থাপনা কলব্যাকগুলি পরিচালনা করুন

যখন আপনার অ্যাপ একটি অ্যাপ খোলা বিজ্ঞাপন প্রদর্শন করে, তখন নির্দিষ্ট উপস্থাপনা ইভেন্টগুলি পরিচালনা করার জন্য আপনাকে GADFullScreenContentDelegate উপর নির্ভর করতে হবে। বিশেষ করে, প্রথমটি উপস্থাপনা শেষ হলে আপনি পরবর্তী অ্যাপ খোলা বিজ্ঞাপনের জন্য অনুরোধ করতে চাইবেন।

আপনার AppOpenAdManager ক্লাসে, নিম্নলিখিত যোগ করুন:

সুইফট

class AppOpenAdManager: NSObject, GADFullScreenContentDelegate {
  // ...

  private 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 GADAppOpenAd.load(
        withAdUnitID: "/21775744923/example/app-open", request: GAMRequest())
      appOpenAd?.fullScreenContentDelegate = self
    } catch {
      print("App open ad failed to load with error: \(error.localizedDescription)")
    }
    isLoadingAd = false
  }

  // ...

  // MARK: - GADFullScreenContentDelegate methods

  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("App open ad will be presented.")
  }

  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    appOpenAd = nil
    isShowingAd = false
    // Reload an ad.
    Task {
      await loadAd()
    }
  }

  func ad(
    _ ad: GADFullScreenPresentingAd,
    didFailToPresentFullScreenContentWithError error: Error
  ) {
    appOpenAd = nil
    isShowingAd = false
    // Reload an ad.
    Task {
      await loadAd()
    }
  }
}

উদ্দেশ্য-C

@interface AppOpenAdManager () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADAppOpenAd *appOpenAd
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;

@end

@implementation AppOpenAdManager

// ...

- (void)loadAd {
  // Do not load ad if there is an unused ad or one is already loading.
  if (self.isLoadingAd || [self isAdAvailable]) {
    return;
  }
  self.isLoadingAd = YES;

  [GADAppOpenAd loadWithAdUnitID:@"/21775744923/example/app-open"
                       request:[GAMRequest request]
             completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
              self.isLoadingAd = NO;
               if (error) {
                 NSLog(@"Failed to load app open ad: %@", error);
                 return;
               }
               self.appOpenAd = appOpenAd;
               self.appOpenAd.fullScreenContentDelegate = self;
             }];
}

- (BOOL)isAdAvailable {
  // Check if ad exists and can be shown.
  return self.appOpenAd != nil;
}

// ...

#pragma mark - GADFullScreenContentDelegate methods

- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"App open ad is will be presented.");
}

- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  self.appOpenAd = nil;
  self.isShowingAd = NO;
  // Reload an ad.
  [self loadAd];
}

- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
  self.appOpenAd = nil;
  self.isShowingAd = NO;
  // Reload an ad.
  [self loadAd];
}

@end

বিজ্ঞাপনের মেয়াদ শেষ হওয়ার কথা বিবেচনা করুন

আপনি একটি মেয়াদোত্তীর্ণ বিজ্ঞাপন দেখাবেন না তা নিশ্চিত করতে, আপনি অ্যাপ প্রতিনিধিতে একটি পদ্ধতি যোগ করতে পারেন যা আপনার বিজ্ঞাপনের রেফারেন্স লোড হওয়ার পর থেকে অতিবাহিত সময় পরীক্ষা করে।

আপনার AppOpenAdManagerloadTime নামে একটি Date প্রপার্টি যোগ করুন এবং আপনার বিজ্ঞাপন লোড হলে প্রপার্টি সেট করুন। তারপরে আপনি একটি পদ্ধতি যোগ করতে পারেন যা আপনার বিজ্ঞাপন লোড হওয়ার পর থেকে নির্দিষ্ট সংখ্যক ঘন্টারও কম সময় অতিবাহিত হলে true দেখায়। আপনি বিজ্ঞাপন দেখানোর চেষ্টা করার আগে আপনার বিজ্ঞাপন রেফারেন্সের বৈধতা পরীক্ষা করে দেখুন।

সুইফট

class AppOpenAdManager: NSObject, GADFullScreenContentDelegate {
  var appOpenAd: GADAppOpenAd?
  var isLoadingAd = false.
  var isShowingAd = false
  var loadTime: Date?
  let fourHoursInSeconds = TimeInterval(3600 * 4)

  // ...

  private 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 GADAppOpenAd.load(
        withAdUnitID: "/21775744923/example/app-open", request: GAMRequest())
      appOpenAd?.fullScreenContentDelegate = self
      loadTime = Date()
    } catch {
      print("App open ad failed to load with error: \(error.localizedDescription)")
    }
    isLoadingAd = false
  }

  private func wasLoadTimeLessThanFourHoursAgo() -> Bool {
    guard let loadTime = loadTime else { return false }
    // Check if ad was loaded more than four hours ago.
    return Date().timeIntervalSince(loadTime) < fourHoursInSeconds
  }

  private func isAdAvailable() -> Bool {
    // Check if ad exists and can be shown.
    return appOpenAd != nil && wasLoadTimeLessThanFourHoursAgo()
  }
}

উদ্দেশ্য-C

static NSTimeInterval const fourHoursInSeconds = 3600 * 4;

@interface AppOpenAdManager () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADAppOpenAd *appOpenAd
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;
@property(weak, nonatomic) NSDate *loadTime;

@end

@implementation AppOpenAdManager

// ...

- (void)loadAd {
  // Do not load ad if there is an unused ad or one is already loading.
  if (self.isLoadingAd || [self isAdAvailable]) {
    return;
  }
  self.isLoadingAd = YES;

  [GADAppOpenAd loadWithAdUnitID:@"/21775744923/example/app-open"
                       request:[GAMRequest request]
             completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
              self.isLoadingAd = NO;
               if (error) {
                 NSLog(@"Failed to load app open ad: %@", error);
                 return;
               }
               self.appOpenAd = appOpenAd;
               self.appOpenAd.fullScreenContentDelegate = self;
               self.loadTime = [NSDate date];
             }];
}

- (BOOL)wasLoadTimeLessThanFourHoursAgo {
  // Check if ad was loaded more than four hours ago.
  return [[NSDate Date] timeIntervalSinceDate:self.loadTime] < fourHoursInSeconds;
}

- (BOOL)isAdAvailable {
  // Check if ad exists and can be shown.
  return self.appOpenAd != nil && [self wasLoadTimeLessThanFourHoursAgo];
}

@end

ঠান্ডা শুরু এবং পর্দা লোড হচ্ছে

ডকুমেন্টেশন অনুমান করে যে আপনি শুধুমাত্র অ্যাপ খোলার বিজ্ঞাপনগুলি দেখান যখন ব্যবহারকারীরা আপনার অ্যাপটিকে মেমরিতে সাসপেন্ড করার সময় ফোরগ্রাউন্ড করে। "কোল্ড স্টার্ট" ঘটে যখন আপনার অ্যাপ চালু হয় কিন্তু আগে মেমরিতে সাসপেন্ড করা হয়নি।

একটি কোল্ড স্টার্টের উদাহরণ হল যখন একজন ব্যবহারকারী প্রথমবার আপনার অ্যাপ খোলেন। ঠান্ডা শুরু হলে, আপনার কাছে আগে লোড করা কোনো অ্যাপ খোলা বিজ্ঞাপন থাকবে না যা এখনই দেখানোর জন্য প্রস্তুত। আপনি যখন একটি বিজ্ঞাপনের অনুরোধ করেন এবং একটি বিজ্ঞাপন ফেরত পান তখন এর মধ্যে দেরি এমন একটি পরিস্থিতি তৈরি করতে পারে যেখানে ব্যবহারকারীরা একটি প্রেক্ষাপটের বাইরের বিজ্ঞাপনে অবাক হওয়ার আগে আপনার অ্যাপটি সংক্ষিপ্তভাবে ব্যবহার করতে সক্ষম হয়। এটি এড়ানো উচিত কারণ এটি একটি খারাপ ব্যবহারকারীর অভিজ্ঞতা।

কোল্ড স্টার্টে অ্যাপ খোলা বিজ্ঞাপনগুলি ব্যবহার করার পছন্দের উপায় হল আপনার গেম বা অ্যাপ সম্পদগুলি লোড করার জন্য একটি লোডিং স্ক্রীন ব্যবহার করা এবং শুধুমাত্র লোডিং স্ক্রীন থেকে বিজ্ঞাপন দেখানো। যদি আপনার অ্যাপটি লোডিং সম্পন্ন করে থাকে এবং ব্যবহারকারীকে আপনার অ্যাপের মূল বিষয়বস্তুতে পাঠিয়ে থাকে, তাহলে বিজ্ঞাপনটি দেখাবেন না।

সর্বোত্তম অনুশীলন

Google আপনাকে আপনার অ্যাপের লোডিং স্ক্রীন নগদীকরণ করতে সাহায্য করার জন্য অ্যাপ ওপেন বিজ্ঞাপন তৈরি করেছে, কিন্তু আপনার ব্যবহারকারীরা যাতে আপনার অ্যাপ ব্যবহার করে উপভোগ করতে পারে সেজন্য সর্বোত্তম অনুশীলনগুলি মাথায় রাখা গুরুত্বপূর্ণ। নিশ্চিত করুন:

  • আপনার ব্যবহারকারীরা কয়েকবার আপনার অ্যাপ ব্যবহার না করা পর্যন্ত আপনার প্রথম অ্যাপ খোলা বিজ্ঞাপন দেখানোর জন্য অপেক্ষা করুন।
  • যখন আপনার ব্যবহারকারীরা অন্যথায় আপনার অ্যাপ লোড হওয়ার জন্য অপেক্ষা করবে তখন অ্যাপ খোলার বিজ্ঞাপনগুলি দেখান।
  • আপনার যদি অ্যাপ খোলা বিজ্ঞাপনের অধীনে একটি লোডিং স্ক্রিন থাকে এবং বিজ্ঞাপনটি খারিজ হওয়ার আগে আপনার লোডিং স্ক্রিন লোডিং সম্পূর্ণ করে, তাহলে আপনি adDidDismissFullScreenContent কনটেন্ট পদ্ধতিতে আপনার লোডিং স্ক্রিনটি খারিজ করতে চাইতে পারেন।

GitHub এ সম্পূর্ণ উদাহরণ

সুইফট অবজেক্টিভ-C

পরবর্তী পদক্ষেপ

ব্যবহারকারীর গোপনীয়তা সম্পর্কে আরও জানুন।