Android应用关闭时如何通过Firebase获取推送通知?
FCM 后台通知接收问题排查与解决
我的Android应用在前台/打开状态下FCM通知正常,但关闭应用后无法接收,想实现类似Telegram的后台通知效果。已尝试开启自启动,想问能不能不用自启动解决?怀疑是每次重启刷新Token导致通知无法送达,相关代码如下:
public App() { InitializeComponent(); MainPage = new MainPage(); CrossFirebasePushNotification.Current.Subscribe("all"); CrossFirebasePushNotification.Current.OnTokenRefresh += Current_OnTokenRefresh; } private void Current_OnTokenRefresh(object source, FirebasePushNotificationTokenEventArgs e) { System.Diagnostics.Debug.WriteLine($"Token: {e.Token}"); }
问题分析与解决方案
Token 同步是核心问题:FCM Token 不会每次重启都刷新,仅在设备重置、应用卸载重装、系统安全设置变更等场景触发刷新。你当前的代码只打印Token但未同步到后端服务器——如果后端仍用旧Token发通知,自然收不到。必须确保首次启动获取Token和Token刷新时,都将最新值上报并替换后端的旧记录。
无需自启动实现后台通知:Android 中FCM依赖Google Play Services的系统通道推送,只要配置正确,无需自启动也能接收后台通知,需检查以下项:
- 完整配置Firebase服务:AndroidManifest.xml中需正确声明
com.google.firebase.messaging.FirebaseMessagingService的自定义实现,重写OnMessageReceived方法处理数据消息(后台时系统会自动处理纯通知消息)。 - 区分通知/数据消息:纯通知消息由系统直接展示,数据消息需通过自定义MessagingService在后台接收处理。
- 适配国产ROM管控:小米、华为等ROM有后台限制,无需开自启动,但需引导用户将应用加入「后台保护白名单」,这是系统层面限制,无法完全绕过。
- 完整配置Firebase服务:AndroidManifest.xml中需正确声明
代码优化建议:
- 首次启动主动获取并上报Token:
protected override async void OnStart() { base.OnStart(); var token = await CrossFirebasePushNotification.Current.GetTokenAsync(); if (!string.IsNullOrEmpty(token)) { // 上报Token到你的后端服务器 // await YourBackendService.UpdateDeviceToken(token); } } - 刷新Token时同步到后端:
private void Current_OnTokenRefresh(object source, FirebasePushNotificationTokenEventArgs e) { System.Diagnostics.Debug.WriteLine($"Token: {e.Token}"); // 同步新Token到后端 // YourBackendService.UpdateDeviceToken(e.Token); }
- 首次启动主动获取并上报Token:
内容的提问来源于stack exchange,提问作者tomas shelby
相关产品推荐
相关产品推荐

