尝试通过 Firebase Cloud Functions (Android) 发送通知后出现错误

Posted

技术标签:

【中文标题】尝试通过 Firebase Cloud Functions (Android) 发送通知后出现错误【英文标题】:Getting an error after trying to send notification through Firebase Cloud Functions (Android) 【发布时间】:2018-01-06 04:50:10 【问题描述】:

我是 Firebase 和 nodejs 的新手。我正在尝试使用 Firebase Cloud Functions 从一台设备向另一台设备发送通知。

这是发送通知的node.js代码:

var functions = require('firebase-functions');
var admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.sendNotification = functions.database.ref('/sendNotification/notificationId')
        .onWrite(event => 

        var regToken="fYRweeL8cic:APA91bH6Q_gyKKrLL...";

        // Grab the current value of what was written to the Realtime Database.
        var eventSnapshot = event.data;

        var payload = 
            data: 
                title: eventSnapshot.child("title").val()
            
        ;

        // Set the message as high priority and have it expire after 24 hours.
        var options = 
        priority: "high",
        timeToLive: 60 * 60 * 24
        ;


    admin.messaging().sendToDevice(regToken,payload,options)
    .then(function(response)
        console.log("Successfully sent message: ", response);
    )
    .catch(function(error)
        console.log("Error sending message: ", error);
    )
)

这是将通知添加到实时数据库以触发该功能的代码:

 public void sendNotification()
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        final DatabaseReference myRef = database.getReference("sendNotification");

        myRef.addListenerForSingleValueEvent(new ValueEventListener() 
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) 
                Toast.makeText(getApplicationContext(),
                        "sent", Toast.LENGTH_SHORT).show();

            Map data = new HashMap();
            data.put("title", "this is my title");
            data.put("message", "this is the message");
            myRef.push().setValue(data);
            

            @Override
            public void onCancelled(DatabaseError databaseError) 

            
        );

    

我可以看到该函数已执行,但出现以下错误:

通知出现在数据库中:

这是函数在控制台中的显示方式:

问题是没有发送通知。 我得到这个:results:[error: [Object]] 出于某种原因。 此错误的原因可能是什么?


编辑:(解决方案)

按照 cmets 中的建议,我使用了这个:JSON.stringify(response) 来获取更多信息。这是回应:

 "results":["error":"code":"messaging/registration-token-not-registered","message":"The provided registration token is not registered. A previously valid registration token can be unregistered for a variety of reasons. See the error documentation for more details. Remove this registration token and stop using it to send messages."],"canonicalRegistrationTokenCount":0,"failureCount":1,"successCount":0,"multicastId":6051985890611026000

反应真的很清楚,令牌已经改变。我已将其更改为有效的令牌并且它有效。

【问题讨论】:

最后一行不是错误而是警告:***.com/questions/42784135/…。我不确定是什么导致了失败。 @FrankvanPuffelen 我已经编辑了我的帖子。还有什么有用的信息可以补充吗? 您可以试试console.log("Successfully sent message: ", JSON.stringify(response)); 了解更多详情吗? @camden_kid 我用过这个并找到了答案。我用信息编辑了帖子。如果你愿意,你可以把它写成答案。谢谢。 很高兴您找到了答案。将编辑移至未来读者的答案可能会更好。 【参考方案1】:

按照 cmets 中的建议,我使用了这个:JSON.stringify(response) 来获取更多信息。这是回应:

 "results":["error":"code":"messaging/registration-token-not-registered","message":"The provided registration token is not registered. A previously valid registration token can be unregistered for a variety of reasons. See the error documentation for more details. Remove this registration token and stop using it to send messages."],"canonicalRegistrationTokenCount":0,"failureCount":1,"successCount":0,"multicastId":6051985890611026000

反应真的很清楚,令牌已经改变。我已将其更改为有效令牌并且它有效。

【讨论】:

我在使用 subscribeToTopic 将多个设备注册到一个主题时收到了类似的错误消息,然后我可以使用主题 id 发送消息,但我不知道是否有 20 个用户的 reg 令牌无效,整个系统出现故障,甚至其他系统也不会收到消息

以上是关于尝试通过 Firebase Cloud Functions (Android) 发送通知后出现错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firebase Cloud Messaging 通过网络浏览器订阅主题

通过NodeJS向Firebase Cloud Messaging发送消息

在 Firebase Cloud Messaging 上通过 XMPP 传递上游消息的误解

在 Firebase Cloud 功能中启用 Cors

尝试初始化 Cloud Firestore 时,firebase.firestore() 不是函数

尝试初始化 Cloud Firestore 时,firebase.firestore() 不是函数