Flutter Android 12:如何在系统默认启动页显示Admob开屏广告
Android 12 Flutter 系统启动页集成Admob开屏广告方案
核心思路
直接在Android原生系统启动页中集成Admob开屏广告,通过原生代码控制广告展示逻辑,确保广告结束后再进入Flutter主页面,避免广告提前跳转。
步骤1:修改Android启动页布局
找到Android项目中res/layout/launch_screen.xml(或对应启动页布局文件),添加Admob广告容器:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/your_splash_background"> <!-- 原有启动页元素(如应用图标) --> <ImageView android:id="@+id/app_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@mipmap/ic_launcher" /> <!-- Admob开屏广告容器 --> <com.google.android.gms.ads.AdView android:id="@+id/splash_ad_view" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" ads:adSize="SMART_BANNER" ads:adUnitId="你的开屏广告ID" /> </RelativeLayout>
步骤2:配置Admob依赖与权限
在Android项目的app/build.gradle中添加Admob依赖:
dependencies { // 其他依赖 implementation 'com.google.android.gms:play-services-ads:22.4.0' }
在AndroidManifest.xml中添加Admob应用ID和网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <application> <!-- 其他配置 --> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/> </application>
步骤3:修改启动页Activity逻辑
找到负责展示启动页的SplashActivity(若无则新建),实现广告加载与展示控制:
import android.content.Intent; import android.os.Bundle; import android.os.Handler; import androidx.appcompat.app.AppCompatActivity; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.interstitial.InterstitialAd; import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback; public class SplashActivity extends AppCompatActivity { private InterstitialAd mInterstitialAd; private static final long SPLASH_TIMEOUT = 3000; // 广告加载超时时间 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.launch_screen); // 加载开屏广告 loadInterstitialAd(); // 超时兜底:广告加载失败时直接进入主页面 new Handler().postDelayed(() -> { if (mInterstitialAd == null) { startMainActivity(); } }, SPLASH_TIMEOUT); } private void loadInterstitialAd() { AdRequest adRequest = new AdRequest.Builder().build(); InterstitialAd.load( this, "你的开屏广告ID", // 使用Admob插屏广告ID作为开屏广告 adRequest, new InterstitialAdLoadCallback() { @Override public void onAdLoaded(InterstitialAd interstitialAd) { mInterstitialAd = interstitialAd; showAd(); } @Override public void onAdFailedToLoad(com.google.android.gms.ads.LoadAdError loadAdError) { mInterstitialAd = null; startMainActivity(); } } ); } private void showAd() { if (mInterstitialAd != null) { mInterstitialAd.show(SplashActivity.this); // 监听广告关闭事件,确保广告结束后再进入主页面 mInterstitialAd.setFullScreenContentCallback(new com.google.android.gms.ads.FullScreenContentCallback() { @Override public void onAdDismissedFullScreenContent() { super.onAdDismissedFullScreenContent(); startMainActivity(); } @Override public void onAdFailedToShowFullScreenContent(com.google.android.gms.ads.AdError adError) { super.onAdFailedToShowFullScreenContent(adError); startMainActivity(); } }); } else { startMainActivity(); } } private void startMainActivity() { Intent intent = new Intent(SplashActivity.this, MainActivity.class); startActivity(intent); finish(); } }
步骤4:调整Flutter端配置
移除Flutter代码中所有自定义启动页相关逻辑,确保MainActivity为Flutter应用的默认入口。
关键注意事项
- 测试阶段使用Admob官方测试ID,避免触发广告政策违规。
- Android 12需确保应用已适配目标SDK版本,避免权限或启动模式冲突。
- 务必保留超时逻辑,防止网络异常导致应用卡在启动页。
内容的提问来源于stack exchange,提问作者hardik koladiya
相关产品推荐
相关产品推荐

