从我的NodeJS应用程序发送推送通知消息不起作用

时间:2017-04-18 18:42:55

标签: ios node.js firebase firebase-cloud-messaging

我正在尝试从我的NodeJS服务器向我的iOS设备发送推送通知,但我无法让它工作。我在做Send to topic方法。我已经尝试了Firebase Admin(NodeJS)文档中的代码示例,但它似乎不起作用。

这是我的NodeJS代码:

const admin = require('firebase-admin');    // Firebase-admin module to send push notifications via firebase
const serviceAccount = require('./myprivatekey.json'); //privateKey.json file

// setup firebase admin
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: FIREBASE_URL
});

sendMessage('someTopic', 'test message');

function sendMessage(topicName, message) {
    // The topic name can be optionally prefixed with "/topics/".
    var topic = `/topics/${topicName}`;
    console.log(topic);

    // See the "Defining the message payload" section below for details
    var payload = {
        notification: {
            title: 'test title',
            body: message
        }
    };

    // Send a message to devices subscribed to the provided topic.
    admin.messaging().sendToTopic(topic, payload)
        .then(function (response) {
            // See the MessagingTopicResponse reference documentation for the
            // contents of response.
            console.log('Successfully sent message:', response);
        })
        .catch(function (error) {
            console.log('Error sending message:', error);
        });
}

这是我订阅主题的Swift代码:

override func viewDidLoad() {
        super.viewDidLoad()

        FIRMessaging.messaging().subscribe(toTopic: "/topics/someTopic")
    }

当我运行我的NodeJS应用程序时,我收到了Successfully sent message:日志,因此我不确定为什么我没有在我的iOS设备上收到推送通知。

是的,我已经为开发和生产设置了必要的APN证书。我可以从Firebase Cloud Messaging网络控制台发送推送通知,并在我的iOS设备上成功接收通知。我似乎无法让我的NodeJS Firebase Admin应用运行起来。感谢任何帮助。

更新:我还想指出,即使使用Swift代码订阅firebase主题,Firebase Web控制台上也不会显示指定的主题。据我所知,在firebase Web控制台上显示需要几个小时,但自从我运行代码将我的iOS设备订阅到firebase主题以来已经过了一周。

我也尝试将我的NodeJS代码更改为发送到单个设备而不是发送到主题,这是有效的。这只是发送到主题不起作用。我已将可能的问题缩小到send to topic。可能是我的Swift代码没有成功订阅我的iOS设备到指定的主题?但这是我从Firebase文档中获得的确切片段。

1 个答案:

答案 0 :(得分:1)

想出来。事实证明,调用viewDidLoad()中的订阅代码是一个坏主意,因为该应用程序可能尚未完全连接到FCM和APN。所以我在AppDelegate的didRegisterForRemoteNotificationsWithDeviceToken中重新定位了这段代码。

现在它正在运作。

我从这个stackoverflow问题主题获得了这个想法:Cannot receive push notification on iOS from Firebase 3.2.0 topics

希望这有助于遇到此问题的任何人