使用 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();
}
});
我正在尝试将我的会员细分为高级会员,但我的 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();
}
});