FCM एचटीटीपी v1 एपीआई का इस्तेमाल करके, मैसेज के अनुरोध बनाए जा सकते हैं. साथ ही, उन्हें इन टारगेट को भेजा जा सकता है:
- विषय का नाम
- शर्त
- डिवाइस रजिस्ट्रेशन टोकन
- डिवाइस ग्रुप का नाम (सिर्फ़ प्रोटोकॉल)
आपके पास ऐसे मैसेज भेजने का विकल्प होता है जिनमें पहले से तय किए गए फ़ील्ड से बना सूचना पेलोड, उपयोगकर्ता के तय किए गए फ़ील्ड का डेटा पेलोड या दोनों तरह के पेलोड वाला मैसेज शामिल हो. ज़्यादा जानकारी के लिए, मैसेज टाइप देखें.
एचटीटीपी v1 के अनुरोधों को अनुमति देना
आपके सर्वर एनवायरमेंट की जानकारी के आधार पर, Firebase सेवाओं के लिए सर्वर के अनुरोधों को अनुमति देने के लिए, इन रणनीतियों के कॉम्बिनेशन का इस्तेमाल करें:
- Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी)
- सेवा खाते की JSON फ़ाइल
- सेवा खाते से मिला, कम समय के लिए मान्य OAuth 2.0 ऐक्सेस टोकन
अगर आपका ऐप्लिकेशन Compute Engine, Google Kubernetes Engine, App Engine या Cloud Functions (इसमें Cloud Functions for Firebase भी शामिल है) पर चल रहा है, तो ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी) का इस्तेमाल करें. एडीसी, अनुरोधों को अनुमति देने के लिए क्रेडेंशियल पाने के लिए, आपके मौजूदा डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है. साथ ही, एडीसी एनवायरमेंट वैरिएबल GOOGLE_APPLICATION_CREDENTIALS के ज़रिए, स्थानीय तौर पर टेस्टिंग की सुविधा देता है. अनुमति देने की प्रोसेस को पूरी तरह से ऑटोमेट करने के लिए, Admin SDK सर्वर लाइब्रेरी के साथ एडीसी का इस्तेमाल करें.
अगर आपका ऐप्लिकेशन, Google के सर्वर एनवायरमेंट पर नहीं चल रहा है, तो आपको अपने Firebase प्रोजेक्ट से सेवा खाते की JSON फ़ाइल डाउनलोड करनी होगी. जब तक आपके पास निजी पासकोड वाली फ़ाइल सिस्टम का ऐक्सेस है, तब तक एनवायरमेंट वैरिएबल GOOGLE_APPLICATION_CREDENTIALS का इस्तेमाल करके, मैन्युअल तरीके से हासिल किए गए इन क्रेडेंशियल के साथ अनुरोधों को अनुमति दी जा सकती है. अगर आपके पास फ़ाइल का ऐक्सेस नहीं है, तो आपको अपने कोड में सेवा खाते की फ़ाइल का रेफ़रंस देना होगा. ऐसा बहुत सावधानी से करना चाहिए, क्योंकि इससे आपके क्रेडेंशियल के सार्वजनिक होने का खतरा होता है.
एडीसी का इस्तेमाल करके क्रेडेंशियल देना
Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी), आपके क्रेडेंशियल की जांच इस क्रम में करते हैं:
एडीसी यह जांच करता है कि एनवायरमेंट वैरिएबल GOOGLE_APPLICATION_CREDENTIALS सेट है या नहीं. अगर वैरिएबल सेट है, तो एडीसी उस सेवा खाते की फ़ाइल का इस्तेमाल करता है जिस पर वैरिएबल पॉइंट करता है.
अगर एनवायरमेंट वैरिएबल सेट नहीं है, तो एडीसी डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है. यह सेवा खाता, Compute Engine, Google Kubernetes Engine, App Engine, और Cloud Functions, उन ऐप्लिकेशन के लिए उपलब्ध कराते हैं जो इन सेवाओं पर चलते हैं.
अगर एडीसी, ऊपर दिए गए दोनों क्रेडेंशियल का इस्तेमाल नहीं कर पाता है, तो सिस्टम में गड़बड़ी का मैसेज दिखता है.
Admin SDK के लिए, यहां दिए गए कोड के उदाहरण में इस रणनीति के बारे में बताया गया है. उदाहरण में, ऐप्लिकेशन के क्रेडेंशियल के बारे में साफ़ तौर पर नहीं बताया गया है. हालांकि, जब तक एनवायरमेंट वैरिएबल सेट है या जब तक ऐप्लिकेशन Compute Engine, Google Kubernetes Engine, App Engine या Cloud Functions पर चल रहा है, तब तक ADC क्रेडेंशियल का पता लगा सकता है.
Node.js
admin.initializeApp({
credential: admin.credential.applicationDefault(),
});
Java
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
Python
default_app = firebase_admin.initialize_app()
शुरू करें
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
C#
FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.GetApplicationDefault(),
});
मैन्युअल तरीके से क्रेडेंशियल देना
Firebase प्रोजेक्ट, Google सेवा खातों के साथ काम करते हैं. इनका इस्तेमाल करके, अपने ऐप्लिकेशन सर्वर या भरोसेमंद एनवायरमेंट से Firebase सर्वर एपीआई को कॉल किया जा सकता है. अगर आपको कोड को स्थानीय तौर पर डेवलप करना है या ऐप्लिकेशन को ऑन-प्रिमाइसेस पर डिप्लॉय करना है, तो सर्वर के अनुरोधों को अनुमति देने के लिए, इस सेवा खाते से मिले क्रेडेंशियल का इस्तेमाल किया जा सकता है.
किसी सेवा खाते को प्रमाणित करने और उसे Firebase की सेवाओं को ऐक्सेस करने की अनुमति देने के लिए, आपको JSON फ़ॉर्मैट में एक निजी कुंजी फ़ाइल जनरेट करनी होगी.
अपने सेवा खाते के लिए निजी पासकोड वाली फ़ाइल जनरेट करने के लिए:
Firebase कंसोल में, सेटिंग > सेवा खाते खोलें.
नई निजी कुंजी जनरेट करें पर क्लिक करें. इसके बाद, कुंजी जनरेट करें पर क्लिक करके पुष्टि करें.
कुंजी वाली JSON फ़ाइल को सुरक्षित तरीके से सेव करें.
सेवा खाते के ज़रिए अनुमति देते समय, आपके पास अपने ऐप्लिकेशन को क्रेडेंशियल देने के दो विकल्प होते हैं. GOOGLE_APPLICATION_CREDENTIALS एनवायरमेंट वैरिएबल सेट किया जा सकता है. इसके अलावा, कोड में सेवा खाते की कुंजी का पाथ साफ़ तौर पर पास किया जा सकता है. पहला विकल्प ज़्यादा सुरक्षित है और हम इसका सुझाव देते हैं.
एनवायरमेंट वैरिएबल सेट करने के लिए:
एनवायरमेंट वैरिएबल GOOGLE_APPLICATION_CREDENTIALS को उस JSON फ़ाइल के फ़ाइल पाथ पर सेट करें जिसमें आपके सेवा खाते की कुंजी मौजूद है. यह वैरिएबल सिर्फ़ आपके मौजूदा शेल सेशन पर लागू होता है. इसलिए, अगर आपको नया सेशन खोलना है, तो वैरिएबल को फिर से सेट करें.
Linux या macOS
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
खिड़कियां
PowerShell का इस्तेमाल करके:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
ऊपर दिए गए चरणों को पूरा करने के बाद, ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी) आपके क्रेडेंशियल का पता लगा सकते हैं. इससे, Google से बाहर के एनवायरमेंट में टेस्टिंग या चलाने के दौरान, सेवा खाते के क्रेडेंशियल का इस्तेमाल किया जा सकता है.
ऐक्सेस टोकन जनरेट करने के लिए क्रेडेंशियल का इस्तेमाल करना
अगर Firebase Admin SDK का इस्तेमाल नहीं किया जा रहा है, तो आपको ऐक्सेस टोकन बनाना होगा और अनुरोध भेजने के लिए इसे जोड़ना होगा. Firebase Admin SDK, पुष्टि करने की प्रोसेस को अपने-आप मैनेज करता है.
कम समय के लिए मान्य OAuth 2.0 ऐक्सेस टोकन पाने के लिए, अपनी पसंद की भाषा के लिए Google Auth Library के साथ-साथ अपने Firebase क्रेडेंशियल का इस्तेमाल करें:
node.js
function getAccessToken() {
return new Promise(function(resolve, reject) {
const key = require('../placeholders/service-account.json');
const jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
SCOPES,
null
);
jwtClient.authorize(function(err, tokens) {
if (err) {
reject(err);
return;
}
resolve(tokens.access_token);
});
});
}
इस उदाहरण में, Google API क्लाइंट लाइब्रेरी, JSON वेब टोकन या JWT की मदद से अनुरोध की पुष्टि करती है. ज़्यादा जानकारी के लिए, JSON वेब टोकन देखें.
Python
def _get_access_token():
"""Retrieve a valid access token that can be used to authorize requests.
:return: Access token.
"""
credentials = service_account.Credentials.from_service_account_file(
'service-account.json', scopes=SCOPES)
request = google.auth.transport.requests.Request()
credentials.refresh(request)
return credentials.token
Java
private static String getAccessToken() throws IOException {
GoogleCredentials googleCredentials = GoogleCredentials
.fromStream(new FileInputStream("service-account.json"))
.createScoped(Arrays.asList(SCOPES));
googleCredentials.refresh();
return googleCredentials.getAccessToken().getTokenValue();
}
ऐक्सेस टोकन की समयसीमा खत्म होने के बाद, टोकन रीफ़्रेश करने का तरीका अपने-आप कॉल हो जाता है. इससे अपडेट किया गया ऐक्सेस टोकन वापस मिल जाता है.
FCM को ऐक्सेस करने की अनुमति देने के लिए, स्कोप https://www.googleapis.com/auth/firebase.messaging
का अनुरोध करें.
एचटीटीपी अनुरोध के हेडर में ऐक्सेस टोकन जोड़ने के लिए:
टोकन को Authorization
हेडर की वैल्यू के तौर पर, इस फ़ॉर्मैट में जोड़ें
Authorization: Bearer <access_token>
:
node.js
headers: {
'Authorization': 'Bearer ' + accessToken
}
Python
headers = {
'Authorization': 'Bearer ' + _get_access_token(),
'Content-Type': 'application/json; UTF-8',
}
Java
URL url = new URL(BASE_URL + FCM_SEND_ENDPOINT);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestProperty("Authorization", "Bearer " + getServiceAccountAccessToken());
httpURLConnection.setRequestProperty("Content-Type", "application/json; UTF-8");
return httpURLConnection;
किसी दूसरे प्रोजेक्ट के सेवा खाते से अनुमति देना
किसी दूसरे प्रोजेक्ट ("सेंडर प्रोजेक्ट") में सेवा खाते से जनरेट किए गए OAuth 2.0 टोकन का इस्तेमाल करके, किसी एक प्रोजेक्ट ("टारगेट प्रोजेक्ट") के लिए मैसेज भेजे जा सकते हैं. इससे आपको एक ही प्रोजेक्ट में सेवा खाते को मैनेज करने की सुविधा मिलती है. साथ ही, दूसरों की ओर से मैसेज भेजे जा सकते हैं. ऐसा करने का तरीका जानने के लिए, यह तरीका अपनाएं:
- एपीआई चालू करें: पक्का करें कि भेजने वाले प्रोजेक्ट में, Firebase Cloud Messaging API चालू हो.
- सेवा खाता बनाएं: भेजने वाले प्रोजेक्ट में सेवा खाता बनाएं.
- अनुमतियां दें: टारगेट प्रोजेक्ट में, सेवा खाते के ईमेल पते को आईएएम पेज पर Firebase Cloud Messaging API एडमिन की भूमिका दें. इससे दूसरे प्रोजेक्ट का सेवा खाता, टारगेट प्रोजेक्ट को मैसेज भेज सकता है.
- टोकन पाना: भेजने वाले प्रोजेक्ट में मौजूद सेवा खाते के लिए, OAuth 2.0 का ऐक्सेस टोकन जनरेट करें. इसके लिए, इनमें से कोई एक तरीका अपनाएं:
- सेवा खाते की कुंजी वाली JSON फ़ाइल को डाउनलोड और इस्तेमाल करना.
- इसके अलावा, अगर आपकी सेवा Google Cloud पर चल रही है, तो Workload Identity का इस्तेमाल करें.
- अनुरोध भेजना: मिले हुए ऐक्सेस टोकन का इस्तेमाल, अनुरोध भेजने के लिए
Authorization
हेडर में करें. अनुरोध, टारगेट प्रोजेक्ट के लिए एचटीटीपी v1 एंडपॉइंट पर किया जाना चाहिए:POST https://fcm.googleapis.com/v1/TARGET_PROJECT_ID/messages:send
चुनिंदा डिवाइसों पर मैसेज भेजना
किसी एक डिवाइस पर सूचना भेजने के लिए, डिवाइस के रजिस्ट्रेशन टोकन को इस तरह पास करें.
REST
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"body":"This is an FCM notification message!",
"title":"FCM Message"
}
}
}
cURL कमांड:
curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message":{
"notification":{
"title":"FCM Message",
"body":"This is an FCM Message"
},
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
अनुरोध पूरा होने पर, HTTP v1 API का जवाब एक JSON ऑब्जेक्ट होता है. इसमें मैसेज आईडी शामिल होता है:
{
"name":"projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c96"
}
FCM HTTP v1 API का इस्तेमाल करके, टेस्ट के तौर पर सूचना मैसेज भेजना
इस सेक्शन में, FCM HTTP v1 API का इस्तेमाल करके, टेस्ट नोटिफ़िकेशन मैसेज भेजने का तरीका बताया गया है.
एचटीटीपी अनुरोध का यूआरएल
अनुरोध में, यहां दिए गए यूआरएल पर, बताए गए टारगेट (रजिस्ट्रेशन टोकन, विषय या शर्त) के लिए एचटीटीपी पोस्ट शामिल होता है:
POST https://fcm.googleapis.com/v1/projectId/messages:send
पूरे एचटीटीपी अनुरोध का JSON सैंपल
यहां एक पूरा उदाहरण दिया गया है. इसमें बताया गया है कि एचटीटीपी पोस्ट अनुरोध में सूचना कैसे पोस्ट की जाती है:
{ "message": { "token": REGISTRATION_TOKEN, "notification": { "title": "FCM API test", "body": "This is the body of the notification.", "image": "https://cat.10515.net/1.jpg" } } }
एपीआई एक्सप्लोरर में मौजूद सैंपल को आज़माने के लिए, चलाएं पर क्लिक करें.