flutter - 在 sqflite 颤振中保存收到的推送通知
问题描述
我已被分配在 sqflite 中保存收到的前台和后台推送通知。我能够保存从 flutter_local_notification 包生成的前台通知,但无法在前台和后台保存从 firebase_messaging 收到的通知。
请指导我解决这个问题。
编辑-我已经通过添加SqflitePlugin.registerWith(registry!!.registrarFor("com.tekartik.sqflite.SqflitePlugin"));
上面的 FirebaseMessagingPlugin 解决了这个问题。下面是完整的代码
应用程序.kt
import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin
import io.flutter.view.FlutterMain
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService
import com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin
import com.tekartik.sqflite.SqflitePlugin
class Application : FlutterApplication(), PluginRegistrantCallback {
override fun onCreate() {
super.onCreate()
FlutterFirebaseMessagingService.setPluginRegistrant(this);
FlutterMain.startInitialization(this)
}
override fun registerWith(registry: PluginRegistry?) {
if (!registry!!.hasPlugin("io.flutter.plugins.firebasemessaging")) {
SqflitePlugin.registerWith(registry!!.registrarFor("com.tekartik.sqflite.SqflitePlugin"));
FirebaseMessagingPlugin.registerWith(registry!!.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
}
if (!registry!!.hasPlugin("com.dexterous.flutterlocalnotifications")) {
FlutterLocalNotificationsPlugin.registerWith(registry!!.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"));
}
MainActivity.kt
import io.flutter.embedding.android.FlutterActivity
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterFragmentActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}
然后在清单文件中注册 Application.kt
解决方案
您必须包含data
在您的消息中。在后台和前台进行解释。在onMessage
设置的末尾,分号之前,在.onData({write your logic here});
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
if (Firebase.apps.isEmpty) await Firebase.initializeApp();
print('Got a message whilst in the BACKGROUND or TERMINATED!');
if (message.notification != null) {
print(
'Message also contained a notification, with the following:\nTitle: ${message.notification?.title}\nBody: ${message.notification?.body}');
}
}
handleNotifications() async {
FirebaseMessaging messaging = FirebaseMessaging.instance;
NotificationSettings status = await messaging.getNotificationSettings();
if (!(status.authorizationStatus == AuthorizationStatus.authorized) ||
status.authorizationStatus == AuthorizationStatus.notDetermined) {
NotificationSettings settings = await messaging.requestPermission(
alert: true, announcement: false, badge: true, carPlay: false, provisional: true, sound: true);
if (settings.authorizationStatus == AuthorizationStatus.authorized) {
print('user granted permissions');
}
}
FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(badge: true, alert: true, sound: true);
FirebaseMessaging.onMessage.listen((message) async {
print(' Got a message whilst in the FOREGROUND! ');
if (message.notification != null) {
print(
'Message also contained a notification, with the following:\nTitle: ${message.notification?.title}\nBody: ${message.notification?.body}');
}
return;
}).onData((data) {
//do your sqflite or any other logic here
print('data from stream: ${data.data}');
});
FirebaseMessaging.onMessageOpenedApp.listen((message) async {
print('NOTIFICATION MESSAGE TAPPED');
print('Message data: ${message.data}');
if (message.notification != null) {
print(
'Message also contained a notification, with the following:\nTitle: ${message.notification?.title}\nBody: ${message.notification?.body}');
}
return;
}).onData((data) {
//do your sqflite or any other logic here
print('data from stream: ${data.data}');
});
FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
return;
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
handleNotifications();
runApp(MyApp());
}
推荐阅读
- audio-streaming - 无法将实时音频从麦克风流式传输到 PyAudio 中的远程端口
- python - Django如何过滤ManyToMany字段
- html - 尝试使用 get 从服务器获取数据并尝试在 Angular 组件的下拉框中使用它
- vuejs2 - 如何在没有 webpack 的情况下使用 Vue.Draggable CDN?
- azure - Azure AD B2C 是否支持目录中的多个用户池?
- python - 从python中的csv中删除多次出现
- python - 输入操作数 1 在其核心维度 0 中存在不匹配,具有 gufunc 签名 (n?,k),(k,m?)->(n?,m?)(大小 133896 与 133809 不同)
- java - 我需要帮助将所有对最短路径算法实现到给定的代码中
- mysql - 关于将用户名和域名与电子邮件地址分开的问题
- java - 在电子邮件应用 Java 中找不到主类