这是在使用Firebase消息传递推送通知时显示的错误...
Error: Exactly one of topic, token or condition is required
at FirebaseMessagingError.FirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:42:28)
Error: Exactly one of topic, token or condition is required
at FirebaseMessagingError.FirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:42:28)
at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:88:28)
at new FirebaseMessagingError (/srv/node_modules/firebase-admin/lib/utils/error.js:254:16)
at Object.validateMessage (/srv/node_modules/firebase-admin/lib/messaging/messaging-types.js:46:15)
at Messaging.send (/srv/node_modules/firebase-admin/lib/messaging/messaging.js:208:27)
at sendNotification (/srv/index.js:227:18)
at exports.onCreateActivityFeedItem.functions.firestore.document.onCreate (/srv/index.js:197:13)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
这是Firebase消息的js代码
exports.onCreateActivityFeedItem = functions.firestore
.document('/feed/{userId}/feedItems/{activityFeedItem}')
.onCreate(async (snapshot, context) => {
console.log('Activity Feed Item Created', snapshot.data());
这个日志是打印出来的。。。
// 1) Get user connected to the feed,
//send notification if they have token
const userId = context.params.userId;
const userRef = admin.firestore().doc(`users/${userId}`);
const doc = await userRef.get();
// 2) Once we have user check if they have notification item
const androidNotificationToken = doc.data().androidNotificationToken;
const createdActivityFeedItem = snapshot.data();
if (androidNotificationToken) {
// send notification
sendNotification(androidNotificationToken, createdActivityFeedItem);
} else {
console.log('User have no token, cant send notification');
}
function sendNotification(androidNotificationToken, activityFeedItem) {
let body;
// switch bod y value base on notification item (like, comment or follow)
switch (activityFeedItem.type) {
case 'comment':
body = `${activityFeedItem.username} replied: ${activityFeedItem.commentData}`;
break;
case 'like':
body = `${activityFeedItem.username} liked your post.`;
case 'follow':
body = `${activityFeedItem.username} followed you.`;
default:
break;
}
// 4) create message for push notification
const message = {
notification: { body },
token: { androidNotificationToken },
data: { recipient: userId }
};
// 5) send message with admin.messaging
admin
.messaging()
.send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
}
});
这是颤振代码
configurePushNotifications() {
final GoogleSignInAccount user = googleSignIn.currentUser;
if (Platform.isIOS) {
getIOSPermission();
}
_firebaseMessaging.getToken().then((token) {
print('Token received: $token');
usersRef.document(user.id).updateData({
'androidNotificationToken': token,
});
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print('Message is : $message');
final String recipientId = message['data']['recipient'];
final String body = message['notification']['body'];
if (recipientId == user.id) {
print('Notification Shown');
SnackBar snackbar = SnackBar(
content: Text(
body,
overflow: TextOverflow.ellipsis,
),
);
_scaffoldKey.currentState.showSnackBar(snackbar);
}
print('Notification not shown');
},
// onResume: (Map<String, dynamic> message) async {},
// onLaunch: (Map<String, dynamic> message) async {},
);
});
}
获得ios权限,但我正在使用android手机进行调试
getIOSPermission() {
_firebaseMessaging.requestNotificationPermissions(
IosNotificationSettings(
alert: true,
badge: true,
sound: true,
),
);
_firebaseMessaging.onIosSettingsRegistered.listen((settings) {
print('Settings registered: $settings');
});
}
onCreateActivityFeedItem活动源项已创建{commentData:'ab to man ja',mediaUrl:'https://firebasestorage.googleapis.com/v0/b/chautari-ccfba.appspot.com/o/post_dcc8a054-a972-4b88-8d3f-4802de74393a.jpg?alt=media
错误似乎来自JavaScript代码。更准确地说,这似乎是错的:
const message = {
notification: { body },
token: { androidNotificationToken },
data: { recipient: userId }
};
如果您查看发送消息时的Firebase留档,它包含以下示例:
var message = {
data: {
score: '850',
time: '2:45'
},
token: registrationToken
};
您正在将令牌包装在一个额外的{}
中,这是不正确的,因为它会导致这个JSON:令牌:{androidNotificationToken:“ValueOfaDroidNotificationToken”}
。
更有可能需要:
const message = {
notification: { body },
token: androidNotificationToken,
data: { recipient: userId }
};
我也在尝试使用node。js和firebase管理员向iOS设备发送推送通知。然而,我遇到了这个错误: 错误发送消息:{错误:请求包含一个无效的参数。在Firebase MessagingError。错误(本机)在Firebase MessagingError。Firebase Error[作为构造函数](/user_code/node_modules/fire base-admin/lib/ut
在我的Android应用程序中,我收到使用Firebase发送的消息,问题不是所有消息都到达,有时消息到达非常慢。 在我的服务器端,我跟踪我发送到FCM的消息,我总是收到成功:来自FCM的1个响应,仍然有我在Android应用程序中没有收到的消息。 我认为FCM消息日志在上面描述的情况下会有很大的帮助,但我不确定是否存在此选项。 有办法浏览Firebase消息日志吗?
在我们的项目中,我们使用Firebase云消息传递来进行推送通知,我们遇到了消息重复的问题。我们过程如下所示: xamarin.firebase.ios.CloudMessaging 3.1.2 xamarin.firebase.ios.instanceID 3.2.1 xamarin.firebase.ios.core 5.1.3 订阅用户主题推荐 发送主题订阅者请求的通知 null 但是,当用
我在Spring引导中编写了这段代码(我使用的是Intellij IDE)。在代码androidFcmUrl="https://fcm.googleapis.com/fcm/send". androidFcmKey=我的服务器密钥. deviceToken=设备ID。 我正在获取状态500内部服务器错误。 2018-11-28 17:42:47.712错误15292---[nio-8088-exe
有没有办法在Firebase控制台中重新生成FCM(云消息部分)的API Key?该密钥不可编辑,与Google API控制台中自动生成的密钥不同。由于这个错误的配置,我总是从FCM得到未经授权的401...
我使用应用服务器通过Firebase Cloud Messaging发送消息。Firebase控制台不会列出由应用服务器发送的此类消息。当我使用Firebase控制台直接发送消息时,它会显示一些对其自身消息的分析。 问题是,当我使用应用服务器时,如何访问消息统计信息?