6

में प्राधिकरण कुंजी के लिए मुझे क्या निर्दिष्ट करना चाहिए क्या आप लोग मेरी मदद कर सकते हैं (और अन्य जो मुझे जितना निराश हैं) यह जानने के लिए कि Google Firebase कैसे काम करता है? दस्तावेज़ीकरण इतना भ्रमित है कि यह मुझे बेवकूफ महसूस करता है।फ़ायरबेस क्लाउड मैसेजिंग

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

फिर शब्दावली का कुल भ्रम है। जाहिर है अधिसूचनाएं भेजने के लिए एक https API है, लेकिन यह खराब दस्तावेज है। कुछ साइटें इसे समझाती हैं, लेकिन वे शब्दावली पर सर्वसम्मति तक नहीं पहुंचते हैं। कुछ लोग "एपीआई कुंजी" का उल्लेख करते हैं, अन्य लोग "प्रमाणीकरण कुंजी" कहते हैं, Google स्वयं इसे "प्राधिकरण कुंजी" कहते हैं, लेकिन जब मैं कंसोल पर अपनी प्रोजेक्ट सेटिंग्स को देखता हूं तो मुझे "सर्वर कुंजी" और "ऐप आईडी" दिखाई देता है जबकि google_services.json फ़ाइल में "private_key_id" है। तो डब्ल्यूटीएफ की एक अच्छी राशि है।

क्या कोई स्पष्टीकरण दे सकता है कि मुझे यहां किस बिल्ली की आपूर्ति करनी चाहिए? इस प्रकार फायरबेस एपीआई को एक POST अनुरोध तैयार किया जाना चाहिए:

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

{ "data": { 
    "score": "5x1", 
    "time": "15:10" 
}, 
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..." <-- AND THIS? 
} 

"प्रमाणीकरण" क्या होता है? यदि मैं सभी उपयोगकर्ताओं को अपनी अधिसूचना भेजना चाहता हूं, तो क्या होगा यदि मैं किसी विशिष्ट समूह को लक्षित करना चाहता हूं तो "टू" मान क्या होता है? (शुरुआत के लिए मैं खुश रहूंगा अगर यह बस हर डिवाइस पर पहुंचे।) क्या इन मानकों के लिए कोई अच्छा दस्तावेज है?

इसके अलावा प्रतीत होता है कि Google जावा में सभी काम करता है और केवल जावा उदाहरणों की आपूर्ति करता है। कम से कम मुझे PHP, Node.js या सादे जावास्क्रिप्ट के लिए उपयोग करने योग्य कुछ भी नहीं मिला है। उन सभी कार्यों के लिए बहुत सारे उदाहरण हैं जिनकी मुझे आवश्यकता नहीं है।

अपडेट: मैंने अभी पाया है कि "प्राधिकरण" मेरे प्रोजेक्ट के क्लाउड मैसेजिंग टैब के तहत फायरबेस कंसोल पर "सर्वर कुंजी" पाया जाना चाहिए। (अच्छी बात यह है कि उन्होंने इसे बहुत छिपाया नहीं है।) फिर भी, अगर मैं कर्ल के साथ PHP से एक पोस्ट भेजता हूं, तो यह HTTP कोड 0 के साथ एक खाली प्रतिक्रिया देता है।

उत्तर

16

ठीक है, मैंने इसे स्वयं समझ लिया और थोड़ा महसूस किया अब एक बेवकूफ कम है। आशा है कि कुछ जो अभी भी करते हैं उन्हें उपयोगी लगेगा।

"प्राधिकरण" मान मेरे प्रोजेक्ट के क्लाउड मैसेजिंग टैब के अंतर्गत फायरबेस कंसोल पर "सर्वर कुंजी" होना चाहिए।

"टू" पैरामीटर अनिवार्य है। यदि यह छोड़ा गया है, तो सर्वर एक साधारण "टू" के साथ जवाब देगा। वैसे भी यह अच्छा JSON में जवाब देता है।

आप सभी उपकरणों के लिए एक संदेश भेजना चाहते हैं, तो आप निर्दिष्ट करना चाहिए:

"to": "/topics/all" 

सर्वर प्रतिक्रिया केवल यह यदि आप सफल रहे हैं:

{"message_id":4988221490411655075} 

यहाँ यह कैसे की तरह लग रहा है किसी भी त्रुटि के मामले में:

{"multicast_id":5691752204334485119, 
"success":0, 
"failure":1, 
"canonical_ids":0, 
"results":[{ 
       "error":"MissingRegistration" 
      }] 
} 

पैरामीटर और वापसी मान यहां समझाए गए हैं:

https://firebase.google.com/docs/cloud-messaging/http-server-ref

Firebase कंसोल केवल सांत्वना खुद से भेजे गए संदेशों बरकरार रखती है।

Cordova के लिए मैं इस सरल प्लगइन का उपयोग कर रहा है और यह ठीक काम करता है:

$json_data = '{ "data": { 
        "price": "1000", 
        "currency": "USD" 
       }, 
       "notification": { 
        "title": "Hey you got a message", 
        "body": "Your mother stil loves you", 
        "sound": "default", 
        "click_action": "FCM_PLUGIN_ACTIVITY", 
        "icon": "icon_name" 
       }, 
       "to": "/topics/all", 
       "priority": "high" 
       }'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
              'Content-Type: application/json',                     
              'Content-Length: '.strlen($json_data), 
              'Authorization:key=AIzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 
             ));   
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec($ch); 
curl_close($ch); 
:

https://www.npmjs.com/package/cordova-plugin-fcm

यहाँ पीएचपी (भी शामिल है) में cURL साथ भेजे जाने के लिए एक अच्छी तरह से गठित JSON अनुरोध है

+0

आप सर एक जीवन बचतकर्ता हैं :) – Kushan

+0

यह एक बड़ी मदद है। बहुत बहुत धन्यवाद। मुझे कुछ संदेह है कि मुझे सर्वर कुंजी कैसे प्राप्त करना चाहिए। तो क्या ऐप में कुंजी को हार्डकोड करना अच्छा विचार है या हम प्रोग्राम को किसी भी तरह से प्रोग्राम प्राप्त कर सकते हैं? –

+0

यह सिर्फ एक स्ट्रिंग है। आप जहां चाहें वहां से इसे प्राप्त कर सकते हैं। जाहिर है, यह सिर्फ एक उदाहरण है, मैं वास्तव में इसे एक वैश्विक चर में डाल दिया। –

संबंधित मुद्दे