android - 应用程序被杀死时没有触发 FCM 通知
问题描述
当应用程序处于后台或前台时,FCM 通知对我有效,但在应用程序被终止时无效。
这是我的 FCM 配置代码:
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
print("Handling a background message: ${message.messageId}");
}
class CategoriesScreen extends StatefulWidget {
static const routeName = '/view-cateogries';
_CategoriesScreenState createState() => _CategoriesScreenState();
}
class _CategoriesScreenState extends State<CategoriesScreen> {
Future _screenFuture;
void initState() {
_saveDeviceToken(FirebaseMessaging.instance);
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
super.initState();
}
我已经在网上和 stackoverflow 上阅读了许多文章。例如,其中一项建议是禁用电池保护程序。我试过了,但没有运气。有什么我想念的想法吗?
我正在使用 firebase-messaging 版本^10.0.2
解决方案
看起来您正在调用有状态小部件FirebaseMessaging.onBackgroundMessage()
内部的方法initState()
,这是不允许的,如文档中所述:
由于处理程序在您的应用程序上下文之外在其自己的隔离中运行,因此无法更新应用程序状态或执行任何 影响 UI 的逻辑。但是,您可以执行诸如 HTTP 请求、IO 操作(更新本地存储)、与其他插件通信等逻辑。
您应该在之前设置后台消息处理程序runApp()
:
/// Define a top-level named handler which background/terminated messages will
/// call.
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
// If you're going to use other Firebase services in the background, such as Firestore,
// make sure you call `initializeApp` before using other Firebase services.
await Firebase.initializeApp();
print("Handling a background message: ${message.messageId}");
}
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// Initialize Firebase App
await Firebase.initializeApp();
// Set the background messaging handler early on, as a named top-level function
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
// Run your app
runApp(HomeScreen());
}
检查此以获取详细信息。
推荐阅读
- c++ - 使对象的向量相互独立
- azure - 如何使用 html、css 更改 Azure APIM 开发人员门户(使用 paperbits)布局页眉、正文、页脚样式
- mongodb - 如何连接到 Kubernetes 上的 MongoDB 副本集
- github - Github 认证失败
- swift - AVCapturePhotoOutput capturePhotoWithSettings:delegate: No active and enabled video connection'
- python - Python Kivy 库添加小部件
- python - Python pyreverse 可以为函数生成 UML 图吗?
- javascript - 宽度不能再扩大并与 CSS 中的其他宽度一起调整
- php - 如何在不丢失插件数据的情况下通过 ZIP 文件更新 WordPress 插件?
- javascript - 在 react native 中使用 createMaterialTopTabNavigator 时无法导航到另一个页面