【发布时间】: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