Самым неприятным моментом является то, что я могу успешно отправлять тестовые уведомления в свое действующее приложение из инструмента кампании консоли Firebase. Это доказывает, что мое клиентское приложение Flutter, файл google-services.json и ключи подписи приложения (SHA-1) настроены правильно. Проблема строго изолирована от среды выполнения моей облачной функции на стороне сервера.
Вот код функции для addJanazah:
Код: Выделить всё
export const addJanazah = onCall(async (request) => {
// ... (code to validate request and write to Firestore) ...
// This part works successfully.
// This is the part that fails:
try {
const payload = {
notification: {
title: `New Janazah`,
body: `A new Janazah has been scheduled.`
},
data: { 'screen': 'map_page' }
};
console.log("Attempting to send notification with payload:", JSON.stringify(payload));
await getMessaging().sendToTopic('new_janazah_notifications', payload);
console.log("Successfully sent notification.");
} catch (messagingError) {
// This is the error I am seeing in my production logs:
console.warn("Warning: Could not send notification.", messagingError);
}
return { success: true };
});
Код: Выделить всё
Warning: Could not send notification. FirebaseMessagingError: An unknown server error was returned. Raw server response: "
Not Found
Not Found
Error 404
". Status code: 404.
at createFirebaseError (/workspace/node_modules/firebase-admin/lib/messaging/messaging-errors-internal.js:57:12)
at /workspace/node_modules/firebase-admin/lib/messaging/messaging-api-request-internal.js:82:75
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async file:///workspace/index.js:180:9
at async /workspace/node_modules/firebase-functions/lib/common/providers/https.js:467:26 {
errorInfo: {
code: 'messaging/unknown-error',
message: 'An unknown server error was returned. Raw server response: "\n' +
'\n' +
'Not Found\n' +
'\n' +
'\n' +
'\n' +
'Not Found\n' +
'Error 404\n' +
'\n' +
'\n' +
'". Status code: 404.'
},
codePrefix: 'messaging'
}
Я тщательно проверил каждую стандартную конфигурацию, и ошибка все еще сохраняется. Я проверил:
- API включены: API Firebase Cloud Messaging API и Cloud Pub/Sub API подтверждены как «включены» в Google Cloud Console для моего проекта Firebase. Я также попытался отключить, а затем снова включить оба API, чтобы принудительно выполнить повторную подготовку, без каких-либо изменений.
- Разрешения IAM: я предоставил роли владельца, администратора Firebase и издателя Pub/Sub обеим следующим учетным записям служб:
Идентификатор времени выполнения функции (учетная запись службы вычислений по умолчанию): 581XXXXX-compute@developer.gserviceaccount.com - Учетная запись службы Firebase Admin SDK: firebase-adminsdk-fbsvc@XXXXX.iam.gserviceaccount.com
- У меня есть 1 ключ API по умолчанию (тот, который автоматически создается Firebase для Android и настраивается в google-services.json
- и еще один специальный ключ API, который я создал для Maps SDK и настроил в AndroidManifest.xml таким образом
Код: Выделить всё
Подробнее здесь: [url]https://stackoverflow.com/questions/79858191/firebase-sendtotopic-fails-with-404-but-console-notifications-work-and-all-perm[/url]
Мобильная версия