Ios 如何在应用程序关闭后保留并删除应用程序购买中的广告
我已通过应用内购买成功从应用中删除广告 问题是如果我关闭应用程序并重新打开。广告又开始了 我有两个主要场景。游戏场景和游戏场景。应用内购买发生在游戏场景中 GameOverScene.m:Ios 如何在应用程序关闭后保留并删除应用程序购买中的广告,ios,objective-c,ads,heyzap,Ios,Objective C,Ads,Heyzap,我已通过应用内购买成功从应用中删除广告 问题是如果我关闭应用程序并重新打开。广告又开始了 我有两个主要场景。游戏场景和游戏场景。应用内购买发生在游戏场景中 GameOverScene.m: - (void)OnRemoveADS { [self showPurchaseAlert: IAP_Q_RemoveADS :0]; g_bRemoveADS = [[NSUserDefaults standardUserDefaults] boolForKey: @"REMOVEADS
- (void)OnRemoveADS {
[self showPurchaseAlert: IAP_Q_RemoveADS :0];
g_bRemoveADS = [[NSUserDefaults standardUserDefaults] boolForKey: @"REMOVEADS"];
// For HZInterstitialAd, HZVideoAd, and HZIncentivizedAd, just check the BOOL to see if an ad should be shown
if (!g_bRemoveADS) {
[HZInterstitialAd show];
[self removeBannerAds];
[self disableAds];
NSLog(@"Disable ads is called");
}
}
- (void)removeBannerAds {
HZBannerAdOptions *options = [[HZBannerAdOptions alloc] init];
[HZBannerAd placeBannerInView:self.view
position:HZBannerPositionBottom
options:options
success:^(HZBannerAd *banner) {
if (g_bRemoveADS) { // case (2)
// Just discard the banner
[banner setHidden: YES];
[banner removeFromSuperview];
banner = nil;
//_currentBannerAd = banner;
NSLog(@"Banner ad removed!GameOverScene");
} else {
// Keep a reference to the current banner ad, so we can remove it from screen later if we want to disable ads.
_currentBannerAd = banner;
}
NSLog(@"Ad Shown! GameOverScene");
}
failure:^(NSError *error) {
NSLog(@"Error = %@",error);
}];
}
- (void)disableAds {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"REMOVEADS"];
[_currentBannerAd removeFromSuperview]; // case (3)
}
GameSecene.m:
-(id) init {
if (self = [super init]) {
if (!g_bRemoveADS) {
g_bRemoveADS=FALSE;
[[NSUserDefaults standardUserDefaults] setBool:g_bRemoveADS forKey:@"REMOVEADS"];
[[NSUserDefaults standardUserDefaults] synchronize];
} else {
g_bRemoveADS=TRUE;
[[NSUserDefaults standardUserDefaults] setBool:g_bRemoveADS forKey:@"REMOVEADS"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
}
我试图解决这个问题的方法是使用AppDelegate.m中GameOverScene.m中的相同代码,这样当应用程序启动时,它将删除广告
AppDelegate.m:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
g_bRemoveADS = [[NSUserDefaults standardUserDefaults] boolForKey: @"REMOVEADS"];
if (!g_bRemoveADS) {
[HZInterstitialAd show];
[self disableAds];
NSLog(@"Disable ads is called");
}
}
更改disableAds方法中的值后,您必须同步NSUserDefaults:
[[NSUserDefaults standardUserDefaults]synchronize];
从我的角度来看,你有一个否定到很多
if(!g_bRemoveADS){
应在GameOverScene.m中替换为if(g_bRemoveADS){
if (g_bRemoveADS) {
[HZInterstitialAd show];
[self removeBannerAds];
[self disableAds];
NSLog(@"Disable ads is called");
}
g_bRemoveADS
在设置相应的用户默认值时计算为TRUE
。设置后,您调用removeBannerAds等,这似乎是停用操作。初始化中的if-else是不必要的。看起来您有两种不同类型的广告。您是否在iap完成后更新了NSUserDefaultd?是的,你说得对。我把它注释掉了。我想当应用程序再次启动时,应用程序代理中需要发生一些事情?我做了一个[[NSUserDefaults standardUserDefaults]同步]
就像下面的答案一样,但这并没有阻止广告的出现。即使是在应用程序内购买之后。当我对该行发表评论并进行测试时,广告停止了。然而,问题仍然是,当我再次启动应用程序时,它不记得广告已被删除。这两个链接可能会有所帮助:,你需要检查是否(!g_bRemoveADS)
无论你在哪里创建广告,只要不创建它们。你在哪里创建广告?你的广告代理方法在哪里?你在他们的代理方法中重新创建广告吗?我这样做了,但广告在那之后不会停止。当我删除[[NSUserDefaults standardUserDefaults]同步]
然后广告会再次停止。然而,最初的问题仍然存在。当我重新启动应用程序时,它不记得在应用程序中购买。不幸的是,我已经尝试过了。当我确定if声明为阳性时,广告根本不起作用。不过,我在你的回答中看到了你的推理。为什么它与if(!g_bRemoveADS)一起工作
?我不知道。你的代码中有一点让人困惑,那就是你禁用了广告,但使用了[hzinterstialad show]
method-为什么会这样?是的,我知道这很让人困惑。我从Heyzap工程师那里得到了代码片段,这就是我使用它的原因。你是对的,它毫无意义。我应该问问他。问题是,如果我删除了这个方法,广告就不会停止。当你问我时,你的代码就是“清理”你的场景显示了一个插页广告。意思是:它删除了横幅广告,所以它们不会干扰你的插页广告。但我认为这完全超出了你想要的用例。当用户默认设置中的相应标志被设置时,你想禁用所有广告(插页+横幅),对吗?