【发布时间】:2022-01-19 01:29:33
【问题描述】:
我的这个云函数在 iOS 中正常工作,它会在创建新消息时发送 Firebase 推送通知:
export const sendChatNotification = functions.firestore.document('chatrooms/{chatroomId}/chats/{chatId}').onCreate(async (snap, ctx) => {
const token = snap.get('sendToDeviceToken');
const sender = snap.get('fullSenderName');
const body = snap.get('message');
var tokens = [];
tokens.push(token);
const payload = {
notification: {
title: sender,
body: body,
},
android: {
notification: {
channelId: "roofdeck_default",
click_action: 'FLUTTER_NOTIFICATION_CLICK',
title: sender,
body: body,
}
},
apns: {
headers: {
"apns-push-type": "alert"
},
payload: {
aps: {
category: "FLUTTER_NOTIFICATION_CLICK"
}
},
},
data: {
postID: snap.id,
type: "POST_TAG",
},
tokens: tokens
}
if (tokens.length > 0) {
await fcm.sendMulticast(payload);
}
});
我以为问题出在 Android 通知通道,但今天我能够按照本教程生成它:Android Push Notification
我已在 AndroidManifes.xml 中添加以下行:
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="roofdeck_default"/>
我还创建了本地通知服务(使用 Flutter Local Notifications for Foreground 模式)。
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class LocalNotificationService {
static final FlutterLocalNotificationsPlugin _notificationsPlugin =
FlutterLocalNotificationsPlugin();
static void initialize() {
final InitializationSettings initializationSettings =
InitializationSettings(
android: AndroidInitializationSettings("@mipmap/ic_launcher"),
);
_notificationsPlugin.initialize(initializationSettings);
print('Initialized Notifications');
}
static void display(RemoteMessage message) async {
try {
final id = DateTime.now().millisecondsSinceEpoch / 1000;
final NotificationDetails notificationDetails = NotificationDetails(
android: AndroidNotificationDetails(
"roofdeck_default",
"roofdeck_channel",
channelDescription: "RoofDeck Main Channel",
importance: Importance.max,
priority: Priority.high,
),
);
await _notificationsPlugin.show(
id.toInt(),
message.notification.title,
message.notification.body,
notificationDetails,
);
} catch (e) {
print('Channel Error: $e');
}
}
}
同时在 Main 中的应用的 Init 上初始化 Local Notifications:
Future<void> backgroundHandler(RemoteMessage message) async {
print(message.data.toString());
print(message.notification.title);
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
LocalNotificationService.initialize();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(backgroundHandler);
runApp(MyApp());
}
现在我尝试使用我拥有的 Android 通道从 Firebase Cloud Messaging Control 进行测试,它运行良好,但是自动云功能在 Android 中不起作用。
你知道什么是错的吗?
【问题讨论】:
-
您是否创建
AndroidNotificationChannel并使用resolvePlatformSpecificImplementation的本地通知插件来设置此频道? -
嘿,彼得,你所看到的就是我所拥有的,你有教程或其他什么吗?我认为只是在初始化就足够了
-
Check out this,我遵循了这个指南,它对我有用。
-
我是否在主文件中添加了这一行: const AndroidNotificationChannel channel = AndroidNotificationChannel( 'high_importance_channel', // id 'High Importance Notifications', // 标题描述: 'This channel is used for important Notifications.', // 描述重要性:Importance.max, playSound: true, );最终 FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
-
未来
_firebaseMessagingBackgroundHandler(RemoteMessage message) async { await Firebase.initializeApp(); print('一条bg消息刚刚出现:${message.messageId}'); } Future main() async { WidgetsFlutterBinding.ensureInitialized(); //LocalNotificationService.initialize();等待 Firebase.initializeApp();
标签: firebase flutter google-cloud-functions