Programing

CURL을 통해 모든 기기에 Firebase 알림을 어떻게 보내나요?

lottogame 2020. 12. 11. 07:39
반응형

CURL을 통해 모든 기기에 Firebase 알림을 어떻게 보내나요?


기본적으로 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 report a 400) 나는 이것이 내 JSON에 "to"가없는 것과 관련이 있다고 생각합니다. "to"에 무엇을 넣을까요? 정의 된 주제가 없으며 장치가 아무것도 등록하지 않았습니다. 하지만 여전히 Firebase 관리자 패널에서 알림을받을 수 있습니다.

Firebase 알림 처리의 놀라운 제한으로 인해 "데이터 전용"JSON 패키지를 시도하고 싶습니다. 앱이 포 그라운드에 있으면 알림이 핸들러에 의해 처리되지만 앱이 백그라운드에 있으면 Firebase 서비스에서 내부적으로 처리되며 알림 핸들러로 전달되지 않습니다. API를 통해 알림 요청을 제출하면이 문제를 해결할 수 있지만 데이터 전용으로 수행하는 경우에만 가능합니다. (그러면 동일한 메시지로 iOS 및 Android를 처리하는 기능이 중단됩니다.) JSON에서 "알림"을 "데이터"로 바꾸는 것은 효과가 없습니다.

좋아, 그런 다음 해결책을 시도했습니다. 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을 아는 사람이 있습니까?


Firebase 알림에는 메시지를 보내는 API가 없습니다. 다행히도 정확히 그러한 API가있는 Firebase 클라우드 메시징을 기반으로 구축되었습니다.

Firebase 알림 및 클라우드 메시징을 사용하면 다음과 같은 세 가지 방법으로 기기에 소위 다운 스트림 메시지를 보낼 수 있습니다.

  1. 특정 장치 에 대한 장치 ID를 알고있는 경우
  2. 그룹의 등록 ID를 알고있는 경우 장치 그룹에
  3. 주제 장치가 가입 할 수있는 단지 열쇠,

모든 기기에 명시 적으로 전송할 수있는 방법은 없습니다. 하지만 이들 각각으로 이러한 기능을 구축 할 수 있습니다.

For sending to a topic you have a syntax error in your command. Topics are identified by starting with /topics/. Since you don't have that in your code, the server interprets allDevices as a device id. Since it is an invalid format for a device registration token, it raises an error.

From the documentation on sending messages to topics:

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "/topics/foo-bar",
  "data": {
    "message": "This is a Firebase Cloud Messaging Topic Message!",
   }
}

The most easiest way I came up with to send the push notification to all the devices is to subscribe them to a topic "all" and then send notification to this topic. Copy this in your main activity

FirebaseMessaging.getInstance().subscribeToTopic("all");

Now send the request as

{
   "to":"/topics/all",
   "data":
   {
      "title":"Your title",
      "message":"Your message"
      "image-url":"your_image_url"
   }
}

This might be inefficient or non-standard way, but as I mentioned above it's the easiest. Please do post if you have any better way to send a push notification to all the devices.

You can follow this tutorial if you're new to sending push notifications using Firebase Cloud Messaging Tutorial - Push Notifications using FCM


One way to do that is to make all your users' devices subscribe to a topic. That way when you target a message to a specific topic, all devices will get it. I think this how the Notifications section in the Firebase console does it.


Just make all users who log in subscribe to a specific topic, and then send a notification to that topic.


I was looking solution for my Ionic Cordova app push notification.

Thanks to Syed Rafay's answer.

in app.component.ts

const options: PushOptions = {
  android: {
    topics: ['all']
  },

in Server file

"to" => "/topics/all",

Instead of subscribing to a topic you could instead make use of the condition key and send messages to instances, that are not in a group. Your data might look something like this:

{
    "data": {
        "foo": "bar"
    },
    "condition": "!('anytopicyoudontwanttouse' in topics)"
}

See https://firebase.google.com/docs/cloud-messaging/send-message#send_messages_to_topics_2


you can use /topics/all but you must go to your panel Firebase and changed

Anonymous >>>>> Enabled

enter image description here


Your can send notification to all devices using "/topics/all"

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "/topics/all",
  "notification":{ "title":"Notification title", "body":"Notification body", "sound":"default", "click_action":"FCM_PLUGIN_ACTIVITY", "icon":"fcm_push_icon" },
  "data": {
    "message": "This is a Firebase Cloud Messaging Topic Message!",
   }
}

참고URL : https://stackoverflow.com/questions/38237559/how-do-you-send-a-firebase-notification-to-all-devices-via-curl

반응형