기본적으로 Firebase 관리 콘솔을 통해 알림을 보낼 때 발생하는 상황을 복제하여 모든 앱 사용자 (Android)에게 알림을 보내려고합니다. 시작하는 CURL 명령은 다음과 같습니다.
curl --insecure --header "Authorization : key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM"--header "Content-Type : application / json"-d "{\"notification \ ": {\"title \ ": \"note -Title \ ", \"body \ ": \"note-Body \ "}}" https://fcm.googleapis.com/fcm/send
다음은 눈에 더 쉽게 알아볼 수 있도록 구문 분석 된 JSON입니다.
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
반환되는 응답은 두 문자입니다.
...에
그게 바로 "to"라는 단어입니다. (Headers는 400을보고합니다.) JSON에 "to"가없는 것과 관련이 있다고 생각합니다. "to"에 무엇을 넣을까요? 정의 된 주제가 없으며 장치가 아무것도 등록하지 않았습니다. 하지만 여전히 Firebase 관리자 패널에서 알림을받을 수 있습니다.
Firebase 알림 처리의 놀라운 제한으로 인해 "데이터 전용"JSON 패키지를 시도하고 싶습니다. 앱이 포 그라운드에 있으면 알림이 핸들러에 의해 처리되지만 앱이 백그라운드에 있으면 Firebase 서비스에서 내부적으로 처리되며 알림 핸들러로 전달되지 않습니다. API를 통해 알림 요청을 제출하면이 문제를 해결할 수 있지만 데이터 전용으로 수행하는 경우에만 가능합니다. (그러면 동일한 메시지로 iOS 및 Android를 처리하는 기능이 중단됩니다.) JSON에서 "notification"을 "data"로 바꾸는 것은 효과가 없습니다.
좋아, 그런 다음 해결책을 시도했습니다. Firebase Java Server가 모든 기기에 푸시 알림을 보내는 것으로 보이며 "Ok, 관리 콘솔을 통해 모든 사람에게 알림이 가능하지만 ... 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 에 따르면 "InvalidRegistration"이있는 200 코드는 등록 토큰에 문제가 있음을 의미합니다. . 아마도? 설명서의 해당 부분은 메시징 서버에 대한 것입니다. 알림 서버가 동일합니까? 명확하지 않습니다. 주제가 활성화되기까지 몇 시간이 걸릴 수 있다는 것을 다른 곳에서 봅니다. 그것은 새로운 대화방을 만드는 데 쓸모가 없을 것 같아서 그것도 꺼져 보입니다.
이전에 Firebase를 사용하지 않았던 몇 시간 만에 알림을받는 앱을 처음부터 코딩 할 수 있다는 사실에 매우 흥분했습니다. Stripe.com 문서 수준에 도달하기까지는 갈 길이 멀어 보입니다.
결론 : 관리 콘솔 기능을 미러링하기 위해 앱을 실행하는 모든 기기에 메시지를 보내기 위해 제공해야 할 JSON을 아는 사람이 있습니까?
FirebaseInstanceIdService