メインコンテンツへスキップ

概要

バナー広告は画面の一部の領域に表示される長方形の広告です。AdropBannerコンポーネントを使用して簡単に実装できます。

主な特徴

  • 画面上部、下部、または中央に固定配置可能
  • 画像および動画広告対応
  • 自動または手動広告ロード対応
  • コールバックによる広告イベント処理
  • 広告メタデータ提供(クリエイティブID、キャンペーンIDなど)
開発環境ではテストユニットIDを使用してください:PUBLIC_TEST_UNIT_ID_320_100またはPUBLIC_TEST_UNIT_ID_320_50

AdropBannerコンポーネント

Props

unitId
string
required
広告コントロールコンソールで生成したユニットID
style
ViewStyle
required
バナーのスタイル(widthとheightが必須)
autoLoad
boolean
default:"true"
コンポーネントがマウントされたときに自動的に広告をロードするかどうか
useCustomClick
boolean
default:"false"
カスタムクリック処理を使用するかどうか。trueに設定すると、広告クリック時に自動的にブラウザが開きません。
onAdReceived
(unitId: string, metadata?: AdropBannerMetadata) => void
広告受信が成功したときに呼び出されるコールバック
onAdClicked
(unitId: string, metadata?: AdropBannerMetadata) => void
ユーザーが広告をクリックしたときに呼び出されるコールバック
onAdImpression
(unitId: string, metadata?: AdropBannerMetadata) => void
広告が画面に表示されたときに呼び出されるコールバック
onAdFailedToReceive
(unitId: string, errorCode?: string) => void
広告受信が失敗したときに呼び出されるコールバック

基本的な使い方

自動ロード(推奨)

コンポーネントがマウントされたときに自動的に広告をロードします。
import React from 'react'
import { View, StyleSheet, Dimensions } from 'react-native'
import { AdropBanner } from 'adrop-ads-react-native'

const App = () => {
  const screenWidth = Dimensions.get('window').width

  return (
    <View style={styles.container}>
      {/* メインコンテンツ */}
      <View style={styles.content}>
        {/* ... */}
      </View>

      {/* バナー広告 */}
      <AdropBanner
        unitId="YOUR_UNIT_ID"
        style={{ width: screenWidth, height: 80 }}
        onAdReceived={(unitId, metadata) => {
          console.log('バナー広告受信成功', unitId, metadata)
        }}
        onAdFailedToReceive={(unitId, errorCode) => {
          console.log('バナー広告受信失敗', unitId, errorCode)
        }}
      />
    </View>
  )
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  content: {
    flex: 1,
  },
})

export default App

Refを使用した手動ロード

refを使用して任意のタイミングで広告をロードできます。
import React, { useRef } from 'react'
import { View, Button, StyleSheet, Dimensions } from 'react-native'
import { AdropBanner } from 'adrop-ads-react-native'

interface AdropBannerRef {
  load: () => void
}

const App = () => {
  const bannerRef = useRef<AdropBannerRef>(null)
  const screenWidth = Dimensions.get('window').width

  const loadBanner = () => {
    bannerRef.current?.load()
  }

  return (
    <View style={styles.container}>
      <Button title="バナー広告ロード" onPress={loadBanner} />

      <AdropBanner
        ref={bannerRef}
        unitId="YOUR_UNIT_ID"
        style={{ width: screenWidth, height: 80 }}
        autoLoad={false}
        onAdReceived={(unitId, metadata) => {
          console.log('バナー広告受信成功', unitId, metadata)
        }}
        onAdFailedToReceive={(unitId, errorCode) => {
          console.log('バナー広告受信失敗', unitId, errorCode)
        }}
      />
    </View>
  )
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
})

export default App

コールバック関数

onAdReceived

広告受信が成功したときに呼び出されます。
const handleAdReceived = (unitId: string, metadata?: AdropBannerMetadata) => {
  console.log('バナー広告受信成功')
  console.log('ユニットID:', unitId)
  console.log('クリエイティブID:', metadata?.creativeId)
  console.log('キャンペーンID:', metadata?.campaignId)
  console.log('トランザクションID:', metadata?.txId)
  console.log('遷移先URL:', metadata?.destinationURL)

  // ローディングインジケーターを非表示にするなどの処理
}

onAdClicked

ユーザーが広告をクリックしたときに呼び出されます。
const handleAdClicked = (unitId: string, metadata?: AdropBannerMetadata) => {
  console.log('バナー広告クリック')
  console.log('ユニットID:', unitId)
  console.log('遷移先URL:', metadata?.destinationURL)

  // クリック分析ロギングなどの処理
}

onAdImpression

広告が画面に表示されたときに呼び出されます。
const handleAdImpression = (unitId: string, metadata?: AdropBannerMetadata) => {
  console.log('バナー広告表示')
  console.log('ユニットID:', unitId)
  console.log('クリエイティブID:', metadata?.creativeId)

  // 表示分析ロギングなどの処理
}

onAdFailedToReceive

広告受信が失敗したときに呼び出されます。
const handleAdFailedToReceive = (unitId: string, errorCode?: string) => {
  console.log('バナー広告受信失敗')
  console.log('ユニットID:', unitId)
  console.log('エラーコード:', errorCode)

  // エラー処理と代替コンテンツ表示
  if (errorCode === 'NETWORK_ERROR') {
    console.log('ネットワーク接続を確認してください')
  } else if (errorCode === 'NO_FILL') {
    console.log('表示可能な広告がありません')
  }
}

AdropBannerMetadata

広告メタデータタイプです。
type AdropBannerMetadata = {
  creativeId: string      // クリエイティブID
  txId: string           // トランザクションID
  campaignId: string     // キャンペーンID
  destinationURL: string // 遷移先URL
}
この情報は広告分析、追跡、レポーティングに便利に使用できます。

広告サイズ

バナー広告はユニットに設定したサイズに合わせてスタイルのサイズを指定する必要があります。

一般的なバナーサイズ

サイズ用途
320 x 50小型バナー
320 x 100中型バナー
16:9比率動画バナー

固定サイズ使用

<AdropBanner
  unitId="YOUR_UNIT_ID"
  style={{ width: 320, height: 100 }}
/>

画面幅に合わせる

import { Dimensions } from 'react-native'

const screenWidth = Dimensions.get('window').width

<AdropBanner
  unitId="YOUR_UNIT_ID"
  style={{ width: screenWidth, height: 80 }}
/>

レスポンシブサイズ使用

<AdropBanner
  unitId="YOUR_UNIT_ID"
  style={{ width: '100%', height: 80 }}
/>
widthを文字列('100%'など)で設定するとレスポンシブに動作しますが、数値で設定するとその値が広告サーバーに渡され、適切なサイズの広告をリクエストします。

テストユニットID

開発およびテスト時には以下のテストユニットIDを使用してください。
広告タイプテストユニットIDサイズ
バナー (320x50)PUBLIC_TEST_UNIT_ID_320_50320 x 50
バナー (320x100)PUBLIC_TEST_UNIT_ID_320_100320 x 100

使用例

<AdropBanner
  unitId="PUBLIC_TEST_UNIT_ID_320_100"
  style={{ width: 320, height: 100 }}
/>

エラー処理

広告ロード失敗時に適切なエラー処理を実装してください。

エラー状態管理

import React, { useState } from 'react'
import { View, Text, StyleSheet } from 'react-native'
import { AdropBanner } from 'adrop-ads-react-native'

const App = () => {
  const [error, setError] = useState<string | null>(null)

  const handleAdReceived = () => {
    setError(null)
  }

  const handleAdFailedToReceive = (unitId: string, errorCode?: string) => {
    setError(errorCode || '不明なエラー')
  }

  return (
    <View style={styles.container}>
      <AdropBanner
        unitId="YOUR_UNIT_ID"
        style={{ width: 320, height: 100 }}
        onAdReceived={handleAdReceived}
        onAdFailedToReceive={handleAdFailedToReceive}
      />

      {error && (
        <Text style={styles.errorText}>
          広告ロード失敗: {error}
        </Text>
      )}
    </View>
  )
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
  errorText: {
    marginTop: 8,
    color: 'red',
  },
})

export default App

ベストプラクティス

1. 画面の可視性

バナーが画面に表示されているときに広告をロードしてください。
import React, { useEffect, useRef } from 'react'
import { AppState } from 'react-native'

const App = () => {
  const bannerRef = useRef<{ load: () => void }>(null)
  const appState = useRef(AppState.currentState)

  useEffect(() => {
    const subscription = AppState.addEventListener('change', nextAppState => {
      if (
        appState.current.match(/inactive|background/) &&
        nextAppState === 'active'
      ) {
        // アプリがフォアグラウンドに戻ったときに広告をリフレッシュ
        bannerRef.current?.load()
      }
      appState.current = nextAppState
    })

    return () => {
      subscription.remove()
    }
  }, [])

  return (
    <AdropBanner
      ref={bannerRef}
      unitId="YOUR_UNIT_ID"
      style={{ width: 320, height: 100 }}
    />
  )
}

2. ローディングインジケーター

広告ロード中のユーザー体験を改善してください。
import React, { useState } from 'react'
import { View, ActivityIndicator, StyleSheet } from 'react-native'
import { AdropBanner } from 'adrop-ads-react-native'

const App = () => {
  const [loading, setLoading] = useState(true)

  return (
    <View style={styles.container}>
      {loading && (
        <ActivityIndicator
          style={styles.loader}
          size="small"
          color="#999"
        />
      )}

      <AdropBanner
        unitId="YOUR_UNIT_ID"
        style={{ width: 320, height: 100 }}
        onAdReceived={() => setLoading(false)}
        onAdFailedToReceive={() => setLoading(false)}
      />
    </View>
  )
}

const styles = StyleSheet.create({
  container: {
    position: 'relative',
  },
  loader: {
    position: 'absolute',
    top: '50%',
    left: '50%',
    transform: [{ translateX: -12 }, { translateY: -12 }],
  },
})

3. 複数バナー管理

複数のバナーを使用するときはそれぞれの状態を管理してください。
import React, { useState } from 'react'
import { View, Text } from 'react-native'
import { AdropBanner } from 'adrop-ads-react-native'

const App = () => {
  const [banner1Loaded, setBanner1Loaded] = useState(false)
  const [banner2Loaded, setBanner2Loaded] = useState(false)

  return (
    <View>
      <Text>バナー1: {banner1Loaded ? 'ロード済み' : 'ロード中'}</Text>
      <AdropBanner
        unitId="UNIT_ID_1"
        style={{ width: 320, height: 100 }}
        onAdReceived={() => setBanner1Loaded(true)}
      />

      <Text>バナー2: {banner2Loaded ? 'ロード済み' : 'ロード中'}</Text>
      <AdropBanner
        unitId="UNIT_ID_2"
        style={{ width: 320, height: 100 }}
        onAdReceived={() => setBanner2Loaded(true)}
      />
    </View>
  )
}

4. カスタムクリック処理

広告クリックを直接処理するにはuseCustomClickを使用してください。
import { Linking } from 'react-native'
import { AdropBanner, type AdropBannerMetadata } from 'adrop-ads-react-native'

const App = () => {
  const handleAdClicked = (unitId: string, metadata?: AdropBannerMetadata) => {
    console.log('広告クリック:', unitId)

    // カスタム分析ロギング
    analytics.logEvent('ad_clicked', {
      unitId,
      campaignId: metadata?.campaignId,
    })

    // 手動でブラウザを開く
    if (metadata?.destinationURL) {
      Linking.openURL(metadata.destinationURL)
    }
  }

  return (
    <AdropBanner
      unitId="YOUR_UNIT_ID"
      style={{ width: 320, height: 100 }}
      useCustomClick={true}
      onAdClicked={handleAdClicked}
    />
  )
}

次のステップ