0

只是試圖瞭解使用雲端功能發送Firebase雲端消息的過程,以通知在手機上安裝了我的應用的所有用戶。這將觸發每當一個新的事件已經在特定的分支被添加,如下所示:使用雲端功能將FCM發送到所有Android設備

var functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

const payload = { 
    notification: { 
    title: 'New event added' 
    } 
}; 

exports.bookingsChanged = functions.database.ref("/Events") 
    .onWrite(event => { 
    return admin.messaging().sendToDeviceGroup("latest_events", payload); 
    }); 

我上傳上述功能似乎並沒有將消息發送給我使用,在所有的Android設備,儘管使用Firebase控制檯選項設置和測試FCM來發送消息。我注意到目前還沒有這方面的文檔,所以任何幫助將不勝感激!

編輯

我may've錯過了,但我把它換成字符串「latest_events」與我假設是必需的,因爲每個控制檯來定位「我的Android應用程序包名用戶段「。

回答

1

最終通過等待我設置爲顯示在Firebase通知信息中心中的主題來解決此問題。然後我改變了下面的代碼發送到這個話題直接:

return admin.messaging().sendToTopic("latest_events", payload); 

我也發現了,你必須在整個API文檔來後用「sendToDevicegroup」時提供的令牌。因此,在我的使用案例中,主題更加有效,因爲我不希望獲取令牌以發送到特定的用戶設備。

希望這可以幫助遇到類似問題的人!

附加編輯

如果你像我一樣想提醒用戶僅是已被添加到一個特定的分支新的事件,通常包括一鍵ID,我創建了下面的代碼來實現這個。

從文檔中的示例中獲得一些幫助,這將評估與之前位置相比較的位置處的記錄數。因此,這隻會提醒用戶添加新的子記錄,而不是每次記錄被編輯和刪除。

var functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

exports.bookingsChanged = functions.database.ref("/Bookings").onWrite(event 
    => { 

    var payload = { 
     notification: { 
      title: "A new event has been added!" 
     } 
    }; 

    if (event.data.previous.exists()) { 
     if (event.data.previous.numChildren() < event.data.numChildren()) { 
      return admin.messaging().sendToTopic("latest_events", payload); 
     } else { 
      return; 
     } 
    } 

    if (!event.data.exists()) { 
     return; 
    } 

    return admin.messaging().sendToTopic("latest_events", payload); 

}); 
+1

只是指出您不一定要等待主題出現在通知控制檯中。只要已經有一個令牌訂閱了一個主題,它就可以立即使用。 :) –

相關問題