2015-09-27 31 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

相關問題