Использование наблюдаемых объектов для ограничения просмотра пользователями рекламы в приложении Angular?

#angular #admob

Вопрос:

Я пытаюсь сегментировать своих подписчиков, которые считаются премиум-участниками, и не показывать им рекламу AdMob в моем приложении.

В настоящее время я просто инициализирую, настраиваю и показываю свои объявления в своем app.component.ts файле таким образом:

 AdMob.showBanner(options);
 

Я попытался установить в своем окне наблюдаемый auth.service , который позволял мне подписываться на, если пользователь был премиум-участником:

 premiumMember: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);

if (premium) {
    this.premiumMember.next(true);
}
 

Затем я обновил свой app.component.ts файл, чтобы подписаться на premiumMember наблюдаемый:

     this.auth.premiumMember.subscribe((response:boolean) => {
        if (!response) {
            AdMob.showBanner(options);
        }
    });
 

Однако это, похоже, не работает, так как объявления появляются всегда, независимо от ценности наблюдаемого.

Вам нужно явно настроить AdMob на скрытие, если наблюдаемое верно? Есть какие-нибудь мысли или идеи о лучших методах для разработки этого проекта?

Ответ №1:

BehaviorSubject в angular будет излучаться начальное/последнее излучаемое значение. false в вашем случае, из-за того, что ваше начальное указанное значение было ложным.

 premiumMember: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
 

Это означает, что при app.component.ts загрузке ваша подписка this.auth.premiumMember false сначала получает значение. Так AdMob.showBanner() что побегу.
А затем, когда вы .next() получите новое последнее значение.

Я предполагаю, что вы используете этот пакет @capacitor-community/admob ?

Мое предложение состоит в том, чтобы инициализировать и показать баннер, а затем, когда пользователь премиум-класса войдет в систему, использовать AdMob.removeBanner() его для удаления баннера.

Поэтому ваш код должен измениться на этот

 AdMob.showBanner(options);

this.auth.premiumMember.subscribe((premiumMember :boolean) => {
    if (premiumMember) {
        AdMob.removeBanner();
    }
});