The Google Mobile Ads SDK was initialized without AppMeasurement

今天在更新北京限行日历中的Admob时,pod update Google-Mobile-Ads-SDK后,build却报错了,在这里记录一下,方便有遇到同样错误的同学查看。

1、GADBannerViewDelegate方法变更,替换原有的代理方法。- (void)adViewDidReceiveAd:(GADBannerView *)bannerView已变更,需替换一下方法:

/// Tells the delegate that an ad request successfully received an ad. The delegate may want to add
/// the banner view to the view hierarchy if it hasn't been added yet.
- (void)bannerViewDidReceiveAd:(nonnull GADBannerView *)bannerView;

/// Tells the delegate that an ad request failed. The failure is normally due to network
/// connectivity or ad availablility (i.e., no fill).
- (void)bannerView:(nonnull GADBannerView *)bannerView
    didFailToReceiveAdWithError:(nonnull NSError *)error;

/// Tells the delegate that an impression has been recorded for an ad.
- (void)bannerViewDidRecordImpression:(nonnull GADBannerView *)bannerView;

2、原有的kGADErrorInternalError改为GADErrorInternalError,kGADErrorTimeout改为GADErrorTimeout,其它错误code类似。

3、运行闪退,日志如下:

Exception NSException * “The Google Mobile Ads SDK was initialized without AppMeasurement. Google AdMob publishers, follow instructions here: https://googlemobileadssdk.page.link/admob-ios-update-plist to include the AppMeasurement framework and set the -ObjC linker flag. Google Ad Manager publishers, follow instructions here: https://googlemobileadssdk.page.link/ad-manager-ios-update-plist” 0x0000000280f7abe0

在Info.plist中添加GADIsAdManagerApp,值为YES。

参考链接:

Why “GADIsAdManagerApp” is required in the plist file since version 7.42?

https://groups.google.com/g/google-admob-ads-sdk/c/s_rkq9y1zvw?pli=1

4、增加Admob开屏广告

在AppDelegate的applicationDidBecomeActive回调方法中,增加方法调用:[self tryToPresentAd];

- (BOOL)needShowFullAd {
  NSDate *now = [NSDate date];
  NSTimeInterval timeIntervalBetweenNowAndLoadTime = [now timeIntervalSinceDate:self.loadTime];
  double secondsPerHour = 60 * 20;
  double intervalInHours = timeIntervalBetweenNowAndLoadTime / secondsPerHour;
  return intervalInHours < n;
}

- (void)requestAppOpenAd {
  self.appOpenAd = nil;
    
    NSString *unitId = @"ca-app-pub-xxxxxxxxxxxxxxxxxxx";
#ifdef DEBUG
    unitId = @"ca-app-pub-3940256099942544/5662855259";
#endif
  [GADAppOpenAd loadWithAdUnitID:unitId
                         request:[GADRequest request]
                     orientation:UIInterfaceOrientationPortrait
               completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
                 if (error) {
                   NSLog(@"Failed to load app open ad: %@", error);
                   return;
                 }
                 self.appOpenAd = appOpenAd;
                 self.appOpenAd.fullScreenContentDelegate = self;
                 self.loadTime = [NSDate date];
               }];
}

#pragma mark - GADFullScreenContentDelegate

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
  NSLog(@"didFailToPresentFullSCreenCContentWithError");
  [self requestAppOpenAd];

}

/// Tells the delegate that the ad presented full screen content.
- (void)adDidPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"adDidPresentFullScreenContent");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"adDidDismissFullScreenContent");
  [self requestAppOpenAd];
}

- (void)tryToPresentAd {
  GADAppOpenAd *ad = self.appOpenAd;
  self.appOpenAd = nil;
  if (ad &amp;&amp; [self needShowFullAd]) {
      UIViewController *rootController = self.window.rootViewController;
      [ad presentFromRootViewController:rootController];

  } else {
    // If you don't have an ad ready, request one.
      [self requestAppOpenAd];
  }
}

其中needShowFullAd方法用于判断距离上次开屏广告多久了,是否可以显示开屏广告。

具体接入指南可参考Admob文档:https://developers.google.com/admob/ios/app-open-ads?hl=zh-CN

打赏

尊重原创内容,转载请注明出处
本文链接地址: https://www.awnlab.com/archives/690

为您推荐

发表评论

邮箱地址不会被公开。 必填项已用*标注

1条评论