バナー広告は画面の一部の領域に表示される長方形の広告です。AdropBannerコンポーネントを使用して簡単に実装できます。
主な特徴
- 画面上部、下部、または中央に固定配置可能
- 画像および動画広告対応
- 自動または手動広告ロード対応
- コールバックによる広告イベント処理
- 広告メタデータ提供(クリエイティブID、キャンペーンIDなど)
開発環境ではテストユニットIDを使用してください:PUBLIC_TEST_UNIT_ID_320_100またはPUBLIC_TEST_UNIT_ID_320_50
AdropBannerコンポーネント
Props
バナーのスタイル(widthとheightが必須)
コンポーネントがマウントされたときに自動的に広告をロードするかどうか
カスタムクリック処理を使用するかどうか。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('表示可能な広告がありません')
}
}
広告メタデータタイプです。
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_50 | 320 x 50 |
| バナー (320x100) | PUBLIC_TEST_UNIT_ID_320_100 | 320 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}
/>
)
}
次のステップ