插屏广告

插屏广告是一种全屏广告格式,会在自然停顿处(例如当用户进入游戏下一关卡或完成转化操作时)嵌入到应用内容中。

实体

描述

onAdFailedToShow

如果 onAdFailedToShow() 返回错误,请勿尝试使用相同方法再次加载新广告。

adUnitId

用于:

  • Development mode,用于配合演示广告单元使用。

  • Production mode,用于配合 R-M-XXXXXX-Y 使用(实际 ID 请在 Yandex Advertising Network 界面查询)。R-M-XXXXXX-Y 是您实际广告单元 ID 的模板,将用于接收各种广告创意。

插屏广告创建示例

import React, { useState } from 'react';
import { Alert, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { AdRequestConfiguration, InterstitialAd, InterstitialAdLoader } from 'yandex-mobile-ads';

const INTERSTITIAL_AD_UNIT_ID = 'demo-interstitial-yandex'; // 替换为您的 ID

export default function InterstitialView() {
  const [isLoaded, setIsLoaded] = useState(false);
  const [isLoading, setIsLoading] = useState(false);
  const [interstitialAd, setInterstitialAd] = useState<InterstitialAd | null>(null);

  const loadAd = async () => {
    try {
      setIsLoading(true);

      // 1. 创建加载器
      const loader = await InterstitialAdLoader.create();

      // 2. 创建请求配置
      const adRequestConfiguration = new AdRequestConfiguration({
        adUnitId: INTERSTITIAL_AD_UNIT_ID,
      });

      // 3. 加载广告
      const ad = await loader.loadAd(adRequestConfiguration);

      console.log('Interstitial ad loaded');

      // 4. 配置事件处理程序
      ad.onAdShown = () => {
        console.log('Interstitial ad shown');
      };

      ad.onAdDismissed = () => {
        console.log('Interstitial ad dismissed');
        setIsLoaded(false);
        setInterstitialAd(null);
      };

      ad.onAdClicked = () => {
        console.log('Interstitial ad clicked');
      };

      ad.onAdImpression = (impressionData) => {
        console.log('Interstitial impression:', impressionData);
      };

      ad.onAdFailedToShow = (error) => {
        console.error('Interstitial failed to show:', error);
        Alert.alert('Ad Failed to Show', JSON.stringify(error));
        setIsLoaded(false);
      };

      setInterstitialAd(ad);
      setIsLoaded(true);
      setIsLoading(false);

    } catch (error) {
      console.error('Failed to load interstitial ad:', error);
      Alert.alert('Ad Failed to Load', JSON.stringify(error));
      setIsLoading(false);
      setIsLoaded(false);
    }
  };

  const showAd = () => {
    if (interstitialAd && isLoaded) {
      interstitialAd.show();
    } else {
      Alert.alert('Ad not ready', 'Please load the ad first');
    }
  };

  return (
    <View style={styles.container}>
      <Text style={styles.title}>Interstitial Ad</Text>

      <TouchableOpacity
        style={[styles.button, isLoading && styles.buttonDisabled]}
        onPress={loadAd}
        disabled={isLoading}
      >
        <Text style={styles.buttonText}>
          {isLoading ? 'Loading...' : 'Load Ad'}
        </Text>
      </TouchableOpacity>

      <TouchableOpacity
        style={[styles.button, styles.showButton, !isLoaded && styles.buttonDisabled]}
        onPress={showAd}
        disabled={!isLoaded}
      >
        <Text style={styles.buttonText}>Show Ad</Text>
      </TouchableOpacity>

      <Text style={styles.status}>
        {isLoaded ? '✅ Ad Ready' : '❌ Ad Not Loaded'}
      </Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#f5f5f5',
    padding: 20,
  },
  title: {
    fontSize: 24,
    fontWeight: 'bold',
    marginBottom: 40,
  },
  button: {
    backgroundColor: '#007AFF',
    paddingVertical: 15,
    paddingHorizontal: 40,
    borderRadius: 10,
    marginVertical: 10,
    width: '80%',
    alignItems: 'center',
  },
  showButton: {
    backgroundColor: '#34C759',
  },
  buttonDisabled: {
    backgroundColor: '#ccc',
  },
  buttonText: {
    color: '#fff',
    fontSize: 18,
    fontWeight: '600',
  },
  status: {
    marginTop: 30,
    fontSize: 16,
    color: '#666',
  },
});

检查集成

您可以使用我们的演示项目测试广告格式的效果。