android - आप CURL के माध्यम से सभी उपकरणों में फायरबेस अधिसूचना कैसे भेजते हैं?




firebase firebase-cloud-messaging (5)

आप "/ विषय / सभी" का उपयोग करके सभी उपकरणों को सूचना भेज सकते हैं

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!",
   }
}

मैं सभी ऐप उपयोगकर्ताओं (एंड्रॉइड पर) के लिए एक अधिसूचना भेजने का प्रयास कर रहा हूं, अनिवार्य रूप से डुप्लिकेट को फायरबेस व्यवस्थापक कंसोल के माध्यम से भेजे जाने पर क्या होता है। यहाँ CURL कमांड है जिसकी मैं शुरुआत करता हूं:

curl --insecure --header "प्राधिकरण: कुंजी = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "सामग्री-प्रकार: आवेदन / json" -d "{\" अधिसूचना \ ": {\" शीर्षक \ ": \" नोट ”। -टाइटल \ ", \" बॉडी \ ": \" नोट-बॉडी \ "}}" https://fcm.googleapis.com/fcm/send

यहाँ बताया गया है कि JSON ने आपकी आँखों के लिए आसान होने का मार्ग प्रशस्त किया:

{
"notification":{
    "title":"note-Title",
    "body":"note-Body"
    }
}

प्रतिक्रिया जो वापस आती है वह सिर्फ दो वर्ण है:

सेवा मेरे

वह यह है, शब्द "को"। (हेडर एक 400 की रिपोर्ट करते हैं) मुझे संदेह है कि यह मेरे JSON में "से" नहीं होने के साथ है। एक "भी" के लिए क्या रखा जाएगा? मेरे पास कोई विषय निर्धारित नहीं है, और उपकरणों ने किसी भी चीज़ के लिए खुद को पंजीकृत नहीं किया है। फिर भी, वे अभी भी फायरबेस व्यवस्थापक पैनल से सूचनाएं प्राप्त करने में सक्षम हैं।

मैं फायरबेस नोटिफिकेशन प्रोसेसिंग की अद्भुत सीमा के कारण "डेटा केवल" JSON पैकेज का प्रयास करना चाहता हूं, जिससे यदि आपका ऐप अग्रभूमि में है, तो सूचना आपके हैंडलर द्वारा संसाधित हो जाती है, लेकिन यदि आपका ऐप पृष्ठभूमि में है, तो यह हो जाता है फायरबेस सेवा द्वारा आंतरिक रूप से संसाधित किया गया और कभी भी आपके सूचना हैंडलर को नहीं दिया गया। यदि आप एपीआई के माध्यम से अपना अधिसूचना अनुरोध सबमिट करते हैं, तो केवल इसके आसपास ही काम किया जा सकता है, लेकिन केवल यदि आप इसे केवल डेटा के साथ करते हैं। (जो तब एक ही संदेश के साथ आईओएस और एंड्रॉइड को संभालने की क्षमता को तोड़ता है।) मेरे किसी भी JSON में "डेटा" के साथ "अधिसूचना" को बदलने का कोई प्रभाव नहीं है।

ठीक है, फिर मैंने यहां समाधान का प्रयास किया: फायरबेस जावा सर्वर सभी डिवाइसों को धक्का अधिसूचना भेजने के लिए जो मुझे लगता है कि "ठीक है, भले ही व्यवस्थापक कंसोल के माध्यम से सभी को सूचनाएं संभव हैं ... यह वास्तव में एपीआई के माध्यम से संभव नहीं है। " वर्कअराउंड प्रत्येक क्लाइंट को किसी विषय की सदस्यता लेने के लिए है, और फिर उस विषय पर सूचना को बाहर धकेलें। तो पहली बार कोड बनाएँ:

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 अनुसार "InvalidRegademy" के साथ 200 कोड का मतलब है कि पंजीकरण टोकन के साथ एक समस्या । शायद? क्योंकि प्रलेखन का वह हिस्सा मैसेजिंग सर्वर के लिए है। क्या अधिसूचना सर्वर एक ही है? अस्पष्ट। मैं कहीं और देखता हूं कि विषय सक्रिय होने से पहले घंटों लग सकता है। ऐसा लगता है कि नए चैट रूम बनाने के लिए यह बेकार हो जाएगा, इसलिए ऐसा लगता है कि यह भी बंद है।

जब मैं स्क्रैच से एक ऐप को कोड कर सकता था, तो मैं बहुत उत्साहित था, जिसे कुछ ही घंटों में सूचनाएं मिलीं जब मैंने पहले कभी Firebase का उपयोग नहीं किया था। ऐसा लगता है कि स्ट्राइप.कॉम डॉक्यूमेंटेशन के लेवल पर पहुंचने से पहले इसे लंबा रास्ता तय करना है।

नीचे पंक्ति: क्या किसी को पता है कि एडमिन कंसोल की कार्यक्षमता को मिरर करने के लिए ऐप चलाने वाले सभी उपकरणों को संदेश भेजने के लिए JSON को क्या आपूर्ति करनी है?


आप / विषयों / सभी का उपयोग कर सकते हैं, लेकिन आपको अपने पैनल फायरबेस में जाना चाहिए और बदल जाना चाहिए

अनाम >>>>> सक्षम

यहाँ छवि विवरण दर्ज करें


फायरबेस नोटिफिकेशन में संदेश भेजने के लिए एपीआई नहीं है। सौभाग्य से यह फायरबेस क्लाउड मैसेजिंग के शीर्ष पर बनाया गया है, जिसमें ठीक ऐसी एपीआई है।

फायरबेस नोटिफिकेशन और क्लाउड मैसेजिंग के साथ, आप तथाकथित डाउनस्ट्रीम संदेशों को तीन तरीकों से उपकरणों पर भेज सकते हैं:

  1. विशिष्ट उपकरणों के लिए , यदि आप उनकी डिवाइस आईडी जानते हैं
  2. उपकरणों के समूहों के लिए , यदि आप समूहों के पंजीकरण आईडी जानते हैं
  3. विषयों के लिए , जो सिर्फ कुंजी है कि उपकरणों की सदस्यता ले सकते हैं

आप ध्यान देंगे कि स्पष्ट रूप से सभी उपकरणों को भेजने का कोई तरीका नहीं है। आप इनमें से प्रत्येक के साथ ऐसी कार्यक्षमता का निर्माण कर सकते हैं।

किसी विषय पर भेजने के लिए आपको अपने कमांड में एक सिंटैक्स त्रुटि होती है। विषयों की पहचान /topics/ साथ शुरू करके की जाती है। चूँकि आपके पास आपके कोड में नहीं है, इसलिए सर्वर allDevices को एक डिवाइस आईडी के रूप में व्याख्या करता है। चूंकि यह डिवाइस पंजीकरण टोकन के लिए एक अमान्य प्रारूप है, इसलिए यह एक त्रुटि उठाता है।

विषयों पर संदेश भेजने के लिए प्रलेखन से:

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!",
   }
}

बस सभी उपयोगकर्ताओं को जो एक विशिष्ट विषय की सदस्यता के लिए लॉग इन करते हैं, और फिर उस विषय पर एक अधिसूचना भेजें।


सबसे आसान तरीका है कि मैं सभी उपकरणों को पुश अधिसूचना भेजने के लिए आया हूं, उन्हें एक विषय "सब" की सदस्यता लें और फिर इस विषय पर अधिसूचना भेजें। इसे अपनी मुख्य गतिविधि में कॉपी करें

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

अब अनुरोध के रूप में भेजें

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

यह अक्षम या गैर-मानक तरीका हो सकता है, लेकिन जैसा कि मैंने ऊपर बताया कि यह सबसे आसान है। कृपया पोस्ट करें यदि आपके पास सभी उपकरणों पर एक धक्का अधिसूचना भेजने का कोई बेहतर तरीका है।

यदि आप फायरबेस क्लाउड मैसेजिंग ट्यूटोरियल - एफसीएम का उपयोग करके पुश नोटिफिकेशन का उपयोग करके पुश नोटिफिकेशन भेजने के लिए नए हैं, तो आप इस ट्यूटोरियल को फॉलो कर सकते हैं







firebase-notifications