如何为Trusted Web Activity(TWA)应用添加推送通知
TWA应用添加推送通知的两种方案解决方案
我来帮你解决TWA应用添加推送通知的问题,针对你提到的两个方案分别梳理:
一、Web Push方案:让Chrome自动打开TWA而非网站
你担心的Chrome识别问题,核心在于网站与TWA的绑定关系——只要你在创建TWA时正确配置了Digital Asset Links,Chrome就能关联到你的应用:
- 原理:Digital Asset Links会在你的网站和TWA应用之间建立可信关联,当Web Push通知到达时,Chrome会检查设备上是否已安装关联的TWA应用。如果已安装,就会直接唤起应用;如果未安装,才会打开网站。
- 验证与配置:确保你的网站根目录下存在
.well-known/assetlinks.json文件,且内容正确关联了TWA的包名和签名指纹;同时TWA的AndroidManifest.xml中也配置了对应的asset_statementsmeta-data。 - 实现步骤:按照标准Web Push流程在你的网站上实现Service Worker注册、推送订阅逻辑,后端发送通知时,Chrome会自动完成路由,无需额外修改TWA代码。
二、Android Push方案:解决TWA无Activity的问题
TWA项目并非真的没有Activity,只是默认使用了库自带的TwaLauncherActivity,你可以通过自定义Activity来集成Android推送(比如FCM):
创建自定义Activity
在你的Android项目中新建一个Activity类,继承自com.google.androidbrowserhelper.trusted.TwaLauncherActivity:public class CustomTwaActivity extends TwaLauncherActivity { private static final String TAG = "CustomTwaActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 在这里添加推送初始化代码,比如FCM的初始化 FirebaseMessaging.getInstance().getToken() .addOnCompleteListener(task -> { if (!task.isSuccessful()) { Log.w(TAG, "Fetching FCM registration token failed", task.getException()); return; } // 获取到token后可以发送到后端保存 String token = task.getResult(); Log.d(TAG, "FCM Registration Token: " + token); }); } }修改AndroidManifest.xml
将原来的启动Activity替换为你自定义的Activity,并确保保留TWA所需的配置:<activity android:name=".CustomTwaActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- TWA核心配置 --> <meta-data android:name="android.support.customtabs.trusted.DEFAULT_URL" android:value="https://你的网站地址" /> </activity>集成FCM推送
- 添加FCM依赖到项目的build.gradle文件中;
- 下载并配置google-services.json文件;
- 创建
FirebaseMessagingService子类,处理推送消息的接收与展示:public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { // 构建并展示自定义通知 NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "TWA_PUSH_CHANNEL") .setSmallIcon(R.drawable.ic_notification) .setContentTitle(remoteMessage.getNotification().getTitle()) .setContentText(remoteMessage.getNotification().getBody()) .setPriority(NotificationCompat.PRIORITY_HIGH) .setAutoCancel(true); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(1001, builder.build()); } }
方案选择建议
- 如果希望一次实现同时支持网站和TWA,优先选Web Push,无需额外Android代码开发;
- 如果需要深度集成Android系统推送能力(比如自定义通知样式、后台消息处理、离线推送等),则选择Android Push方案。
内容的提问来源于stack exchange,提问作者Mehdi Azizi
相关产品推荐
相关产品推荐

