How to solve problem Firebase Cloud Messaging error in Firebase Cloud function?

Viewed 253

I have some problem about using Firebase Cloud Messaging from Firebase Cloud Functions.

The error message is below. It is from my Firebase Cloud Functions Log console.

Error: An error occurred when trying to authenticate to the FCM servers. Make sure the credential used to authenticate this SDK has the proper permissions.

At first, I follow Firebase Cloud Functions CodeLabs.

https://firebase.google.com/codelabs/firebase-cloud-functions

And at last lab "New Message Notifications", when I insert new message at Web "FriendlyChat" app, there is not display notification message. Then I checked log in Firebase Cloud Functions Log console, there was an error message which I had told.

How to solve problem Firebase Cloud Messaging error in Firebase Cloud function?

Or ... How can I check about cloud functions credential before call FCM?

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

// Sends a notifications to all users when a new message is posted.
exports.sendNotifications = functions.firestore.document('messages/{messageId}').onCreate(
    async (snapshot) => {
        // Notification details.
        const text = snapshot.data().text;
        const payload = {
            notification: {
                title: `${snapshot.data().name} posted ${text ? 'a message' : 'an image'}`,
                body: text ? (text.length <= 100 ? text : text.substring(0, 97) + '...') : '',
                icon: snapshot.data().profilePicUrl || '/images/profile_placeholder.png',
                click_action: `https://${process.env.GCLOUD_PROJECT}.firebaseapp.com`,
            }
        };

        // Get the list of device tokens.
        const allTokens = await admin.firestore().collection('fcmTokens').get();
        const tokens = [];
        allTokens.forEach((tokenDoc) => {
            tokens.push(tokenDoc.id);
        });

        if (tokens.length > 0) {
            // Send notifications to all tokens.
            const response = await admin.messaging().sendToDevice(tokens, payload);
            await cleanupTokens(response, tokens);
            functions.logger.log('Notifications have been sent and tokens cleaned up.');
        }
    });

Thank you in advance.

1 Answers

I solve this problem by set "Enabled" at "Cloud Messaging API (Legacy)" at Project Settings.

set "Enabled" at "Cloud Messaging API (Legacy)" at Project Settings

Related