首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用云函数提示通知-颤振

用云函数提示通知-颤振
EN

Stack Overflow用户
提问于 2021-12-30 22:15:46
回答 1查看 701关注 0票数 0

我已经配置了我的颤音应用程序,以接收推送通知,当我尝试从FCM它正常工作,当应用程序在前台/背景/关闭时,我获得提示通知。

我还配置了通道和所有工作。

问题是,当我想使用Google函数发送一个自动通知时,我从来没有收到过提示通知。

下面是我的代码:

Main.Dart

代码语言:javascript
复制
void main() async{
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseMessaging.onBackgroundMessage(backgroundHandler);
  runApp(...) }

...

@override
  void initState() {
    LocalNotificationService.initialize(changeMessage);

    /// gives you the message on which user taps and it oened app from terminated state
    FirebaseMessaging.instance.getInitialMessage().then((event) {
      setState(() {
        widget.message = event!.data["route"];
      });
    });
    //foreground
    FirebaseMessaging.onMessage.listen((event) {
      print(event.notification?.body);
      print(event.notification?.title);
      LocalNotificationService.display(event);
    });

    // app in background but opened and user taps on notification
    FirebaseMessaging.onMessageOpenedApp.listen((event) {
      setState(() {
        widget.message = event!.data["route"];
      });
      /*final routeFromMessage =  event.data["route"];
      print(routeFromMessage);
      Navigator.of(context).pushNamed(routeFromMessage);*/
    });

  }

在“宣言”中我有:

代码语言:javascript
复制
<meta-data
                android:name="com.google.firebase.messaging.default_notification_channel_id"
                android:value = "myChannel"
                />

我创造了服务

代码语言:javascript
复制
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';

class LocalNotificationService{

  static final FlutterLocalNotificationsPlugin _notificationsPlugin= FlutterLocalNotificationsPlugin();

  static void initialize(Function updateRoute){
    final InitializationSettings initializationSettings =
    InitializationSettings(android: AndroidInitializationSettings("@mipmap/ic_launcher"));

    _notificationsPlugin.initialize(initializationSettings,onSelectNotification: (String? route) async{
    updateRoute(route);
    });
  }
 static void display(RemoteMessage remoteMessage) async{
    try {
      final id = DateTime.now().millisecondsSinceEpoch ~/1000;
      final NotificationDetails notificationDetails = NotificationDetails(
        android: AndroidNotificationDetails(
          "myChannel",
          "myChannel channel",
          importance: Importance.max,
          priority: Priority.high
        )
      );
      
      await _notificationsPlugin.show(
          id, remoteMessage.notification!.title, remoteMessage.notification!.body, notificationDetails,payload: remoteMessage.data["route"]);
    } on Exception catch (e) {
      print(e);
    }
 }
}

我的云功能:

代码语言:javascript
复制
const functions = require("firebase-functions");
const admin = require("firebase-admin");

admin.initializeApp(functions.config().functions);


exports.messageTrigger = functions.firestore.document('events/{likedId}').onCreate(async (snap,context) => { 
    console.log('----------------start function--------------------')
    const doc = snap.data()
    console.log(doc)
    const idFrom = doc.idFrom //chi mette like
    const idTo = doc.idTo //creatore evento
    const activity = doc.activity
    console.log(`Recupero il TO`)
    const res = await admin
      .firestore()
      .collection('users')
      .where('uid', '==', idTo)
      .get()
      .then(querySnapshot => {
        querySnapshot.forEach(userTo => {
          console.log(`Found user to: "${userTo.data().surname}"`)
          console.log(`Recupero il FROM`)
          if (userTo.data().pushToken) {
            // Get info user from (sent)

           admin
              .firestore()
              .collection('users')
              .where('uid', '==', idFrom)
              .get()
              .then(querySnapshot2 => {
                querySnapshot2.forEach(userFrom => {
                  console.log(`Found user from: ${userFrom.data().name}`)
                  const payload = {
                    notification: {
                      title: ...,
                      body: ...,
                      channel_id: "myChannel",
                    },
                    data: {route: ...}
                  }
                  // Let push to the target device
                 admin
                    .messaging()
                    .sendToDevice(userTo.data().pushToken, payload)
                    .then(response => {
                      console.log('Successfully sent message:', response)
                    })
                    .catch(error => {
                      console.log('Error sending message:', error)
                    })
                })
              })
          } else {
            console.log('Can not find pushToken target user')
          }
        })
      })
    return null
});
// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
//   functions.logger.info("Hello logs!", {structuredData: true});
//   response.send("Hello from Firebase!");
// });

我怎么能解决,

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-31 14:03:20

对于未来的读者来说,我在云函数中使用android_channel_id: "myChannel"而不是channel_id: "myChannel"来解决它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70537214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档