使用 observables 来限制用户在 Angular 应用程序中看到广告?

Using observables to limit users from seeing ads in Angular app?

我正在尝试将我的会员细分为高级会员,但我的 AdMob 广告不会出现在他们的应用程序中。

目前,我只是在我的 app.component.ts 文件中初始化、配置和展示我的广告,如下所示:

AdMob.showBanner(options);

我试图在我的 auth.service 中设置一个 observable,如果用户是高级会员,我可以订阅它:

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

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

然后我更新了我的 app.component.ts 文件以订阅 premiumMember observable:

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

但是,这似乎不起作用,因为无论可观察值的值如何,广告总是会出现。

是否需要显式设置 AdMob 在 observable 为真时隐藏?对构建这个的最佳实践有什么想法或想法吗?

BehaviorSubject in angular 将发出 initial/last 发出的值。 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();
    }
});