लेगसी FCM एपीआई से एचटीटीपी v1 पर माइग्रेट करें

एचटीटीपी और XMPP के लिए, बंद किए गए FCM लेगसी एपीआई का इस्तेमाल करने वाले ऐप्लिकेशन को माइग्रेट करना चाहिए एचटीटीपी v1 API को जल्द से जल्द लॉन्च करेंगे. मैसेज भेजना उन एपीआई के साथ, (अपस्ट्रीम मैसेज भी शामिल) को बंद कर दिया गया था यह सुविधा 20 जून, 2023 के बाद, 22 जुलाई, 2024 से बंद हो जाएगी.

उन खास सुविधाओं के बारे में ज़्यादा जानें जिन पर असर पड़ा है.

लगातार मिल रही सहायता और नई सुविधाओं के अलावा, एचटीटीपी v1 API में लेगसी एपीआई पर ये फ़ायदे हैं:

  • ऐक्सेस टोकन के ज़रिए बेहतर सुरक्षा एचटीटीपी v1 एपीआई में, कुछ समय तक चलने वाले ऐक्सेस का इस्तेमाल किया जाता है टोकन के लिए 100 कोड की ज़रूरत होती है. ऐसी स्थिति में जब ऐक्सेस टोकन सार्वजनिक हो जाता है, तो उसका इस्तेमाल नुकसान पहुंचाने के मकसद से किया जा सकता है एक घंटे या इससे पहले समय-सीमा खत्म. रीफ़्रेश टोकन उतनी बार ट्रांसमिट नहीं किए जाते जितनी बार इस्तेमाल की जाने वाली सुरक्षा कुंजियां होती हैं पुरानी एपीआई का इस्तेमाल कर रहे हैं, इसलिए उन्हें कैप्चर किए जाने की संभावना बहुत कम होती है.

  • सभी प्लैटफ़ॉर्म पर मैसेज को पसंद के मुताबिक बनाने की सुविधा मुख्य हिस्सा, एचटीटीपी v1 एपीआई इसमें ऐसी सामान्य कुंजियां हैं जो सभी टारगेट किए गए इंस्टेंस पर जाती हैं. साथ ही, इसमें प्लैटफ़ॉर्म के हिसाब से कुंजियां भी शामिल हैं सभी प्लैटफ़ॉर्म पर मैसेज को पसंद के मुताबिक बनाया जा सकता है. इसकी मदद से, ये काम किए जा सकते हैं "ओवरराइड" बनाएं जो अलग-अलग ग्राहकों को कुछ अलग पेलोड भेजते हैं में क्लाइंट प्लैटफ़ॉर्म की संख्या शामिल होती है.

  • नए क्लाइंट प्लैटफ़ॉर्म के वर्शन के लिए, ज़्यादा समय तक काम आने वाली और आने वाले समय के हिसाब से सुरक्षित रहने की सुविधा एचटीटीपी v1 एपीआई, Apple प्लैटफ़ॉर्म, Android, और वेब. JSON पेलोड में हर प्लैटफ़ॉर्म का अपना तय ब्लॉक होता है, FCM, एपीआई को नए वर्शन और नए प्लैटफ़ॉर्म पर उपलब्ध करा सकता है .

सर्वर एंडपॉइंट को अपडेट करना

एचटीटीपी v1 एपीआई का एंडपॉइंट यूआरएल, इन वर्शन में लेगसी एंडपॉइंट से अलग है तरीके:

  • इसका एक वर्शन है, जिसके पाथ में /v1 है.
  • पाथ में, इसके लिए Firebase प्रोजेक्ट का प्रोजेक्ट आईडी शामिल होता है /projects/myproject-ID/ फ़ॉर्मैट में अपना ऐप्लिकेशन. यह आईडी यहां उपलब्ध है प्रोजेक्ट की सामान्य सेटिंग टैब Firebase कंसोल.
  • यह send तरीके को :send के तौर पर साफ़ तौर पर बताता है.

एचटीटीपी v1 के लिए सर्वर एंडपॉइंट को अपडेट करने के लिए, इन एलिमेंट को एंडपॉइंट में जोड़ें हेडर पर क्लिक करें.

इससे पहले एचटीटीपी अनुरोध

POST https://fcm.googleapis.com/fcm/send

XMPP अनुरोध पहले

लेगसी XMPP मैसेज, नीचे दिए गए एंडपॉइंट के कनेक्शन पर भेजे जाते हैं:

fcm-xmpp.googleapis.com:5235

इसके बाद

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send

अनुरोध भेजने की अनुमति देने का तरीका अपडेट करें

लेगसी अनुरोधों में इस्तेमाल की गई सर्वर कुंजी स्ट्रिंग की जगह पर, एचटीटीपी v1 अनुरोध भेजें OAuth 2.0 ऐक्सेस टोकन ज़रूरी है. अगर एडमिन SDK का इस्तेमाल किया जा रहा है, तो मैसेज भेजने के लिए, लाइब्रेरी आपके लिए टोकन को हैंडल करती है. अगर आप रॉ प्रोटोकॉल, इस सेक्शन में बताए गए तरीके से टोकन पाएं और Authorization: Bearer <valid Oauth 2.0 token> के रूप में हेडर.

इससे पहले

Authorization: key=AIzaSyZ-1u...0GBYzPu7Udno5aA

इसके बाद

Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

आपके की पुष्टि करने के लिए, सर्वर को चालू करने के लिए इन रणनीतियों के संयोजन का उपयोग करें Firebase सेवाओं के लिए अनुरोध:

  • Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी)
  • सेवा खाते की JSON फ़ाइल
  • सेवा खाते से मिला, कुछ समय के लिए उपलब्ध OAuth 2.0 ऐक्सेस टोकन

अगर आपका ऐप्लिकेशन Compute Engine पर चल रहा है, Google Kubernetes Engine, App Engine या Cloud Functions (इसमें Firebase के लिए Cloud Functions भी शामिल हैं), ऐप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल (एडीसी) का इस्तेमाल करें. ADC आपकी मौजूदा डिफ़ॉल्ट सेवा का इस्तेमाल करता है आपके खाते से ऐक्सेस का अनुरोध किया जा सकता है. साथ ही, एडीसी एनवायरमेंट वैरिएबल की मदद से फ़्लेक्सिबल लोकल टेस्टिंग की सुविधा GOOGLE_APPLICATION_CREDENTIALS. पूरी तरह से ऑटोमेशन के लिए अनुमति देने का फ़्लो, 'एडमिन SDK' सर्वर लाइब्रेरी के साथ ADC का इस्तेमाल करें.

अगर आपका ऐप्लिकेशन Google से बाहर के सर्वर पर चल रहा है, आपको अपने Firebase प्रोजेक्ट से, सेवा खाते की एक JSON फ़ाइल डाउनलोड करनी होगी. जब तक आपके पास ऐसे फ़ाइल सिस्टम का ऐक्सेस है जिसमें निजी कुंजी फ़ाइल, आप एनवायरमेंट वैरिएबल का इस्तेमाल कर सकते हैं अनुमति के अनुरोध स्वीकार करने के लिए GOOGLE_APPLICATION_CREDENTIALS मैन्युअल तरीके से लिए गए इन क्रेडेंशियल का इस्तेमाल करें. अगर आपके पास ऐसी फ़ाइल का ऐक्सेस नहीं है, तो आपको अपने कोड में सेवा खाते की फ़ाइल का रेफ़रंस देना होगा— ऐसा बहुत सावधानी से किया जाना चाहिए, क्योंकि इसमें आपके क्रेडेंशियल बिना किसी जोखिम के दिख सकते हैं.

एडीसी का इस्तेमाल करके क्रेडेंशियल दें

Google ऐप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल (एडीसी), आपके क्रेडेंशियल की जांच करते हैं नीचे दिए गए क्रम में:

  1. ADC यह देखता है कि एनवायरमेंट वैरिएबल GOOGLE_APPLICATION_CREDENTIALS सेट हो गया है. अगर वैरिएबल सेट है, तो ADC, सेवा खाते की उस फ़ाइल का इस्तेमाल करता है जिस पर वैरिएबल पॉइंट करता है.

  2. अगर एनवायरमेंट वैरिएबल सेट नहीं किया गया है, तो एडीसी डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है वह Compute Engine, Google Kubernetes Engine, App Engine, और Cloud Functions, उन सेवाओं पर चलने वाले ऐप्लिकेशन को मुहैया कराते हैं.

  3. अगर ADC ऊपर दिए गए किसी भी क्रेडेंशियल का इस्तेमाल नहीं कर पाता है, तो सिस्टम गड़बड़ी की सूचना देता है.

एडमिन 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 की सेवाएं ऐक्सेस करने के लिए, आपको JSON में एक निजी कुंजी फ़ाइल जनरेट करनी होगी फ़ॉर्मैट.

अपने सेवा खाते के लिए, निजी पासकोड वाली फ़ाइल जनरेट करने के लिए:

  1. Firebase कंसोल में, सेटिंग > सेवा खाते.

  2. नई निजी कुंजी जनरेट करें पर क्लिक करें, फिर कुंजी जनरेट करें पर क्लिक करके पुष्टि करें.

  3. कुंजी वाली 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"

ऊपर दिए गए चरणों को पूरा करने के बाद, ऐप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल (एडीसी) आपके क्रेडेंशियल को स्पष्ट रूप से निर्धारित कर सकता है, जिससे आपको अपनी खाते के क्रेडेंशियल का इस्तेमाल करता है.

ऐक्सेस टोकन को मिंट करने के लिए, क्रेडेंशियल का इस्तेमाल करें

अपने Firebase क्रेडेंशियल का एक साथ इस्तेमाल करें Google ऑथ लाइब्रेरी कृपया कुछ समय तक चलने वाले OAuth 2.0 ऐक्सेस टोकन को फिर से पाने के लिए, अपनी पसंदीदा भाषा का इस्तेमाल करें:

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;

ईमेल भेजने के अनुरोधों का पेलोड अपडेट करें

FCM एचटीटीपी v1, JSON मैसेज के स्ट्रक्चर में एक बड़ा बदलाव ला रहा है पेलोड. मुख्य तौर पर, ये बदलाव यह पक्का करते हैं कि मैसेज सही तरीके से हैंडल किए जाएं जब अलग-अलग क्लाइंट प्लैटफ़ॉर्म पर मिले हों; साथ ही, इन बदलावों से आपको कस्टमाइज़ करने या "ओवरराइड करने" की अतिरिक्त सुविधा मैसेज फ़ील्ड की संख्या.

इस सेक्शन में दिए गए उदाहरणों की जांच करने के अलावा, यहां देखें सभी प्लैटफ़ॉर्म पर मैसेज को अपनी पसंद के मुताबिक बनाना और पाने के लिए, एपीआई का रेफ़रंस एचटीटीपी v1 का कितना इस्तेमाल करना है.

उदाहरण: सूचना भेजने के लिए आसान मैसेज

यहां एक बहुत ही आसान सूचना पेलोड की तुलना की गई है—जिसमें शामिल है सिर्फ़ title, body, और data फ़ील्ड— जो बुनियादी जानकारी दिखाता है लेगसी और एचटीटीपी v1 पेलोड में अंतर है.

इससे पहले

{
  "to": "/topics/news",
  "notification": {
    "title": "Breaking News",
    "body": "New news story available."
  },
  "data": {
    "story_id": "story_12345"
  }
}

इसके बाद

{
  "message": {
    "topic": "news",
    "notification": {
      "title": "Breaking News",
      "body": "New news story available."
    },
    "data": {
      "story_id": "story_12345"
    }
  }
}

उदाहरण: नेस्ट किया गया JSON डेटा

लेगसी मैसेजिंग एपीआई के उलट, एचटीटीपी v1 एपीआई, data फ़ील्ड में नेस्ट की गई JSON वैल्यू के साथ काम नहीं करता. JSON से स्ट्रिंग में बदलने की ज़रूरत है.

इससे पहले

{
  ...
  "data": {
    "keysandvalues": {"key1": "value1", "key2": 123}
  }
}

इसके बाद

{
  "message": {
   ...
    "data": {
      "keysandvalues": "{\"key1\": \"value1\", \"key2\": 123}"
    }
  }
}

उदाहरण: कई प्लैटफ़ॉर्म को टारगेट करना

एक से ज़्यादा प्लैटफ़ॉर्म पर टारगेट करने की सुविधा चालू करने के लिए, लेगसी एपीआई ने बदलाव किए में शामिल हो सकते हैं. वहीं दूसरी ओर, एचटीटीपी v1 प्लैटफ़ॉर्म के लिए खास तौर पर बने पासकोड, जो अलग-अलग प्लैटफ़ॉर्म के बीच अंतर करते हैं साफ़ तौर पर बताया गया हो और डेवलपर को साफ़ तौर पर दिखता हो. इसकी मदद से कई कीवर्ड प्लैटफ़ॉर्म के लिए हमेशा एक ही अनुरोध किया जाता है, जैसा कि नीचे दिए गए सैंपल में दिखाया गया है.

इससे पहले

// Android
{
  "to": "/topics/news",
  "notification": {
    "title": "Breaking News",
    "body": "New news story available.",
    "click_action": "TOP_STORY_ACTIVITY"
  },
  "data": {
    "story_id": "story_12345"
  }
}
// Apple
{
  "to": "/topics/news",
  "notification": {
    "title": "Breaking News",
    "body": "New news story available.",
    "click_action": "HANDLE_BREAKING_NEWS"
  },
  "data": {
    "story_id": "story_12345"
  }
}

इसके बाद

{
  "message": {
    "topic": "news",
    "notification": {
      "title": "Breaking News",
      "body": "New news story available."
    },
    "data": {
      "story_id": "story_12345"
    },
    "android": {
      "notification": {
        "click_action": "TOP_STORY_ACTIVITY"
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "category" : "NEW_MESSAGE_CATEGORY"
        }
      }
    }
  }
}

उदाहरण: प्लैटफ़ॉर्म में बदलाव करने के बाद, अपने हिसाब से बदलाव करना

क्रॉस-प्लैटफ़ॉर्म टारगेटिंग को आसान बनाने के अलावा, एचटीटीपी v1 API हर प्लैटफ़ॉर्म के हिसाब से मैसेज को पसंद के मुताबिक बनाने की सुविधा देता है.

इससे पहले

// Android
{
  "to": "/topics/news",
  "notification": {
    "title": "Breaking News",
    "body": "Check out the Top Story.",
    "click_action": "TOP_STORY_ACTIVITY"
  },
  "data": {
    "story_id": "story_12345"
  }
}
// Apple
{
  "to": "/topics/news",
  "notification": {
    "title": "Breaking News",
    "body": "New news story available.",
    "click_action": "HANDLE_BREAKING_NEWS"
  },
  "data": {
    "story_id": "story_12345"
  }
}

इसके बाद

{
  "message": {
    "topic": "news",
    "notification": {
      "title": "Breaking News",
      "body": "New news story available."
    },
    "data": {
      "story_id": "story_12345"
    },
    "android": {
      "notification": {
        "click_action": "TOP_STORY_ACTIVITY",
        "body": "Check out the Top Story"
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "category" : "NEW_MESSAGE_CATEGORY"
        }
      }
    }
  }
}

उदाहरण: खास डिवाइस को टारगेट करना

एचटीटीपी v1 एपीआई से खास डिवाइसों को टारगेट करने के लिए, डिवाइस के इसके बजाय token कुंजी में वर्तमान पंजीकरण टोकन to कुंजी.

इससे पहले

  { "notification": {
      "body": "This is an FCM notification message!",
      "title": "FCM Message"
    },
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
  }

इसके बाद

{
   "message":{
      "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
      "notification":{
        "body":"This is an FCM notification message!",
        "title":"FCM Message"
      }
   }
}

FCM HTTP v1 API के बारे में ज़्यादा नमूने और जानकारी के लिए, इन्हें देखें: