gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:30 27 4
gpt4 key购买 nike

如果我们在关闭 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)interstitial:(DFPInterstitial *)interstitial didFailToReceiveAdWithError:(GADRequestError *)error {
//present a view
}
- (void)interstitialDidDismissScreen:(GADInterstitial *)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

最佳答案

通过将用于呈现插页式广告的代码移动到 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)interstitialDidReceiveAd:(GADInterstitial *)ad {

[splashInterstitial_ presentFromRootViewController:self];
}

- (void)interstitial:(DFPInterstitial *)interstitial didFailToReceiveAdWithError:(GADRequestError *)error {

[self restoreController];
}

- (void)interstitialWillDismissScreen:(GADInterstitial *)ad {
[self restoreController];
}

- (void)interstitialDidDismissScreen:(GADInterstitial *)ad {
//Dismiss Delegate
}

imageView_ 是包含相同启动画面图像的全屏 ImageView 。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com