Я интегрирую Admob в свое приложение Flutter, используя плагин Google_mobile_ads. Вознагражденная реклама работает нормально, но моя родная реклама не загружается. Я подтвердил, что идентификаторы блока рекламы верны и что идентификатор завода «AdFactoryExample» соответствует моим коду Flutter и собственным кодом Android. Ниже приведены соответствующие сегменты кода: < /p>
Компонент AD Flutter (DART): < /p>
class _HomeScreenState extends State {
RewardedAd? _rewardedAd;
bool _isRewardedAdReady = false;
// Native ad fields.
NativeAd? _nativeAd;
bool _isNativeAdLoaded = false;
@override
void initState() {
super.initState();
_loadRewardedAd();
_loadNativeAd(); // Load the native ad on initialization.
}
void _loadRewardedAd() {
RewardedAd.load(
adUnitId: 'ca-app-pub-rewardId', // Replace with your rewarded ad unit ID.
request: const AdRequest(),
rewardedAdLoadCallback: RewardedAdLoadCallback(
onAdLoaded: (RewardedAd ad) {
_rewardedAd = ad;
setState(() {
_isRewardedAdReady = true;
});
},
onAdFailedToLoad: (LoadAdError error) {
print('RewardedAd failed to load: $error');
setState(() {
_isRewardedAdReady = false;
});
},
),
);
}
// New method to load the native ad.
void _loadNativeAd() {
_nativeAd = NativeAd(
adUnitId: 'ca-app-pub-nativeId', // Replace with your native ad unit ID.
factoryId: 'adFactoryExample', // Must match the native side.
request: const AdRequest(),
listener: NativeAdListener(
onAdLoaded: (ad) {
setState(() {
_isNativeAdLoaded = true;
});
print('Native ad loaded.');
},
onAdFailedToLoad: (ad, error) {
ad.dispose();
print('Native ad failed to load: $error');
setState(() {
_isNativeAdLoaded = false;
});
},
),
);
_nativeAd!.load();
}
void _showRewardedAd() {
if (_isRewardedAdReady && _rewardedAd != null) {
_rewardedAd!.show(
onUserEarnedReward: (AdWithoutView ad, RewardItem reward) {
print('User earned: ${reward.amount} ${reward.type}');
},
);
_rewardedAd = null;
setState(() {
_isRewardedAdReady = false;
});
_loadRewardedAd();
}
}
Widget _nativeAdWidget() {
if (_isNativeAdLoaded && _nativeAd != null) {
return Container(
height: 100,
child: AdWidget(ad: _nativeAd!),
);
} else {
return Container(
height: 100,
color: Colors.grey[300],
child: const Center(child: Text('Native ad loading...')),
);
}
}
@override
void dispose() {
_rewardedAd?.dispose();
_nativeAd?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('AdMob Screen'),
actions: [
IconButton(
icon: const Icon(Icons.payment),
onPressed: () {
Navigator.pushNamed(context, '/payment');
},
)
],
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
child: const Text('Show Reward Ad'),
onPressed: _isRewardedAdReady ? _showRewardedAd : null,
),
const SizedBox(height: 20),
_nativeAdWidget(),
const SizedBox(height: 20),
ElevatedButton(
child: const Text('Go to Payment Screen'),
onPressed: () {
Navigator.pushNamed(context, '/payment');
},
),
],
),
),
);
}
}
< /code>
Android build.gradle (level App): < /p>
import java.util.Properties
val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(keystorePropertiesFile.inputStream())
}
plugins {
id("com.android.application")
id("kotlin-android")
id("dev.flutter.flutter-gradle-plugin")
}
android {
namespace = "pname"
compileSdk = flutter.compileSdkVersion
ndkVersion = "27.0.12077973"
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
defaultConfig {
applicationId = "pname"
minSdk = 23
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
}
dependencies {
implementation("com.google.android.gms:play-services-ads:24.1.0")
// ... other dependencies
}
flutter {
source = "../.."
}
apply(plugin = "com.google.gms.google-services")
< /code>
mainactivity.kt:
package pname
import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
import com.google.android.gms.ads.MobileAds
class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
// Initialize the Mobile Ads SDK.
MobileAds.initialize(this) { initializationStatus ->
// Optional: handle initialization status.
}
// Register the native ad factory.
flutterEngine.platformViewsController
.registry
.registerViewFactory("adFactoryExample", NativeAdFactory(this))
}
}
< /code>
nativeadfactory.kt
package pname
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import io.flutter.plugin.platform.PlatformView
import io.flutter.plugin.platform.PlatformViewFactory
import io.flutter.plugin.common.StandardMessageCodec
// Factory to create native ad views.
class NativeAdFactory(private val context: Context) : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
override fun create(context: Context?, id: Int, args: Any?): PlatformView {
return NativeAdView(context)
}
}
// A simple PlatformView that inflates a native ad layout.
class NativeAdView(private val context: Context?) : PlatformView {
// Ensure you have a layout resource named "native_ad_layout.xml" in res/layout.
private val adView: View = LayoutInflater.from(context).inflate(R.layout.native_ad_layout, null)
override fun getView(): View = adView
override fun dispose() {}
}
< /code>
Я дважды проверил, что заводской идентификатор «AdfactoryExample» является согласованным между моим трепетом и нативным кодом. Вознагражденная реклама загружается и отображается правильно, но нативная реклама никогда не появляется. У кого -нибудь есть какие -либо предложения о том, что может привести к тому, что нативная реклама не загружается и не отображается?>
Подробнее здесь: https://stackoverflow.com/questions/795 ... gistration
Нативная реклама не загружается в приложении Flutter, несмотря на правильную регистрацию идентификатора фабрики ⇐ Android
Форум для тех, кто программирует под Android
1743556977
Anonymous
Я интегрирую Admob в свое приложение Flutter, используя плагин Google_mobile_ads. Вознагражденная реклама работает нормально, но моя родная реклама не загружается. Я подтвердил, что идентификаторы блока рекламы верны и что идентификатор завода «AdFactoryExample» соответствует моим коду Flutter и собственным кодом Android. Ниже приведены соответствующие сегменты кода: < /p>
Компонент AD Flutter (DART): < /p>
class _HomeScreenState extends State {
RewardedAd? _rewardedAd;
bool _isRewardedAdReady = false;
// Native ad fields.
NativeAd? _nativeAd;
bool _isNativeAdLoaded = false;
@override
void initState() {
super.initState();
_loadRewardedAd();
_loadNativeAd(); // Load the native ad on initialization.
}
void _loadRewardedAd() {
RewardedAd.load(
adUnitId: 'ca-app-pub-rewardId', // Replace with your rewarded ad unit ID.
request: const AdRequest(),
rewardedAdLoadCallback: RewardedAdLoadCallback(
onAdLoaded: (RewardedAd ad) {
_rewardedAd = ad;
setState(() {
_isRewardedAdReady = true;
});
},
onAdFailedToLoad: (LoadAdError error) {
print('RewardedAd failed to load: $error');
setState(() {
_isRewardedAdReady = false;
});
},
),
);
}
// New method to load the native ad.
void _loadNativeAd() {
_nativeAd = NativeAd(
adUnitId: 'ca-app-pub-nativeId', // Replace with your native ad unit ID.
factoryId: 'adFactoryExample', // Must match the native side.
request: const AdRequest(),
listener: NativeAdListener(
onAdLoaded: (ad) {
setState(() {
_isNativeAdLoaded = true;
});
print('Native ad loaded.');
},
onAdFailedToLoad: (ad, error) {
ad.dispose();
print('Native ad failed to load: $error');
setState(() {
_isNativeAdLoaded = false;
});
},
),
);
_nativeAd!.load();
}
void _showRewardedAd() {
if (_isRewardedAdReady && _rewardedAd != null) {
_rewardedAd!.show(
onUserEarnedReward: (AdWithoutView ad, RewardItem reward) {
print('User earned: ${reward.amount} ${reward.type}');
},
);
_rewardedAd = null;
setState(() {
_isRewardedAdReady = false;
});
_loadRewardedAd();
}
}
Widget _nativeAdWidget() {
if (_isNativeAdLoaded && _nativeAd != null) {
return Container(
height: 100,
child: AdWidget(ad: _nativeAd!),
);
} else {
return Container(
height: 100,
color: Colors.grey[300],
child: const Center(child: Text('Native ad loading...')),
);
}
}
@override
void dispose() {
_rewardedAd?.dispose();
_nativeAd?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('AdMob Screen'),
actions: [
IconButton(
icon: const Icon(Icons.payment),
onPressed: () {
Navigator.pushNamed(context, '/payment');
},
)
],
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
child: const Text('Show Reward Ad'),
onPressed: _isRewardedAdReady ? _showRewardedAd : null,
),
const SizedBox(height: 20),
_nativeAdWidget(),
const SizedBox(height: 20),
ElevatedButton(
child: const Text('Go to Payment Screen'),
onPressed: () {
Navigator.pushNamed(context, '/payment');
},
),
],
),
),
);
}
}
< /code>
Android build.gradle (level App): < /p>
import java.util.Properties
val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(keystorePropertiesFile.inputStream())
}
plugins {
id("com.android.application")
id("kotlin-android")
id("dev.flutter.flutter-gradle-plugin")
}
android {
namespace = "pname"
compileSdk = flutter.compileSdkVersion
ndkVersion = "27.0.12077973"
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
defaultConfig {
applicationId = "pname"
minSdk = 23
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
}
dependencies {
implementation("com.google.android.gms:play-services-ads:24.1.0")
// ... other dependencies
}
flutter {
source = "../.."
}
apply(plugin = "com.google.gms.google-services")
< /code>
mainactivity.kt:
package pname
import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
import com.google.android.gms.ads.MobileAds
class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
// Initialize the Mobile Ads SDK.
MobileAds.initialize(this) { initializationStatus ->
// Optional: handle initialization status.
}
// Register the native ad factory.
flutterEngine.platformViewsController
.registry
.registerViewFactory("adFactoryExample", NativeAdFactory(this))
}
}
< /code>
nativeadfactory.kt
package pname
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import io.flutter.plugin.platform.PlatformView
import io.flutter.plugin.platform.PlatformViewFactory
import io.flutter.plugin.common.StandardMessageCodec
// Factory to create native ad views.
class NativeAdFactory(private val context: Context) : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
override fun create(context: Context?, id: Int, args: Any?): PlatformView {
return NativeAdView(context)
}
}
// A simple PlatformView that inflates a native ad layout.
class NativeAdView(private val context: Context?) : PlatformView {
// Ensure you have a layout resource named "native_ad_layout.xml" in res/layout.
private val adView: View = LayoutInflater.from(context).inflate(R.layout.native_ad_layout, null)
override fun getView(): View = adView
override fun dispose() {}
}
< /code>
Я дважды проверил, что заводской идентификатор «AdfactoryExample» является согласованным между моим трепетом и нативным кодом. Вознагражденная реклама загружается и отображается правильно, но нативная реклама никогда не появляется. У кого -нибудь есть какие -либо предложения о том, что может привести к тому, что нативная реклама не загружается и не отображается?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79549467/native-ad-not-loading-in-flutter-app-despite-correct-factory-id-registration[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия