uni-app iOS开屏广告与插屏广告叠加显示问题:若未手动关闭广告,开屏倒计时结束后手动关闭插屏广告,开屏广告不自动关闭,需重启app

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app iOS开屏广告与插屏广告叠加显示问题:若未手动关闭广告,开屏倒计时结束后手动关闭插屏广告,开屏广告不自动关闭,需重启app

操作步骤

iOS开屏广告与插屏广告叠加显示时,如果没有手工去关闭广告,等到开屏倒计时结束,手工关闭了插屏广告,开屏广告不会自动关闭,需要重启app

预期结果

能正常关闭

实际结果

不能正常关闭

bug描述

iOS开屏广告与插屏广告叠加显示时,如果没有手工去关闭广告,等到开屏倒计时结束,手工关闭了插屏广告,开屏广告不会自动关闭,需要重启app

开发环境与项目信息

项⽬目信息 详情
产品分类 uniapp/App
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 15.1.1 (24B91)
HBuilderX类型 正式
HBuilderX版本号 4.44
手机系统 iOS
手机系统版本号 iOS 15
手机厂商 苹果
手机机型 iPhone 7
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

6 回复

你录屏发我一下 我看一下是哪个平台的广告


这个就是倒计时结束后的样子,只能重启app

plus.globalEvent.addEventListener(‘splashclosed’, function() { console.log(‘splashclosed’); })

可以在splash后再去加载插屏 或者使用uni-ad提供的 启动后展示插屏功能

appid私信我一下

在开发uni-app应用时,处理iOS平台上的开屏广告(Splash Ad)与插屏广告(Interstitial Ad)叠加显示的问题,可以通过精确控制广告的生命周期和显示逻辑来解决。以下是一个简化的代码示例,展示如何在广告倒计时结束后自动处理广告关闭逻辑,确保在手动关闭插屏广告后,开屏广告也能正确关闭,避免需要重启应用的情况。

1. 初始化广告

首先,确保你的应用中已经集成了相关的广告SDK,并正确初始化了开屏广告和插屏广告。

// 假设你已经有了广告实例 splashAd 和 interstitialAd
let splashAd = null;
let interstitialAd = null;

// 初始化广告(这里仅为示例,具体初始化代码需根据广告SDK文档)
function initAds() {
    // 初始化开屏广告
    splashAd = createSplashAd(); // 伪代码,实际需根据SDK初始化
    
    // 初始化插屏广告
    interstitialAd = createInterstitialAd(); // 伪代码,实际需根据SDK初始化
    
    // 设置插屏广告关闭监听
    interstitialAd.onClose(() => {
        console.log('插屏广告已关闭');
        // 在这里可以添加逻辑处理开屏广告的状态
    });
}

2. 显示广告并管理生命周期

接下来,管理广告显示和关闭的逻辑,确保在倒计时结束后自动处理。

let splashAdTimer = null;

function showSplashAd() {
    splashAd.show();
    
    // 设置倒计时,假设倒计时为3秒
    splashAdTimer = setTimeout(() => {
        // 检查插屏广告是否显示中
        if (interstitialAd.isShowing()) {
            // 如果插屏广告正在显示,则等待用户关闭后再处理
            interstitialAd.once('close', () => {
                splashAd.close(); // 用户关闭插屏广告后,再关闭开屏广告
            });
        } else {
            splashAd.close(); // 直接关闭开屏广告
        }
    }, 3000);
}

function showInterstitialAd() {
    if (!interstitialAd.isShowing()) {
        interstitialAd.show();
    }
}

3. 调用广告显示函数

在应用的启动逻辑中调用这些函数,确保广告按照预期显示。

onLaunch() {
    initAds();
    showSplashAd();
    
    // 假设在某个时机需要显示插屏广告
    setTimeout(() => {
        showInterstitialAd();
    }, 1000); // 示例:延迟1秒后显示插屏广告
}

注意

  • 上述代码为简化示例,实际开发中需根据具体的广告SDK文档调整API调用。
  • 确保处理广告生命周期时,考虑到用户可能快速交互导致广告状态变化的情况。
  • 对于广告SDK的不同版本,API可能有所变化,请参考最新的SDK文档进行开发。
回到顶部