Я создаю приложение, используя React Native expo. Я пытаюсь реализовать рекламу с вознаграждением. Я скопировал код из документации, и он работает. В моем приложении пользователи могут смотреть столько рекламы, сколько захотят, чтобы заработать игровые монеты. Проблема в моей реализации: объявление с вознаграждением можно увидеть только один раз, и если пользователь попытается посмотреть еще одно объявление, он увидит ошибку:
Ошибка. : RewardedAd.show() Запрошенное RewardedAd не загружено и
не может быть показано.
Эта реализация находится в модальном режиме. Поэтому, если я закрою модальное окно, открою его и нажму кнопку, чтобы снова посмотреть рекламу с вознаграждением, оно сработает. Поскольку это не очень удобно для пользователя, рекламу следует видеть даже без закрытия модального окна. Буду очень рад, если будет чем исправить эту проблему.
Вот моя реализация:
import { useEffect, useState } from "react";
import {
RewardedAd,
RewardedAdEventType,
TestIds,
} from "react-native-google-mobile-ads";
const adUnitId = __DEV__
? TestIds.REWARDED
: "ca-app-pub-xxxxxxxxxxxxx/yyyyyyyyyyyyyy";
const rewarded = RewardedAd.createForAdRequest(adUnitId);
export const useRewardedAd = () => {
const [loaded, setLoaded] = useState(false);
const watchAd = () => {
if (loaded) {
rewarded.show();
}
};
useEffect(() => {
const unsubscribeLoaded = rewarded.addAdEventListener(
RewardedAdEventType.LOADED,
() => {
setLoaded(true);
}
);
const unsubscribeEarned = rewarded.addAdEventListener(
RewardedAdEventType.EARNED_REWARD,
(reward) => {
console.log("User earned reward of ", reward);
}
);
// Start loading the rewarded ad straight away
rewarded.load();
// Unsubscribe from events on unmount
return () => {
unsubscribeLoaded();
unsubscribeEarned();
};
}, []);
// No advert ready to show yet
if (!loaded) {
return null;
}
return watchAd;
};
В этом компоненте я использую watchAd:
import { View, Text, Alert } from "react-native";
import React, { useContext } from "react";
import { Entypo, FontAwesome, FontAwesome5 } from "@expo/vector-icons";
import EarnRow from "./EarnRow/EarnRow";
import { PlayerInformationContext } from "@/context/PlayerInformation";
import { useRewardedAd } from "@/hooks/useRewardedAd/useRewardedAd";
const Earn = () => {
const watchAd = useRewardedAd();
const {
money,
seenAdsCount,
health,
setHealth,
setMoney,
handleSeenAdsCount,
} = useContext(PlayerInformationContext);
const handleEarn = async (type: string) => {
switch (type) {
case "getMoney":
if (seenAdsCount < 10) {
handleSeenAdsCount(seenAdsCount + 1);
}
if (watchAd) {
watchAd();
}
break;
case "getHealth":
if (money >= 100) {
setHealth(health + 12);
setMoney(money - 100);
Alert.alert("Enerji Topladın!", "12 enerji puanı kazandın!");
} else {
Alert.alert("Yetersiz Altın!", "Bu işlem için yeterli altının yok.");
}
break;
default:
break;
}
};
return (
Kazan
handleEarn("getMoney")}
buttonIcon={}
/>
handleEarn("getHealth")}
buttonIcon={
}
/>
);
};
export default Earn;
Подробнее здесь: https://stackoverflow.com/questions/792 ... -only-once
Объявление Admob с вознаграждением показывается только один раз. ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1733170384
Anonymous
Я создаю приложение, используя React Native expo. Я пытаюсь реализовать рекламу с вознаграждением. Я скопировал код из документации, и он работает. В моем приложении пользователи могут смотреть столько рекламы, сколько захотят, чтобы заработать игровые монеты. Проблема в моей реализации: объявление с вознаграждением можно увидеть только один раз, и если пользователь попытается посмотреть еще одно объявление, он увидит ошибку:
Ошибка. : RewardedAd.show() Запрошенное RewardedAd не загружено и
не может быть показано.
Эта реализация находится в модальном режиме. Поэтому, если я закрою модальное окно, открою его и нажму кнопку, чтобы снова посмотреть рекламу с вознаграждением, оно сработает. Поскольку это не очень удобно для пользователя, рекламу следует видеть даже без закрытия модального окна. Буду очень рад, если будет чем исправить эту проблему.
Вот моя реализация:
import { useEffect, useState } from "react";
import {
RewardedAd,
RewardedAdEventType,
TestIds,
} from "react-native-google-mobile-ads";
const adUnitId = __DEV__
? TestIds.REWARDED
: "ca-app-pub-xxxxxxxxxxxxx/yyyyyyyyyyyyyy";
const rewarded = RewardedAd.createForAdRequest(adUnitId);
export const useRewardedAd = () => {
const [loaded, setLoaded] = useState(false);
const watchAd = () => {
if (loaded) {
rewarded.show();
}
};
useEffect(() => {
const unsubscribeLoaded = rewarded.addAdEventListener(
RewardedAdEventType.LOADED,
() => {
setLoaded(true);
}
);
const unsubscribeEarned = rewarded.addAdEventListener(
RewardedAdEventType.EARNED_REWARD,
(reward) => {
console.log("User earned reward of ", reward);
}
);
// Start loading the rewarded ad straight away
rewarded.load();
// Unsubscribe from events on unmount
return () => {
unsubscribeLoaded();
unsubscribeEarned();
};
}, []);
// No advert ready to show yet
if (!loaded) {
return null;
}
return watchAd;
};
В этом компоненте я использую watchAd:
import { View, Text, Alert } from "react-native";
import React, { useContext } from "react";
import { Entypo, FontAwesome, FontAwesome5 } from "@expo/vector-icons";
import EarnRow from "./EarnRow/EarnRow";
import { PlayerInformationContext } from "@/context/PlayerInformation";
import { useRewardedAd } from "@/hooks/useRewardedAd/useRewardedAd";
const Earn = () => {
const watchAd = useRewardedAd();
const {
money,
seenAdsCount,
health,
setHealth,
setMoney,
handleSeenAdsCount,
} = useContext(PlayerInformationContext);
const handleEarn = async (type: string) => {
switch (type) {
case "getMoney":
if (seenAdsCount < 10) {
handleSeenAdsCount(seenAdsCount + 1);
}
if (watchAd) {
watchAd();
}
break;
case "getHealth":
if (money >= 100) {
setHealth(health + 12);
setMoney(money - 100);
Alert.alert("Enerji Topladın!", "12 enerji puanı kazandın!");
} else {
Alert.alert("Yetersiz Altın!", "Bu işlem için yeterli altının yok.");
}
break;
default:
break;
}
};
return (
Kazan
handleEarn("getMoney")}
buttonIcon={}
/>
handleEarn("getHealth")}
buttonIcon={
}
/>
);
};
export default Earn;
Подробнее здесь: [url]https://stackoverflow.com/questions/79245371/admob-rewarded-ad-is-shown-only-once[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия