Как сохранить удаление рекламы при покупке приложения после его закрытия

Я успешно удалил рекламу из приложения с помощью покупки в приложении.

Проблема в том, что если я закрою приложение и снова открою. Реклама снова запускается.

У меня есть 2 основные сцены. GameOverScene и GameScene. Покупка в приложении происходит в 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];
        }
    }
}

Я пытаюсь решить эту проблему, используя тот же код из GameOverScene.m в AppDelegate.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");
    }
}

person Paul    schedule 27.09.2015    source источник
comment
Если еще в инициализации не нужно. Похоже, у вас есть два разных типа объявлений. Вы обновили NSUserDefault после завершения iap?   -  person user523234    schedule 27.09.2015
comment
Да, ты прав. Я прокомментировал это. Я полагаю, что что-то должно произойти в делегате приложения, когда приложение снова запустится?   -  person Paul    schedule 27.09.2015
comment
Я сделал [[NSUserDefaults standardUserDefaults]synchronize]; как в ответе ниже, но это не остановило появление рекламы. Даже после покупки в приложении. Когда я закомментировал эту строку и проверил, реклама прекратилась. Однако проблема остается в том, что когда я снова запускаю приложение, оно не помнит, что реклама была удалена.   -  person Paul    schedule 27.09.2015
comment
Эти две ссылки могут помочь: ">Как добавить покупку в приложение для iOS?, Как удалить рекламу с помощью In-App Purchase?   -  person Caleb Kleveter    schedule 29.09.2015
comment
Вам нужно отметить if (!g_bRemoveADS) везде, где вы создаете свои объявления, и просто не создавать их. Где вы создаете свои объявления? Где ваши методы делегирования объявлений? Вы воссоздаете рекламу в своих методах делегата?   -  person Daniel Storm    schedule 06.10.2015


Ответы (2)


С моей точки зрения, у вас одно отрицание на многое.

if (!g_bRemoveADS) { следует заменить на if (g_bRemoveADS) { в GameOverScene.m.

if (g_bRemoveADS) {
    [HZInterstitialAd show];

    [self removeBannerAds];
    [self disableAds];
    NSLog(@"Disable ads is called");
}

g_bRemoveADS оценивается как TRUE, когда установлено соответствующее пользовательское значение по умолчанию. Когда он установлен, вы вызываете материал removeBannerAds и т. Д., Что, по-видимому, является действием деактивации.

person M156    schedule 06.10.2015
comment
К сожалению, я это уже пробовал. Когда я сделал оператор if положительным, реклама вообще не работала. Я вижу ваши рассуждения в вашем ответе, хотя. Почему это работает с if (!g_bRemoveADS)? Я не знаю. - person Paul; 07.10.2015
comment
Одна вещь, которая немного сбивает с толку в вашем коде, заключается в том, что вы отключаете рекламу, НО используете метод [HZInterstitialAd show] - почему это так? - person M156; 07.10.2015
comment
Да, я знаю, что это сбивает с толку. Я получил фрагмент кода от инженера Heyzap, поэтому я его использую. Хотя вы правы, что это не имеет смысла. Я должен спросить его об этом. - person Paul; 08.10.2015
comment
Дело в том, что если я уберу этот метод, то реклама вообще не остановится. - person Paul; 08.10.2015
comment
Когда вы спрашиваете меня, ваш код очищает вашу сцену, чтобы показать промежуточную рекламу. Значение: он удаляет рекламные баннеры, поэтому они не могут мешать вашей межстраничной рекламе. Но я думаю, что это совершенно не соответствует вашему желаемому варианту использования. Вы хотите отключить ВСЮ рекламу (межстраничную + баннер), когда установлен соответствующий флаг в настройках пользователя по умолчанию, верно? - person M156; 08.10.2015
comment
На самом деле код в настоящее время работает только для удаления межстраничных объявлений. Баннеры остались. Кроме того, когда я перезапускаю приложение, межстраничные объявления возвращаются. В любом случае, я уже отказался от этого, так как просто не мог заставить его работать с Heyzap SDK. - person Paul; 08.10.2015

Вы должны синхронизировать свои NSUserDefaults после изменения значения в методе disableAds с помощью:

[[NSUserDefaults standardUserDefaults]synchronize];
person Jad Feitrouni    schedule 27.09.2015
comment
Я сделал это, но тогда реклама не прекращалась после этого. Когда я удалил [[NSUserDefaults standardUserDefaults]synchronize];, реклама снова прекратилась. Однако исходная проблема остается. Когда я запускаю приложение заново, оно не запоминает покупку в приложении. - person Paul; 27.09.2015