Saya mencoba menggunakan firebase-admin di dalam fungsi cloud firebase untuk mengirim pesan melalui firebase cloud messages (FCM).
Saat membaca dokumentasi tertulis
Untuk menggunakan Admin FCM API, Anda harus terlebih dahulu mengikuti langkah-langkah di Menambahkan Firebase Admin SDK ke Server Anda.
Tapi menurut saya ini tidak diperlukan karena saya hanya menggunakan fungsi cloud?
Bagaimanapun, semuanya berfungsi hingga admin.messaging().send
di mana saya mendapatkan kesalahan ini:
Error sending message: { Error: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
at FirebaseMessagingError.Error (native)
at FirebaseMessagingError.FirebaseError [as constructor] (/user_code/node_modules/firebase-admin/lib/utils/error.js:39:28)
at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/user_code/node_modules/firebase-admin/lib/utils/error.js:85:28)
at new FirebaseMessagingError (/user_code/node_modules/firebase-admin/lib/utils/error.js:241:16)
at Function.FirebaseMessagingError.fromServerError (/user_code/node_modules/firebase-admin/lib/utils/error.js:271:16)
at FirebaseMessagingRequestHandler.handleHttpError (/user_code/node_modules/firebase-admin/lib/messaging/messaging-api-request.js:125:50)
at /user_code/node_modules/firebase-admin/lib/messaging/messaging-api-request.js:113:23
at process._tickDomainCallback (internal/process/next_tick.js:135:7)
errorInfo:
{ code: 'messaging/invalid-apns-credentials',
message: 'Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.' },
codePrefix: 'messaging' }
Ini adalah kode sumber fungsi cloud saya
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp(functions.config().firebase)
const firestore = admin.firestore()
firestore.settings({timestampsInSnapshots: true})
exports.notification = functions.firestore
.document(path)
.onUpdate(async (change, context) => {
const deviceTokens = ['deviceToken-123123123']
deviceTokens.forEach(token => {
const fcmMessage = {
notification: {title: 'test title', body: 'test body'},
token
}
admin.messaging().send(fcmMessage)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response)
})
.catch((error) => {
console.log('Error sending message:', error)
})
})
})
Token perangkat disimpan di firestore dan diambil dari firestore di dalam fungsi cloud ini juga. Format token perangkat sudah benar. Saya telah menggantinya dengan placeholder untuk contoh ini.
Saya juga mencari pertanyaan serupa, tetapi satu-satunya yang dapat saya temukan adalah yang ini