FCM एचटीटीपी v1 एपीआई का इस्तेमाल करके, मैसेज के अनुरोध बनाए जा सकते हैं और उन्हें इस तरह के टारगेट पर भेजा जा सकता है:
- विषय का नाम
- शर्त
- डिवाइस रजिस्ट्रेशन टोकन
- डिवाइस ग्रुप का नाम (अब इस्तेमाल नहीं किया जाता, 29 सितंबर, 2027 को हटा दिया जाएगा)
पहले से तय फ़ील्ड से बने सूचना पेलोड, उपयोगकर्ता के तय किए गए फ़ील्ड के डेटा पेलोड या दोनों तरह के पेलोड वाले मैसेज भेजे जा सकते हैं. ज़्यादा जानकारी के लिए, मैसेज के टाइप देखें.
एचटीटीपी 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 पर चल रहा है.
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 प्रोजेक्ट के सभी सेवा खाते देखने के लिए,
किसी सेवा खाते की पुष्टि करने और उसे 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
कम समय तक चलने वाला 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 क्लाउड से मैसेज एपीआई चालू हो. Firebase कंसोल में जाकर देखें कि यह सुविधा चालू है या नहीं. इसके लिए,
सेटिंग > सामान्य पर जाएं. इसके बाद, क्लाउड से मैसेज टैब पर क्लिक करें.सेंडर प्रोजेक्ट में, एक सेवा खाता बनाएं.
टारगेट प्रोजेक्ट में, सेवा खाते के ईमेल पते को Firebase क्लाउड से मैसेज API के एडमिन की भूमिका असाइन करें. इसके लिए, Google Cloud कंसोल के IAM और एडमिन > IAM पेज पर जाएं. इस भूमिका की मदद से, मैसेज भेजने वाले प्रोजेक्ट का सेवा खाता, टारगेट प्रोजेक्ट को मैसेज भेज सकता है.
भेजने वाले प्रोजेक्ट में सेवा खाते के लिए, 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
अनुरोध पूरा होने पर, एचटीटीपी v1 एपीआई से मिली जानकारी एक JSON ऑब्जेक्ट होती है. इसमें मैसेज आईडी शामिल होता है:
{
"name":"projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c96"
}
FCM एचटीटीपी v1 एपीआई का इस्तेमाल करके, टेस्ट के तौर पर सूचना वाला मैसेज भेजना
इस सेक्शन में, FCM के एचटीटीपी v1 एपीआई का इस्तेमाल करके, सूचना देने वाला टेस्ट मैसेज भेजने का तरीका बताया गया है.
एचटीटीपी अनुरोध का यूआरएल
अनुरोध में, यहां दिए गए यूआरएल पर, टारगेट (रजिस्ट्रेशन टोकन, विषय या शर्त) के लिए एचटीटीपी पोस्ट शामिल होता है:
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://firebase.google.com/static/images/products/cloud-messaging/cloud-messaging-hero_1x.png"
}
}
}API Explorer में सैंपल को आज़माने के लिए, Run पर क्लिक करें.