为PWA Builder生成的TWA应用集成AdMob:找不到AppCompatActivity的问题
为TWA应用集成AdMob的正确步骤
TWA(Trusted Web Activity)基于Chrome Custom Tab加载PWA,和普通Android App结构不同,没有默认的AppCompatActivity,你可以通过以下步骤完成AdMob集成:
1. 添加AdMob依赖
在Module级别的build.gradle(通常是app/build.gradle)中添加AdMob SDK依赖:
dependencies { implementation 'com.google.android.gms:play-services-ads:22.6.0' }
2. 配置AdMob应用ID
在AndroidManifest.xml的<application>标签内添加元数据,填入你的AdMob应用ID:
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="你的AdMob应用ID"/>
3. 修改TWA启动类以支持AdMob
Bubblewrap生成的TWA项目默认入口是TwaLauncherActivity,它继承自普通Activity,你需要修改它继承AppCompatActivity,并在这里处理广告逻辑:
修改TwaLauncherActivity.java
找到main/java/app.app-name.twa/TwaLauncherActivity.java,按以下方式调整:
import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.MobileAds; import com.google.android.gms.ads.interstitial.InterstitialAd; import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback; import com.google.android.gms.ads.FullScreenContentCallback; import com.google.android.gms.ads.AdError; import androidx.appcompat.app.AppCompatActivity; public class TwaLauncherActivity extends AppCompatActivity { private InterstitialAd mInterstitialAd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化AdMob SDK MobileAds.initialize(this, initializationStatus -> {}); // 加载插屏广告 loadInterstitialAd(); } private void loadInterstitialAd() { AdRequest adRequest = new AdRequest.Builder().build(); InterstitialAd.load(this, "你的插屏广告单元ID", adRequest, new InterstitialAdLoadCallback() { @Override public void onAdLoaded(@NonNull InterstitialAd interstitialAd) { mInterstitialAd = interstitialAd; // 设置广告关闭回调,关闭后启动TWA mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() { @Override public void onAdDismissedFullScreenContent() { launchTwa(); } @Override public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) { launchTwa(); } }); // 展示广告 mInterstitialAd.show(TwaLauncherActivity.this); } @Override public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { mInterstitialAd = null; // 广告加载失败,直接启动TWA launchTwa(); } }); } private void launchTwa() { // 执行原有TWA启动逻辑 TwaLauncher launcher = TwaLauncher.create(this); launcher.launch(getLaunchingUrl()); finish(); } }
4. 配置Activity兼容主题
在AndroidManifest.xml中,给TwaLauncherActivity设置兼容AppCompatActivity的主题,比如:
<activity android:name=".TwaLauncherActivity" android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar"> <!-- 保留原有配置项 --> </activity>
关键注意事项
- 优先测试:使用AdMob官方提供的测试广告单元ID验证功能,避免因账号审核、广告填充问题导致广告不显示
- 不要在Application类处理广告:广告依赖Activity生命周期,Application类仅用于全局初始化,无法承载广告展示逻辑
- 版本兼容:确保项目的
compileSdkVersion和targetSdkVersion至少为33,与AdMob SDK版本匹配
内容的提问来源于stack exchange,提问作者PedritoG
相关产品推荐
相关产品推荐

