目录

激励广告回调中无法弹出Toast弹窗

问题现象

激励广告的回调中无法弹出Toast窗口。关键代码如下:

case AdStatus.VIDEO_PLAY_END:
  hilog.info(0x0000, TAG, 'Status is onVideoPlayEnd');
  this.promptAction.showToast({
    message: 'reward ad end',
    duration: 2000,
    showMode:1
  });
  break;

背景知识

问题定位

  1. 根据日志排查是否成功监听到了广告各状态:
    A00000/com.hua...StatusHandler  com.huawe...ientdemo  I     Status is onVideoPlayBegin
    A00000/com.hua...StatusHandler  com.huawe...ientdemo  I     Status is onVideoPlayEnd

    从以上日志中可以看到成功监听到广告。

  2. 排查Toast弹窗是否符合UX要求。

分析结论

Toast弹窗为宿主创建的非系统子窗口,属于不安全窗口。advertising.showAd创建出来的是模态UIExtension,模态UIExtension不允许被不安全窗口遮挡。API 11之后拉起模态UIExtension时,会隐藏三方应用已创建的不安全窗口和组件,并阻止三方应用创建新的不安全窗口。

修改建议

可以在看完广告后,将广告弹窗移除,在原来的页面中弹出Toast弹窗。