我是 Flutter 的新手,我想使用 Firebase 訊息傳遞。我想用firebase向手機發送訊息。我閱讀了檔案,但我很困惑。我應該怎么辦?
uj5u.com熱心網友回復:
這是我的 firebaseHandling 類:
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:get/get.dart';
import 'package:plasco/getx/user_controller.dart';
import 'package:plasco/model/payload.dart';
import 'package:plasco/service/page_handler.dart';
import 'package:plasco/service/plasco_request.dart';
class FirebaseMassagingHandler {
FirebaseMassagingHandler._();
static AndroidNotificationChannel channel = const AndroidNotificationChannel(
'com.example.plasco', // id
'plasco', // title
importance: Importance.high,
);
static FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
static Future<void> config() async {
FirebaseMessaging messaging = FirebaseMessaging.instance;
try {
UserController _userController = Get.put(UserController());
RemoteMessage newMessage = const RemoteMessage();
await messaging.requestPermission(
sound: true,
badge: true,
alert: true,
announcement: false,
carPlay: false,
criticalAlert: false,
provisional: false,
);
RemoteMessage? initialMessage =
await FirebaseMessaging.instance.getInitialMessage();
if (initialMessage != null) {
PayloadModel payloadRes = PayloadModel.fromJson(initialMessage.data);
firebasePageRouter(page: payloadRes.page!, id: payloadRes.id);
}
var initializationSettingsAndroid =
const AndroidInitializationSettings("ic_launcher");
var initializationSettings =
InitializationSettings(android: initializationSettingsAndroid);
flutterLocalNotificationsPlugin.initialize(
initializationSettings,
onSelectNotification: (value) async {
PayloadModel payloadRes = PayloadModel.fromJson(newMessage.data);
firebasePageRouter(page: payloadRes.page!, id: payloadRes.id);
},
);
await FirebaseMessaging.instance
.setForegroundNotificationPresentationOptions(
alert: true, badge: true, sound: true);
String? token = await FirebaseMessaging.instance.getToken();
_userController.token = token;
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
debugPrint("\n notification on onMessageOpenedApp function \n");
newMessage = message;
PayloadModel payloadRes = PayloadModel.fromJson(newMessage.data);
firebasePageRouter(
page: payloadRes.page!, id: payloadRes.id, goToMain: true);
});
FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
debugPrint("\n notification on onMessage function \n");
newMessage = message;
await _showNotification(message: newMessage);
});
} on Exception catch (e) {
debugPrint("$e");
}
}
static Future<void> _showNotification({RemoteMessage? message}) async {
RemoteNotification? notification = message!.notification;
AndroidNotification? androidNotification = message.notification!.android;
AppleNotification? appleNotification = message.notification!.apple;
if (notification != null &&
(androidNotification != null || appleNotification != null)) {
flutterLocalNotificationsPlugin.show(
notification.hashCode,
notification.title,
notification.body,
NotificationDetails(
android: AndroidNotificationDetails(
channel.id,
channel.name,
icon: "ic_launcher",
playSound: true,
enableVibration: true,
priority: Priority.high,
channelShowBadge: true,
importance: Importance.high,
),
iOS: const IOSNotificationDetails(
presentAlert: true,
presentBadge: true,
presentSound: true,
),
),
payload: message.data.toString(),
);
}
PlascoRequests().initReport();
}
static Future<void> firebaseMessagingBackground(RemoteMessage message) async {
await Firebase.initializeApp();
debugPrint("message data: ${message.data}");
}
}
你必須創建這個函式:
Future firebaseInit() async {
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(
FirebaseMassagingHandler.firebaseMessagingBackground,
);
if (!kIsWeb) {
FirebaseMassagingHandler.flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()!
.createNotificationChannel(FirebaseMassagingHandler.channel);
}
}
之后,您必須像這樣呼叫這些函式:
@override
void initState() {
firebaseInit().whenComplete(() {
FirebaseMassagingHandler.config();
});
super.initState();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507513.html
標籤:Google Cloud Collective 扑 火力基地 颤振布局 firebase-云消息传递
