動画リワード広告実装方法 - glossom-dev/AdfurikunSDK-ReactNative GitHub Wiki
動画リワード広告実装方法
実装準備
SDKの導入がまだの場合は、以下の手順で導入頂く必要があります。
アドフリくん動画リワード広告のインポート
import {
AdfurikunReward,
AdfurikunRewardCallbackResult,
AdfurikunRewardCallbackType } from 'react-native-adfurikunsdk';
動画リワード広告の初期化
AdfurikunReward
クラスのインスタンスを生成します。
引数には、アドフリくん管理画面で発行された広告枠IDを設定して下さい。
// リワード広告のプロパティを宣言します。
var reward: AdfurikunReward = null;
export const RewardScreen: React.FC = () => {
React.useEffect(
() => {
// リワード広告のインスタンスを生成します。
reward = new AdfurikunReward(appId);
}, []);
動画リワード広告のリスナー設定
アドフリくんからのコールバックを設定します。
export const RewardScreen: React.FC = () => {
React.useEffect(
() => {
// コールバックを設定します
reward.setCallback((item) => notifyCallback(item));
}, []);
function notifyCallback(item: AdfurikunRewardCallbackResult): void {
if (AdfurikunRewardCallbackType.onPrepareSuccess == item.type) {
// 広告のロードが成功しました。
} else if (AdfurikunRewardCallbackType.onPrepareFailure == item.type) {
// 広告のロードが失敗しました。
} else if (AdfurikunRewardCallbackType.onStartPlaying == item.type) {
// 広告の再生を開始しました。
} else if (AdfurikunRewardCallbackType.onFinishedPlaying == item.type) {
// 広告の再生が完了しました。
} else if (AdfurikunRewardCallbackType.onFailedPlaying == item.type) {
// 広告の再生中にエラーが発生しました。
} else if (AdfurikunRewardCallbackType.onAdClose == item.type) {
// 広告を閉じました。
}
}
動画リワード広告のロード
load
関数で広告をロードします。
ロード成功すると、コールバックのtype引数にAdfurikunRewardCallbackType.onPrepareSuccess
が送られます。
失敗するとAdfurikunRewardCallbackType.onPrepareFailure
が送られます。
if (reward != null) {
reward.load();
}
動画リワード広告の表示
isPrepared
関数の戻り値がtrueになる事を確認し、play
関数で広告を再生します。
async function play() {
if (reward != null) {
var isPrepared = await reward.isPrepared();
if (isPrepared) {
reward.play();
}
}
}
・再生準備が完了したアドネットワークの中から、1つアドネットワークが選択されます。
動画リワード広告の破棄
AdfurikunReward
インスタンスを使わなくなった場合、destroy
関数を呼び出して下さい。
React.useEffect(
() => {
return () => {
if (reward != null) {
reward.destroy();
reward = null;
}
}
}, []);
広告を視聴したユーザーへの報酬の付与タイミングについて
報酬の付与は、onCloseAd関数が呼ばれた際にユーザーへ報酬を付与する事を推奨します。 isRewarded が true の場合のみ、報酬を付与するよう追記してください。
function notifyCallback(item: AdfurikunRewardCallbackResult): void {
・・・
if (AdfurikunRewardCallbackType.onAdClose == item.type) {
if (item.isRewarded) {
// 報酬の付与
}
}
・・・
}
(2.0.0未満のAndroidのみ広告再生中にホーム画面復帰した場合の報酬付与の問題
AndroidManifest.xml にてlaunchMode
がsingleTask
に設定されている場合、広告再生中にホーム画面に戻り、アプリアイコンから復帰すると、広告画面が自動的に閉じます。 この際、広告を最後まで視聴していないためonFinishedPlaying
コールバックは発生せず、onAdClose
コールバックのみが発生します。 その結果、onAdClose
で報酬を付与している場合、ユーザーが広告を最後まで見なくても報酬が付与される可能性があります。
同様のケースで報酬を付与したくない場合、以下の実装で対応できます。
onFinishedPlaying
が発生したかどうかをフラグで管理する。onAdClose
でフラグをチェックし、onFinishedPlaying
が発生済の場合のみ報酬を付与する。
function notifyCallback(item: AdfurikunRewardCallbackResult): void {
・・・
if (AdfurikunRewardCallbackType.onStartPlaying == item.type) {
isInvokedFinishCallback = false; // 広告再生時にフラグを初期化する
} else if (AdfurikunRewardCallbackType.onFinishedPlaying == item.type) {
isInvokedFinishCallback = true; // onFinishedPlaying コールバックが発生したことを記録する
} else if (AdfurikunRewardCallbackType.onAdClose == item.type) {
if (isInvokedFinishCallback) { // onFinishedPlaying コールバックが発生したケースのみ報酬を付与する
// 報酬の付与
}
}
・・・
}