2015-09-27 94 views
1

我已成功通过应用内购买从应用中移除广告。如何在应用关闭后保留应用购买中的移除广告

问题是,如果我关闭了应用程序并重新打开。广告再次启动。

我有2个主要场景。 GameOverScene和GameScene。 In App Purchase发生在GameOverScene中。

GameOverScene.m:

- (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) 
} 

GameScene.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中的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"); 
    } 
} 
+0

init中的if else是不必要的。看起来你有两种不同类型的广告。 iap完成后你更新了NSUserDefault吗? – user523234

+0

是的,你说得对。我评论说。当应用程序再次启动时,我想要在App Delegate中发生什么? – Paul

+0

我做了一个'[[NSUserDefaults standardUserDefaults] synchronize];'就像在下面的答案中,但那并没有阻止广告的来临。即使在In App Purchase之后。当我评论这条线并进行测试时,广告停止了。但是,问题仍然是,当我再次启动应用程序时,它不记得广告已被删除。 – Paul

回答

0

你必须改变你的disableAds方法更改值后,与您同步NSUserDefaults的:

[[NSUserDefaults standardUserDefaults]synchronize]; 
+0

我这样做了,但之后广告不会停止。当我删除'[[NSUserDefaults standardUserDefaults]同步];'那么广告将再次停止。但是,最初的问题依然存在。当我启动应用程序时,它不记得In App Purchase。 – Paul

1

从我的角度,你有一个否定得多。

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东西等似乎是停用行动。

+0

不幸的是,我已经尝试过了。当我将if语句写入正面时,广告根本不起作用。虽然我在你的回答中看到你的推理。为什么它与'if(!g_bRemoveADS)'一起使用?我不知道。 – Paul

+0

您的代码中有一点让您感到困惑,那就是您禁用了广告,但是使用了[HZInterstitialAd show]方法 - 为什么? – M156

+0

是的,我知道它很混乱。我从Heyzap工程师那里得到了代码片段,这就是我使用它的原因。你说得对,但它没有意义。我应该问他这件事。 – Paul