我試圖向所有應用用戶發送通知(在Android上),基本上覆制了通過Firebase管理控制檯發送通知時發生的情況。這裏是CURL命令我開始於:如何通過CURL向所有設備發送Firebase通知?
curl --insecure --header「Authorization:key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM」--header「Content-Type:application/json」-d「{\」notification \「:\」title \「,\」body \「:\」note-Body \「}}」https://fcm.googleapis.com/fcm/send
這是JSON解析出來讓您的眼睛更容易:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
該回來的反應就是兩個字:
到
就是這樣,單詞「到」。 (Headers報告400)我懷疑這與在我的JSON中沒有「to」有關。甚至會給一個「to」什麼?我沒有定義任何主題,並且設備沒有註冊任何內容。但是,他們仍然能夠從Firebase管理控制檯收到通知。
由於Firebase通知處理的驚人限制,因此如果您的應用處於前臺,通知將由您的處理程序處理,但我想嘗試「僅限數據」JSON包,但如果您的應用處於背景,它將通過Firebase服務進行INTERNALLY處理,並且永遠不會傳遞給您的通知處理程序。顯然,如果你通過API提交你的通知請求,但只有在你使用純數據的情況下才可以解決這個問題。 (然後就會破壞使用相同消息處理iOS和Android的能力。)在我的任何JSON中將「notification」替換爲「data」不起作用。
好了,然後我試圖這裏的解決方案:Firebase Java Server to send push notification to all devices 這似乎是我說「好吧,即使通知大家通過管理控制檯是可能的...這不是真的有可能通過API。」解決方法是讓每個客戶訂閱一個主題,然後將通知推送到該主題。所以先在的onCreate代碼:
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
那麼新的JSON我送:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
所以現在我從服務器獲取至少一個真實的反應。 JSON響應:
{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"InvalidRegistration"
}
]
}
並附帶一個HTTP代碼200好的...根據https://firebase.google.com/docs/cloud-messaging/http-server-ref 200代碼以「InvalidRegistration」是指與註冊令牌的問題。也許?因爲這部分文檔是用於消息傳遞服務器的。通知服務器是否一樣?不清楚。我在其他地方看到,該主題可能需要幾個小時才能發揮作用。看起來這樣會讓它無法創建新的聊天室,所以這看起來也是如此。
當我從頭開始編寫一個應用程序時,當我從未使用過Firebase的幾個小時內收到通知時,我非常興奮。在它達到Stripe.com文檔的水平之前,似乎還有很長的路要走。
底線:有誰知道提供什麼JSON來發送消息到所有運行應用程序的設備來鏡像管理控制檯功能?
檢查是否使用正確您的API憑證推送通知您可以按照本教程。也嘗試發送GCM消息到單個設備,看看是否有效。您可以通過在調試中啓動應用程序來獲取InstanceId,並在「FirebaseInstanceIdService」上放置一個斷點。 –
我沒有看到在firebase.google.com/docs的快速谷歌搜索中顯示的「api標記」。你的意思是「ID令牌」?或「身份驗證令牌」?或者你是在談論頭部提供的我的授權密鑰?這一點很好:如果我改變它,服務器響應切換到「未授權」,而不是我正在獲取的錯誤消息。 – Anders8
該博客似乎是關於向特定設備發送消息,而不是像原始討論一樣,只是將其發送給應用的所有用戶。 – Anders8