【问题标题】:Why is my cloud functions for push notification not working properly为什么我的推送通知云功能无法正常工作
【发布时间】:2020-12-01 04:08:46
【问题描述】:

在我的颤振应用程序中,我正在尝试使用云功能配置推送通知,但我遇到了一个问题,即我的 firebase 控制台按预期发送基于云功能触发器的通知,但我无法在我的安卓模拟器。我在控制台记录了消息,我注意到 Firebase 控制台正在成功发送通知消息,但我没有在我的模拟器上收到消息。当我尝试在主页上打印消息时,我得到了这个: 在消息:{body:null,title:null},数据:{recipient:sjjsjnhhaksdijadjifjhhabdbfhakdjf}},我的模拟器也没有按预期显示带有消息的小吃店。这些是我下面的代码。请问我需要帮助。

this part of the cloud function code to listens to new document on
the`activity path and to send notification 

exports.onCreateActivityNotification = functions.firestore
.document('/activities/{userId}/userActivities/{userActivities}')
 .onCreate(async (snapshot, context) => {
 console.log('activity notification created', snapshot.data());
 //getting user connected to the activity
 const userId = context.params.userId;
 const createdActivityItem = snapshot.data();
 const usersRef = admin.firestore().doc(`users/${userId}`);
 const doc = await usersRef.get();
 const androidNotificationToken = 
 doc.data().androidNotificationToken;
  //checks if user has an androidnotification token
 if(androidNotificationToken){
 //sennds notification if users has a token
   sendNotification(androidNotificationToken, createdActivityItem )
  } else {
   console.log('no notification token');
  }
   //function for sending notification
 function sendNotification(androidNotificationToken, userActivities)
  {
  let body;
     switch (userActivities){
      case userActivities.comment !== null:
        body = `${userActivities.fromUserId} commented  : 
      ${userActivities.comment}`
        break;
        case userActivities.comment === null:
        body = `${userActivities.fromUserId} liked your punch`
        break;
        default: 
         break;
        }
     //creates message for push notification
    const message = {
    notification: {body: body},
    token: androidNotificationToken,
    data: {recipient: userId},
    };
    //sends message with admin.messaging()
    admin
   .messaging()
   .send(message)
   .then(response => {
   return console.log('message sent', response);
    }).catch(error =>{
    console.log('error sending message', error);
   })
 }

});

//code for the home page. This is the part of the code to display the 
// notification on the emulator  

//configuring the notification
_configureNotification() {
final String currentUserId =
    Provider.of<UserData>(context, listen: false).currentUserId;
if (Platform.isIOS) getIosPermission();
_firebaseMessaging.getToken().then((token) => {
      print('firebase messaging token: $token'),
    //associating device token with current user
      usersRef
          .document(currentUserId)
          .updateData({'androidNotificationToken': token})
    });
//displaying notification from cloud function
    _firebaseMessaging.configure(
  onMessage: (Map<String, dynamic> message) async {
    print('on message: $message\n');
    final String recipientId = message['data']['recipient'];
    final String body = message['notification']['body'];
     //checking if recipientId is equal to currentuserId before 
      //sending notification 
    if (recipientId == currentUserId) {
      print('notification shown');
      Flushbar(
        margin: EdgeInsets.all(8),
        // flushbarPosition: FlushbarPosition.TOP,
        title: widget.user.name,
        messageText: Column(
          children: <Widget>[
            RichText(
              text: TextSpan(children: [
                TextSpan(
                    text: body,
                    style: TextStyle(
                        fontSize: 14,
                        // fontWeight: FontWeight.bold,
                        color: Colors.black)),
              ]),
              overflow: TextOverflow.ellipsis,
            ),
            SizedBox(
              height: 30,
            ),
          ],
        ),
        icon: Icon(Icons.info_outline, size: 28.0, color: 
      Colors.blue),
        duration: Duration(seconds: 3),
        leftBarIndicatorColor: Colors.blue,
      )..show(context);
    }
    print('notification not shown');
  },
);

}

//getting ios permission
getIosPermission() {
_firebaseMessaging.requestNotificationPermissions(
    IosNotificationSettings(alert: true, sound: true, badge: true));
_firebaseMessaging.onIosSettingsRegistered.listen((settings) {
  print('settings registered: $settings');
});

}

【问题讨论】:

  • 请格式化您添加到问题中的代码。请尝试让自己置身于愿意花时间帮助您的人的位置:阅读此代码非常困难,并且不鼓励我们帮助您...
  • 谢谢您,先生。我已经格式化了。
  • 没有缩进很难阅读
  • 感谢大家的建议,我很抱歉。这是我第一次提出问题,下次会遵循每一个建议。

标签: firebase flutter push-notification google-cloud-functions firebase-cloud-messaging


【解决方案1】:

https://stackoverflow.com/a/23443757/9323100

看看这个答案!模拟器并不总是收到通知。也可以在设备上试一试以绝对确定

【讨论】:

  • 感谢您的贡献,但我尝试了三星 A30 手机以及三星和华为平板电脑,但仍然无法正常工作。
猜你喜欢
  • 2016-06-19
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多