Nativescript firebase admob在iOS上首次启动后未触发某些事件

问题描述 投票:0回答:1

在我的代码中,我具有以下功能:

const preloadRewardAd = function() {
  console.log('preload reward ad');
  firebase.admob.preloadRewardedVideoAd({
    iosAdPlacementId: 'xxx',
    androidAdPlacementId: 'yyy',
    testing: config.adMobTesting,
    iosTestDeviceIds: config.iosTestDeviceIds
  }).then(
      function() {
        console.log('reward ad ready');
      }
  );
};

const showRewardAd = function(card: Card) {
  console.log('show reward ad');
  return firebase.admob.showRewardedVideoAd({
    onRewarded: (reward)  => {
      console.log('onRewarded called with amount ' + reward.amount);
      console.log('onRewarded called with type ' + reward.type);
      card.fetch().then(() => {
        card.notifyPropertyChange('id', card.id);
      });
    },
    onOpened: () => console.log('onOpened'),
    onClosed: () => {
      preloadRewardAd();
      console.log('onClosed');
    },
    onStarted: () => console.log('onStarted'),
    onCompleted: () => console.log('onCompleted'),
    onLeftApplication: () => console.log('onLeftApplication')
  }).catch(err => {
    console.log(err);
  });
};

export function newCard(args: EventData) {
  console.log('tap new card');
  const pager = <Pager>page.getViewById('cards-carousel');

  const card = <Card>pager.get('items').getItem(pager.selectedIndex);

  showRewardAd(card);
}

然后我在page.loaded中调用preLoadRewardAd()。

[在Android上可以正常使用:当用户关闭广告时,它会预加载下一个广告。

在ios上,它可以在第一个广告显示上正常运行。但是在第二个广告中,永远不会调用onRewarded,即使onClosed被调用,它也不会预加载另一则广告,整个过程都分崩离析。也不会调用onCompleted。

这是控制台的输出顺序:

  1. 页面已加载
  2. 预载奖励广告
  3. 准备好奖励广告
  4. 点击新卡
  5. 显示奖励广告
  6. onOpened
  7. onStarted
  8. onRewarded金额为1的电话
  9. onRewarded呼叫类型为Card
  10. 预载奖励广告
  11. onClosed
  12. 准备好奖励广告
  13. 点击新卡
  14. 显示奖励广告

此时,我等待广告完成。等待几秒钟以确保。我关闭了广告。 10和11可能看起来不正常,但这只是我console.log调用的位置。

  • onOpened永远不会触发。
  • onStarted不会被触发。
  • onRewarded永远不会被解雇。
  • onCompleted永远不会被触发。
  • onClosed永远不会触发。
  • 没有从catch块输出错误。

我缺少什么吗?

nativescript nativescript-plugin
1个回答
0
投票

我发现了一种“足够好”的解决方法。在onClosed事件中,我在250ms之后将对preloadRewardAd的调用包装在setTimeout中。这似乎给了ios足够的时间来追赶。

© www.soinside.com 2019 - 2024. All rights reserved.