• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 关闭 Google Mobile Ads Splash Interstitial 后呈现 View Controller 时崩溃

[复制链接]
菜鸟教程小白 发表于 2022-12-12 09:59:04 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

如果我们在关闭 Google 移动广告后尝试呈现 View ,iOS 应用会崩溃 Splash Interstitial .

模拟器版本:iOS 7.1(4寸64位) 谷歌移动广告 SDK 版本:6.9.2

展示初始广告的代码(application:didFinishLaunchingWithOptions :

InitialSlidingViewController *controller = [[InitialSlidingViewController alloc] init];
[self.window setRootViewController:controller];

splashInterstitial_ = [[DFPInterstitial alloc] init];
splashInterstitial_.adUnitID = SplashInterstitialID;
GADRequest *request = [GADRequest request];
splashInterstitial_.delegate = self;
request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil];
[splashInterstitial_ loadAndDisplayRequest:request
                               usingWindow:window_
                              initialImage:[UIImage imageNamed:imageName]];

[self.window setBackgroundColor:[UIColor blackColor]];
[self.window makeKeyAndVisible];

使用的委托(delegate)方法

    - (void)interstitialDFPInterstitial *)interstitial didFailToReceiveAdWithErrorGADRequestError *)error {
    //present a view
}
- (void)interstitialDidDismissScreenGADInterstitial *)ad {
    ad.delegate = nil;
    splashInterstitial_.delegate = nil;
    ad = nil;
    splashInterstitial_ = nil;

    //Present a view controller
}

用于呈现 View 的代码

NewViewController *newVC = [[NewViewController alloc] initWithNibName"NewViewController" bundle:nil];
    UINavigationController *nav = [[PortraitNavController alloc] initWithRootViewController:newVC];
    nav.navigationBarHidden = YES;
    [self.navigationController presentViewController:nav animated:YES completion:nil];

//来自控制台的崩溃日志:

* -[GADWebAppViewController isKindOfClass:]: message sent to deallocated instance 0x573efe90



Best Answer-推荐答案


通过将用于呈现插页式广告的代码移至 Rootviewcontroller 解决了这个问题。 Google Ads Developer official blog 中推荐此解决方案.

//MyRootViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];

    // Remember whether the status bar was hidden or not.
    hideStatusBar_ = [UIApplication sharedApplication].statusBarHidden;

    splashInterstitial_ = [[DFPInterstitial alloc] init];
    splashInterstitial_.adUnitID = SplashInterstitialID;
    splashInterstitial_.delegate = self;

    GADRequest *request = [GADRequest request];
    request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil];
    [splashInterstitial_ loadRequest:request];
}

#pragma mark - splashInterstitial delegate methods

- (void)restoreController {
    if (imageView_ != nil) {
        [imageView_ removeFromSuperview];
    }
    [UIApplication sharedApplication].statusBarHidden = hideStatusBar_;
}

- (void)interstitialDidReceiveAdGADInterstitial *)ad {

    [splashInterstitial_ presentFromRootViewController:self];
}

- (void)interstitialDFPInterstitial *)interstitial didFailToReceiveAdWithErrorGADRequestError *)error {

    [self restoreController];
}

- (void)interstitialWillDismissScreenGADInterstitial *)ad {
    [self restoreController];
}

- (void)interstitialDidDismissScreenGADInterstitial *)ad {
    //Dismiss Delegate
}

imageView_ 是一个全屏 ImageView ,包含相同的初始屏幕图像。

关于ios - 关闭 Google Mobile Ads Splash Interstitial 后呈现 View Controller 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23802031/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap