【问题标题】:Unable to recieve Cloud Notifiations in Android Flutter在 Android Flutter 中无法接收 Icloud 通知
【发布时间】: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


【解决方案1】:

嘿,只是想让你知道,问题似乎是 Payload 的工作方式与我在这个 Android 部分的工作方式不同:

机器人:{ 通知: { channelId: "roofdeck_default", click_action: 'FLUTTER_NOTIFICATION_CLICK', 标题:发件人, 身体:身体, } },

而不是channelId为channel_id。

亲切的问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多