> For the complete documentation index, see [llms.txt](https://developers-apps-in-toss.toss.im/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers-apps-in-toss.toss.im/documentation/api-and-sdk-zh/common/monetization/iaa/interstitial-rewarded-ad.md).

# 应用内广告 - 插屏/激励广告

服务介绍和控制台设置方法请参考 [应用内广告介绍文档](https://developers-apps-in-toss.toss.im/guide/monetization/in-app-ad)。

应用内广告 2.0 ver2 **Toss Ads** 和 **Google AdMob** 整合后会根据环境 **自动选择并展示最合适广告的统一广告解决方案**。合作方只需接入一个 SDK，使用哪个网络会由 SDK 根据环境自动选择。这样可以提高广告展示成功率，期待更稳定的收益。

**插屏式（Interstitial）** 和 **激励（Rewarded）** 广告都使用相同的 API(`loadFullScreenAd`, `showFullScreenAd`)，广告类型会根据 **广告组 ID(`adGroupId`)** 自动决定。

### 支持版本

统一广告 API 会根据 Toss App 版本表现不同：

| Toss 应用版本                 | 支持功能           | 说明                 |
| ------------------------- | -------------- | ------------------ |
| **5.247.0 及以上**           | 应用内广告 2.0 ver2 | Toss Ads + AdMob   |
| **5.227.0 \~ 5.247.0 未满** | 应用内广告 2.0      | 仅支持 AdMob          |
| **5.227.0 未满**            | 不支持            | 无法使用应用内广告 2.0 ver2 |

> `isSupported()` 可以通过该方法确认当前环境是否可以使用应用内广告 2.0 ver2。

***

### API 概述

* `loadFullScreenAd(params: LoadFullScreenAdParams): () => void` — 预先加载广告。返回值提供用于取消注册回调的函数（noop 形式）。
* `showFullScreenAd(params: ShowFullScreenAdParams): () => void` — 在屏幕上展示已加载的广告。同样会返回解除函数。

每个 API 都可以通过 `isSupported()` 属性来检查当前环境中是否可使用该功能。

***

### 加载广告

**SDK 函数：** `loadFullScreenAd`

```typescript
function loadFullScreenAd(params: LoadFullScreenAdParams): () => void;
```

预先加载广告。必须在展示广告之前调用。

{% hint style="info" %}
**为了稳定运行，请这样实现**

* 请按页面（或屏幕）单位预先加载广告。
* 广告必须 **`load → show → (下一个 load)`** 按这个顺序调用。
* `loadFullScreenAd` 调用后 **收到事件后** `showFullScreenAd`需要调用。
* 同一 `adGroupId` 以为单位一次只能预先加载一个广告。
* 在使用多个 `adGroupId`时，每个 `adGroupId`都可以分别预先加载一个。
* 在展示广告后，建议预先加载下一个广告的模式（`load → show → load → show`）。
  {% endhint %}

{% hint style="info" %}
**在 iOS 上无法加载吗？**

在 iOS 上广告无法加载时 **App 跟踪模式（App Tracking Transparency）** 请检查设置。在不允许应用跟踪的状态下，部分广告加载可能无法正常工作。
{% endhint %}

**参数**

* **params** · 必需 · `LoadFullScreenAdParams`

  这是预先加载广告时使用的设置对象。可以设置广告组 ID 和广告加载事件/错误回调。

  * **params.options** · 必需 · `LoadFullScreenAdOptions`

    这是加载广告时传递的选项对象。

    * **params.options.adGroupId** · 必需 · `string`

      广告组 ID。需要输入从控制台获取的 ID。
  * **params.onEvent** · `(event: LoadFullScreenAdEvent) => void`

    这是接收广告加载过程中发生事件的回调。可以接收广告加载成功等多种事件。
  * **params.onError** · `(error: unknown) => void`

    在加载广告失败时调用。原因可能是网络错误或不支持的环境等。

**属性**

**`isSupported`**

```typescript
loadFullScreenAd.isSupported(): boolean
```

确认当前环境是否可以使用应用内广告 2.0 ver2 广告。

**示例**

{% tabs %}
{% tab title="tsx\[React]" %}

```tsx
import { loadFullScreenAd } from '@apps-in-toss/web-framework';
import { useState, useEffect } from 'react';

function AdComponent() {
  const [isAdLoaded, setIsAdLoaded] = useState(false);

  useEffect(() => {
    // 检查支持情况
    if (!loadFullScreenAd.isSupported()) {
      console.warn('无法使用广告功能。');
      return;
    }

    // 加载广告
    const unregister = loadFullScreenAd({
      options: {
        adGroupId: 'ait.dev.43daa14da3ae487b',
      },
      onEvent: (event) => {
        if (event.type === 'loaded') {
          console.log('广告加载完成');
          setIsAdLoaded(true);
        }
      },
      onError: (error) => {
        console.error('广告加载失败:', error);
      },
    });

    // 清理
    return () => unregister();
  }, []);

  return (
    <button disabled={!isAdLoaded}>
      {isAdLoaded ? '查看广告' : '广告加载中...'}
    </button>
  );
}
```

{% endtab %}

{% tab title="React Native" %}

```tsx
import { loadFullScreenAd } from '@apps-in-toss/framework';
import { useEffect, useState } from 'react';
import { Alert, Button, View } from 'react-native';

function AdComponent() {
  const [isAdLoaded, setIsAdLoaded] = useState(false);

  useEffect(() => {
    // 检查支持情况
    if (!loadFullScreenAd.isSupported()) {
      Alert.alert('无法使用广告功能。');
      return;
    }

    // 加载广告
    const unregister = loadFullScreenAd({
      options: {
        adGroupId: 'ait.dev.43daa14da3ae487b',
      },
      onEvent: (event) => {
        if (event.type === 'loaded') {
          Alert.alert('广告加载完成');
          setIsAdLoaded(true);
        }
      },
      onError: (error) => {
        Alert.alert('广告加载失败', String(error));
      },
    });

    // 清理
    return () => unregister();
  }, []);

  return (
    <View>
      <Button
        title={isAdLoaded ? '查看广告' : '广告加载中...'}
        disabled={!isAdLoaded}
      />
    </View>
  );
}
```

{% endtab %}
{% endtabs %}

**`LoadFullScreenAdParams`**

```typescript
interface LoadFullScreenAdParams {
  options: LoadFullScreenAdOptions;
  onEvent: (data: LoadFullScreenAdEvent) => void;
  onError: (err: unknown) => void;
}
```

`loadFullScreenAd`是该参数的类型。

**`LoadFullScreenAdOptions`**

```typescript
interface LoadFullScreenAdOptions {
  adGroupId: string;
}
```

广告加载选项。

**`LoadFullScreenAdEvent`**

```typescript
interface LoadFullScreenAdEvent {
  type: 'loaded';
}
```

这是广告加载事件。广告成功加载时会发生 `loaded` 类型事件。

***

### 展示广告

**SDK 函数：** `showFullScreenAd`

```typescript
function showFullScreenAd(params: ShowFullScreenAdParams): () => void;
```

在屏幕上展示已加载的广告。 `loadFullScreenAd`请使用通过 预先加载的广告。

**参数**

* **params.options** · 必需 · `ShowFullScreenAdOptions`

  展示广告时传递的选项。

  * **params.options.adGroupId** · 必需 · `string`

    广告组 ID。必须与 \`loadFullScreenAd\` 中使用的 ID 相同。
* **params.onEvent** · 必需 · `(event: ShowFullScreenAdEvent) => void`

  这是接收广告展示过程中发生事件的回调。可以接收广告曝光、点击、奖励发放等多种事件。
* **params.onError** · 必需 · `(error: unknown) => void`

  在广告展示请求失败时调用的回调。

**属性**

**`isSupported`**

```typescript
showFullScreenAd.isSupported(): boolean
```

确认当前环境是否可以使用统一广告。

**示例**

{% tabs %}
{% tab title="tsx\[React]" %}

```tsx
import { loadFullScreenAd, showFullScreenAd } from '@apps-in-toss/web-framework';
import { useState, useEffect } from 'react';

function AdComponent() {
  const AD_GROUP_ID = 'ait.dev.43daa14da3ae487b';
  const [isAdLoaded, setIsAdLoaded] = useState(false);

  useEffect(() => {
    // 组件挂载时加载广告
    const unregister = loadFullScreenAd({
      options: { adGroupId: AD_GROUP_ID },
      onEvent: (event) => {
        if (event.type === 'loaded') {
          setIsAdLoaded(true);
        }
      },
      onError: (error) => {
        console.error('广告加载失败:', error);
      },
    });

    return () => unregister();
  }, []);

  const handleShowAd = () => {
    showFullScreenAd({
      options: { adGroupId: AD_GROUP_ID },
      onEvent: (event) => {
        switch (event.type) {
          case 'requested':
            console.log('广告展示请求已发出');
            break;
          case 'show':
            console.log('广告画面已显示');
            break;
          case 'impression':
            console.log('广告曝光已记录（产生收益）');
            break;
          case 'clicked':
            console.log('广告被点击');
            break;
          case 'dismissed':
            console.log('广告已关闭');
            setIsAdLoaded(false);
            // 加载下一个广告
            loadNextAd();
            break;
          case 'failedToShow':
            console.error('广告展示失败');
            break;
          case 'userEarnedReward':
            console.log('获得奖励:', event.data);
            // 向用户发放奖励
            grantReward(event.data.unitType, event.data.unitAmount);
            break;
        }
      },
      onError: (error) => {
        console.error('广告展示失败:', error);
      },
    });
  };

  const loadNextAd = () => {
    loadFullScreenAd({
      options: { adGroupId: AD_GROUP_ID },
      onEvent: (event) => {
        if (event.type === 'loaded') setIsAdLoaded(true);
      },
      onError: console.error,
    });
  };

  const grantReward = (unitType: string, unitAmount: number) => {
    // 奖励发放逻辑
    console.log(`${unitType} 发放 ${unitAmount} 个`);
  };

  return (
    <button onClick={handleShowAd} disabled={!isAdLoaded}>
      查看广告
    </button>
  );
}
```

{% endtab %}

{% tab title="React Native" %}

```tsx
import { loadFullScreenAd, showFullScreenAd } from '@apps-in-toss/framework';
import { useEffect, useState } from 'react';
import { Alert, Button, View } from 'react-native';

function AdComponent() {
  const AD_GROUP_ID = 'ait.dev.43daa14da3ae487b';
  const [isAdLoaded, setIsAdLoaded] = useState(false);

  useEffect(() => {
    // 组件挂载时加载广告
    const unregister = loadFullScreenAd({
      options: { adGroupId: AD_GROUP_ID },
      onEvent: (event) => {
        if (event.type === 'loaded') {
          setIsAdLoaded(true);
        }
      },
      onError: (error) => {
        Alert.alert('广告加载失败', String(error));
      },
    });

    return () => unregister();
  }, []);

  const handleShowAd = () => {
    showFullScreenAd({
      options: { adGroupId: AD_GROUP_ID },
      onEvent: (event) => {
        switch (event.type) {
          case 'requested':
            console.log('广告展示请求已发出');
            break;
          case 'show':
            console.log('广告画面已显示');
            break;
          case 'impression':
            console.log('广告曝光已记录（产生收益）');
            break;
          case 'clicked':
            console.log('广告被点击');
            break;
          case 'dismissed':
            setIsAdLoaded(false);
            loadNextAd();
            break;
          case 'failedToShow':
            Alert.alert('广告展示失败');
            break;
          case 'userEarnedReward':
            console.log('获得奖励:', event.data);
            grantReward(event.data.unitType, event.data.unitAmount);
            break;
        }
      },
      onError: (error) => {
        Alert.alert('广告展示失败', String(error));
      },
    });
  };

  const loadNextAd = () => {
    loadFullScreenAd({
      options: { adGroupId: AD_GROUP_ID },
      onEvent: (event) => {
        if (event.type === 'loaded') setIsAdLoaded(true);
      },
      onError: (error) => Alert.alert('错误', String(error)),
    });
  };

  const grantReward = (unitType: string, unitAmount: number) => {
    Alert.alert('获得奖励', `${unitType} ${unitAmount} 个已发放。`);
  };

  return (
    <View>
      <Button title="查看广告" onPress={handleShowAd} disabled={!isAdLoaded} />
    </View>
  );
}
```

{% endtab %}
{% endtabs %}

**`ShowFullScreenAdParams`**

```typescript
interface ShowFullScreenAdParams {
  options: ShowFullScreenAdOptions;
  onEvent: (data: ShowFullScreenAdEvent) => void;
  onError: (err: unknown) => void;
}
```

`showFullScreenAd`是该参数的类型。

**`ShowFullScreenAdOptions`**

```typescript
interface ShowFullScreenAdOptions {
  adGroupId: string;
}
```

展示广告选项。

**`ShowFullScreenAdEvent`**

```typescript
type ShowFullScreenAdEvent =
  | { type: 'requested' }
  | { type: 'show' }
  | { type: 'impression' }
  | { type: 'clicked' }
  | { type: 'dismissed' }
  | { type: 'failedToShow' }
  | { type: 'userEarnedReward'; data: { unitType: string; unitAmount: number } };
```

这是展示广告事件。

**事件说明**

| 事件类型               | 说明                                                                              |
| ------------------ | ------------------------------------------------------------------------------- |
| `requested`        | 广告展示请求成功了。                                                                      |
| `show`             | 广告已显示在屏幕上。                                                                      |
| `impression`       | 广告曝光已记录。（产生收益的时点）                                                               |
| `clicked`          | 用户点击了广告。                                                                        |
| `dismissed`        | 用户关闭了广告。                                                                        |
| `failedToShow`     | 广告展示失败了。                                                                        |
| `userEarnedReward` | 在奖励广告中，用户获得了奖励。• `data.unitType`: 奖励类型（例如：coin, point）• `data.unitAmount`: 奖励数量 |

***

### 使用指南

**广告加载时机**

建议在展示广告之前先预加载。

* 推荐的加载时机
  * 组件挂载时
  * 前一个广告关闭后立即
  * 切换到展示广告的页面之前

```tsx
// ✅ 好的示例：进入页面时预先加载
useEffect(() => {
  loadFullScreenAd({
    /* ... */
  });
}, []);

// ❌ 坏的示例：点击按钮时加载（会产生用户等待时间）
const handleClick = () => {
  loadFullScreenAd({
    /* ... */
  }); // 会产生加载时间
  showFullScreenAd({
    /* ... */
  });
};
```

**奖励广告处理**

`userEarnedReward` 仅在事件发生时发放奖励。 `dismissed`不能仅凭

```tsx
showFullScreenAd({
  options: { adGroupId: REWARDED_AD_ID },
  onEvent: (event) => {
    if (event.type === 'userEarnedReward') {
      // ✅ 发放奖励
      grantReward(event.data);
    }

    if (event.type === 'dismissed') {
      // ❌ 不会仅凭 dismissed 发放奖励
    }
  },
  onError: console.error,
});
```

**内存管理**

组件卸载时解除回调注册，防止内存泄漏。

```tsx
useEffect(() => {
  const unregister = loadFullScreenAd({
    /* ... */
  });

  return () => {
    unregister(); // 清理
  };
}, []);
```

**错误处理**

请始终提供 `onError` 请提供回调，以应对广告加载/展示失败。

```tsx
loadFullScreenAd({
  options: { adGroupId: AD_GROUP_ID },
  onEvent: (event) => {
    /* ... */
  },
  onError: (error) => {
    console.error('广告加载失败:', error);
    // 向用户提供适当反馈或重试
  },
});
```

***

### 事件流程

{% tabs %}
{% tab title="插屏广告（Interstitial）" %}

```
调用 loadFullScreenAd
  ↓
发生 loaded 事件
  ↓
调用 showFullScreenAd
  ↓
发生 requested 事件
  ↓
发生 show 事件（广告画面显示）
  ↓
发生 impression 事件（产生收益）
  ↓
clicked 事件（点击时）或 dismissed 事件（关闭时）
```

{% endtab %}

{% tab title="奖励广告（Rewarded）" %}

```
调用 loadFullScreenAd
  ↓
发生 loaded 事件
  ↓
调用 showFullScreenAd
  ↓
发生 requested 事件
  ↓
发生 show 事件（广告画面显示）
  ↓
发生 impression 事件（产生收益）
  ↓
[用户完成观看广告]
  ↓
发生 userEarnedReward 事件（发放奖励）
  ↓
发生 dismissed 事件（关闭广告）
```

{% endtab %}
{% endtabs %}

### 广告政策 <a href="#policy" id="policy"></a>

#### Toss Ads SSP 政策 <a href="#ssp" id="ssp"></a>

请务必遵守以下政策。违规时，广告展示可能会受限。

**即使本政策未明确规定，刻意诱导广告展示、点击、效果，或造成用户误解的行为也可能被视为违反政策。**

如因违反政策而导致服务终止，所有合作方都必须遵守服务终止政策。

| 类型         | 禁止行为                                                      | 具体示例                                                                                                                                                                                                                                                                                                    | 政策标准                                                                                                            |
| ---------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| UI/UX 质量下降 | 使广告与内容的区分不清，诱导用户在与其意图无关的情况下消费或点击广告，或以影响正常服务使用的方式构建 UI 的行为 | <p></p><ul><li>用“推荐服务”“金融技巧”等伪装广告</li><li>修改 Toss Ads 指南之外的广告单元颜色·字体</li><li>擅自修改广告标题·标签·CTA 文案及设计</li><li>将广告放置在用户交互元素（按钮、游戏区域等）附近，造成非预期点击的结构</li><li>在同一屏幕上放置 2 个以上相同格式的广告时</li><li>使用户难以正常关闭页面或返回上一页的死路（Dead-end）结构</li><li>将广告与服务 CTA 的功能构建得让用户难以区分的结构</li><li>让正常使用服务所需的 CTA 难以被识别或访问的结构</li></ul> | <p></p><ul><li>广告必须保留 “Ad” 标识</li><li>所有广告 UI 都必须使用 web-base 标准组件</li><li>禁止构成会人为诱导广告效果或损害用户体验的 UI/UX</li></ul> |
| 篡改广告调用行为   | 更改或绕过 SDK 的默认事件流程或广告调用方式的行为                               | <ul><li>篡改 SDK Click / Impression 事件</li><li>不经过广告 SDK，使用自有逻辑调用广告，或绕过 SDK 事件进行实现的情况</li><li>通过阻止或异常控制 Back 按钮，妨碍用户正常关闭页面或返回上一页的情况</li></ul>                                                                                                                                                             | <p></p><ul><li>禁止篡改 SDK 默认事件（Click / Impression）结构</li><li>不可调用 SDK 外部 API</li></ul>                            |
| 异常流量及效果操纵  | 通过自动化或人为方式扭曲流量及广告效果的行为                                    | <ul><li>定期刷新广告区域</li><li>人为产生效果（点击、曝光等）的活动</li></ul>                                                                                                                                                                                                                                                    | <ul><li>如确认基于流量质量的异常模式，广告限制、处罚、结算暂缓</li></ul>                                                                   |
| 奖励·参与型点击引导 | 在广告点击的同时提供奖励或福利的行为                                        | <ul><li>“点击广告立即提供奖励”</li><li>“点击广告即可获得积分”</li></ul>                                                                                                                                                                                                                                                     | <ul><li>禁止将广告消费与奖励直接关联的结构</li><li>禁止点击奖励性质文案·活动联动</li></ul>                                                     |
| 隐藏广告或重叠    | 故意隐藏广告或被其他 UI 元素遮挡，使用户难以明确感知广告存在的行为                       | <p>• 透明广告 </p><p>• 在其他卡片 UI 后插入广告 DOM</p>                                                                                                                                                                                                                                                               | • 广告的展示状态必须能够清楚确认                                                                                               |

***

#### **UX / Product Principle 运营原则**

广告也应遵循 Toss 的 UX 原则。

| **Toss Principle**             | **适用标准**                   | **示例**                |
| ------------------------------ | -------------------------- | --------------------- |
| **Simplicity**                 | 广告应清晰明了，不需要额外说明也能理解其含义     | “立即查看”、“查看广告”等明确的 CTA |
| **Clear Action**               | 用户应能预测点击广告后会发生什么行为         | 提供外部跳转时的提示文案          |
| **No Deception (UX Red Rule)** | 广告不应在意料之外的时机、形式、位置出现，或误导用户 | 将广告伪装成内容的情况           |
| **Value First**                | 广告不应妨碍客户的服务目标              | 禁止在支付/开户流程中插入广告       |

#### **使用限制及制裁措施**

如 App in Toss 广告版位或服务违反本政策，可能会受到制裁。

***

**限制流程**

限制措施原则上会根据违规行为的累积程度分阶段适用。不过，根据违规类型或严重程度，即使单次违规也可能立即适用 30 天使用限制或永久使用限制。

※ 同时确认的违规，不论违规槽位数量，均按 1 次违规处理。之后若另有违规被确认，违规次数将累计。

<figure><img src="/files/991586e555ea092f6f41513f492332c7e1b8cf0d" alt=""><figcaption></figcaption></figure>

***

**不当收益处理**

因政策违规、无效流量或其他不正当方式产生的收益，可能被视为不当收益。

一旦确认不当收益，相关金额可能会被暂缓支付或拒绝支付，且已支付金额也可能同样被追缴。

***

**申诉流程**

* 若收到使用限制通知 **可在 30 天内申请申诉**可以。
  * 申诉资料可通过 Channel Talk 提交。
* 提交的资料将依据内部标准进行审核，必要时可能会要求补充资料。
  * 审核可能需要约 1 个工作周。
  * 对于申诉申请 **将重点审查制裁是否适当**，且仅仅修改违规事项或提交防止复发计划，并不能解除制裁。
  * 若通过提交的申诉资料确认，不成立作为制裁依据的违规事实，或制裁判断存在明显错误，则制裁可能会被解除。
* 若屡次或严重违规，服务使用可能会被永久限制。

***

### 测试

开发阶段务必使用测试广告 ID。使用真实广告 ID 进行测试将被视为违反政策，可能受到不利影响。

* 插屏广告： `ait-ad-test-interstitial-id`
* 奖励广告： `ait-ad-test-rewarded-id`
* 横幅广告 - 列表型： `ait-ad-test-banner-id`
* 横幅广告 - 信息流型： `ait-ad-test-native-image-id`

发布前请务必确认以下事项。

* 确认广告是否正常加载。
* 确认点击后是否跳转到预期页面。
* 确认返回操作是否正常工作。
* 确认不会干扰支付或认证流程。

***

### 常见问题

<details>

<summary>\"This feature is not supported in the current environment\" 会发生错误</summary>

1. 请确认是否在 Toss App 环境中运行。
2. 请确认应用版本是否满足要求。
3. `isSupported()` 请先通过方法确认是否支持。

</details>

<details>

<summary>广告无法加载</summary>

1. `adGroupId`请确认（从控制台获取的 ID）是否正确。
2. 请检查网络连接状态。
3. `onError` 请查看回调消息。
4. 在开发环境中，请使用测试用的 `adGroupId`。请使用。（例如： `ait.dev.43daa14da3ae487b`)

</details>

<details>

<summary>调用广告加载函数后，事件通常会在几秒内到达吗？</summary>

所需时间会因展示的是哪个网络的广告而不同。

```
**Toss Ads**：通常会在 1～2 秒内加载完成。根据网络状况，最多可能需要 10 秒。
**Google AdMob**：通常需要 5～20 秒，也可能更久。受用户网络状况影响很大，最多可能延迟到网络超时上限 60 秒。
```

由于 SDK 会根据环境自动决定选择哪个网络，建议在进入展示广告页面之前先预加载。

</details>

<details>

<summary>调用 showFullScreenAd 了，但广告没有显示</summary>

1. `loadFullScreenAd`请先调用 `loaded` 请确认是否收到了事件。
2. 相同的 `adGroupId`是否被使用。
3. 已经展示过的广告无法再次展示，因此需要重新加载。
4. `failedToShow` 请检查事件或 `onError` 回调中的错误。

</details>

<details>

<summary>奖励没有发放</summary>

1. `userEarnedReward` 请确认是否发生了事件。
2. 请确认用户是否完整观看了广告。（中途关闭则不发放奖励）
3. `event.data`在 `unitType`和 `unitAmount`请确认。

</details>

<details>

<summary>没有发生 dismissed 事件</summary>

在 Android Toss App 5.255.0 版本中， `dismissed` 事件不会发生。除此版本外均可正常工作。

</details>

<details>

<summary>广告加载事件偶尔不会传递</summary>

在 Android Toss App 5.266.0 版本中，调用广告加载函数后，在收到事件之前再次调用加载时，追加调用的事件会偶尔无法传递，曾存在这样的问题。

虽然通过回滚服务器逻辑解决了该问题，但偶尔缓存残留导致同样现象再次发生时，用户可能需要结束 Toss App 进程后重新启动。

在存在问题期间，需要应用以下指南。

广告组 ID 必须一次只按一个顺序加载。若在迷你应用中同时加载多个广告组 ID，将无法正常处理。插屏/奖励广告都需要分别加载。（例如：加载插屏组 ID → 接收事件 → 加载奖励组 ID → 接收事件 → 显示）在调用广告加载函数并收到事件之后，再调用广告显示函数。横幅广告不受此影响。

从 Android 5.267.0 版本开始，以上问题已得到改善，不再需要重新运行 Toss App，并且已修改为可以在一个迷你应用中预先加载多个插屏广告实例。

</details>

<details>

<summary>没有发生 loaded 事件</summary>

在 Android 5.266.0 及以上版本中，同时加载插屏/奖励广告和横幅广告时，插屏/奖励广告的事件不会传递。

在存在问题期间，需要应用以下指南。

广告组 ID 必须一次只按一个顺序加载。若在迷你应用中同时加载多个广告组 ID，将无法正常处理。插屏/奖励/横幅广告都需要分别加载。（例如：加载插屏组 ID → 接收事件 → 加载横幅 ID → 接收事件 → 显示）在调用广告加载函数并收到事件之后，再调用广告显示函数。

从 Android 5.268.0 版本开始将会改进。

</details>

<details>

<summary>沙盒中应用内广告功能无法使用</summary>

沙盒中不支持应用内广告功能。

不便之处敬请谅解，请通过控制台内的二维码进行测试。

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers-apps-in-toss.toss.im/documentation/api-and-sdk-zh/common/monetization/iaa/interstitial-rewarded-ad.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
