HTTP এবং XMPP-এর জন্য অপ্রচলিত FCM লিগ্যাসি API ব্যবহার করে এমন অ্যাপগুলিকে যত তাড়াতাড়ি সম্ভব HTTP v1 API-তে স্থানান্তরিত করা উচিত। এই API-গুলি দিয়ে বার্তা পাঠানো (আপস্ট্রিম বার্তা সহ) 20 জুন, 2023 তারিখে বন্ধ করা হয়েছিল এবং 22 জুলাই, 2024 তারিখে বন্ধ করা শুরু হবে।
প্রভাবিত নির্দিষ্ট বৈশিষ্ট্যগুলি সম্পর্কে আরও জানুন।
চলমান সহায়তা এবং নতুন বৈশিষ্ট্যগুলি ছাড়াও, HTTP v1 API-এর লিগ্যাসি API-এর তুলনায় এই সুবিধাগুলি রয়েছে:
অ্যাক্সেস টোকেনের মাধ্যমে উন্নত নিরাপত্তা HTTP v1 API OAuth2 নিরাপত্তা মডেল অনুসারে স্বল্পস্থায়ী অ্যাক্সেস টোকেন ব্যবহার করে। যদি কোনও অ্যাক্সেস টোকেন সর্বজনীন হয়ে যায়, তবে এটি মেয়াদ শেষ হওয়ার আগে কেবল এক ঘন্টা বা তার বেশি সময় ধরে দূষিতভাবে ব্যবহার করা যেতে পারে। লিগ্যাসি API-তে ব্যবহৃত নিরাপত্তা কীগুলির মতো রিফ্রেশ টোকেনগুলি তত ঘন ঘন প্রেরণ করা হয় না, তাই সেগুলি ক্যাপচার হওয়ার সম্ভাবনা অনেক কম।
প্ল্যাটফর্ম জুড়ে বার্তাগুলির আরও দক্ষ কাস্টমাইজেশন বার্তার মূল অংশের জন্য, HTTP v1 API-তে সাধারণ কী রয়েছে যা সমস্ত লক্ষ্যযুক্ত উদাহরণে যায়, এবং প্ল্যাটফর্ম-নির্দিষ্ট কীগুলি আপনাকে প্ল্যাটফর্ম জুড়ে বার্তাটি কাস্টমাইজ করতে দেয়। এটি আপনাকে "ওভাররাইড" তৈরি করতে দেয় যা একটি একক বার্তায় বিভিন্ন ক্লায়েন্ট প্ল্যাটফর্মে সামান্য ভিন্ন পেলোড পাঠায়।
নতুন ক্লায়েন্ট প্ল্যাটফর্ম সংস্করণের জন্য আরও বর্ধিতযোগ্য এবং ভবিষ্যতের জন্য উপযুক্ত HTTP v1 API অ্যাপল প্ল্যাটফর্ম, অ্যান্ড্রয়েড এবং ওয়েবে উপলব্ধ মেসেজিং বিকল্পগুলিকে সম্পূর্ণরূপে সমর্থন করে। যেহেতু প্রতিটি প্ল্যাটফর্মের JSON পেলোডে নিজস্ব সংজ্ঞায়িত ব্লক থাকে, তাই FCM প্রয়োজন অনুসারে নতুন সংস্করণ এবং নতুন প্ল্যাটফর্মগুলিতে API প্রসারিত করতে পারে।
সার্ভার এন্ডপয়েন্ট আপডেট করুন
HTTP v1 API-এর এন্ডপয়েন্ট URL নিম্নলিখিত দিক থেকে লিগ্যাসি এন্ডপয়েন্ট থেকে আলাদা:
- এটি ভার্সন করা হয়েছে, পাথে
/v1
আছে। - এই পাথটিতে আপনার অ্যাপের জন্য Firebase প্রজেক্টের প্রজেক্ট আইডি
/projects/myproject-ID/
ফর্ম্যাটে রয়েছে। এই আইডিটি Firebase কনসোলের জেনারেল প্রজেক্ট সেটিংস ট্যাবে উপলব্ধ। - এটি স্পষ্টভাবে
send
পদ্ধতিটি:send
হিসাবে নির্দিষ্ট করে।
HTTP v1 এর জন্য সার্ভার এন্ডপয়েন্ট আপডেট করতে, আপনার পাঠানোর অনুরোধের হেডারের এন্ডপয়েন্টে এই উপাদানগুলি যোগ করুন।
আগে HTTP অনুরোধ
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
অনুরোধ পাঠানোর অনুমোদন আপডেট করুন
লিগ্যাসি রিকোয়েস্টে ব্যবহৃত সার্ভার কী স্ট্রিংয়ের পরিবর্তে, HTTP v1 সেন্ড রিকোয়েস্টের জন্য একটি OAuth 2.0 অ্যাক্সেস টোকেন প্রয়োজন। আপনি যদি বার্তা পাঠানোর জন্য অ্যাডমিন SDK ব্যবহার করেন, তাহলে লাইব্রেরি আপনার জন্য টোকেনটি পরিচালনা করে। আপনি যদি raw প্রোটোকল ব্যবহার করেন, তাহলে এই বিভাগে বর্ণিত টোকেনটি পান এবং এটি Authorization: Bearer <valid Oauth 2.0 token>
শিরোনামে যুক্ত করুন।
আগে
Authorization: key=AIzaSyZ-1u...0GBYzPu7Udno5aA
পরে
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
আপনার সার্ভার পরিবেশের বিশদের উপর নির্ভর করে, Firebase পরিষেবাগুলিতে সার্ভার অনুরোধগুলি অনুমোদন করতে এই কৌশলগুলির সংমিশ্রণ ব্যবহার করুন:
- গুগল অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র (ADC)
- একটি পরিষেবা অ্যাকাউন্ট JSON ফাইল
- একটি পরিষেবা অ্যাকাউন্ট থেকে প্রাপ্ত একটি স্বল্পস্থায়ী OAuth 2.0 অ্যাক্সেস টোকেন
যদি আপনার অ্যাপ্লিকেশনটি Compute Engine , Google Kubernetes Engine , App Engine , অথবা Cloud Functions ( Cloud Functions for Firebase সহ) এ চলমান থাকে, তাহলে Application Default Credentials (ADC) ব্যবহার করুন। ADC অনুরোধ অনুমোদনের জন্য শংসাপত্র পেতে আপনার বিদ্যমান ডিফল্ট পরিষেবা অ্যাকাউন্ট ব্যবহার করে এবং ADC পরিবেশ পরিবর্তনশীল GOOGLE_APPLICATION_CREDENTIALS এর মাধ্যমে নমনীয় স্থানীয় পরীক্ষা সক্ষম করে। অনুমোদন প্রবাহের সম্পূর্ণ স্বয়ংক্রিয়করণের জন্য, Admin SDK সার্ভার লাইব্রেরির সাথে ADC ব্যবহার করুন।
যদি আপনার অ্যাপ্লিকেশনটি Google-এর বাইরের কোনও সার্ভার পরিবেশে চলছে , তাহলে আপনার Firebase প্রকল্প থেকে একটি পরিষেবা অ্যাকাউন্ট JSON ফাইল ডাউনলোড করতে হবে। যতক্ষণ পর্যন্ত আপনার কাছে ব্যক্তিগত কী ফাইল ধারণকারী একটি ফাইল সিস্টেমে অ্যাক্সেস থাকে, ততক্ষণ আপনি এই ম্যানুয়ালি প্রাপ্ত শংসাপত্রগুলির সাহায্যে অনুরোধগুলি অনুমোদন করতে পরিবেশগত পরিবর্তনশীল GOOGLE_APPLICATION_CREDENTIALS ব্যবহার করতে পারেন। যদি আপনার কাছে এই ধরণের ফাইল অ্যাক্সেস না থাকে, তাহলে আপনার কোডে পরিষেবা অ্যাকাউন্ট ফাইলটি উল্লেখ করতে হবে— যা অত্যন্ত সতর্কতার সাথে করা উচিত কারণ আপনার শংসাপত্রগুলি প্রকাশ পাওয়ার ঝুঁকি রয়েছে।
ADC ব্যবহার করে শংসাপত্র প্রদান করুন
গুগল অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়ালস (ADC) নিম্নলিখিত ক্রমে আপনার ক্রেডেনশিয়াল পরীক্ষা করে:
ADC পরীক্ষা করে যে পরিবেশগত পরিবর্তনশীল GOOGLE_APPLICATION_CREDENTIALS সেট করা আছে কিনা। যদি পরিবর্তনশীল সেট করা থাকে, তাহলে ADC সেই পরিষেবা অ্যাকাউন্ট ফাইলটি ব্যবহার করে যা পরিবর্তনশীল নির্দেশ করে।
যদি পরিবেশ পরিবর্তনশীল সেট না করা থাকে, তাহলে ADC ডিফল্ট পরিষেবা অ্যাকাউন্ট ব্যবহার করে যা Compute Engine , Google Kubernetes Engine , App Engine এবং Cloud Functions এই পরিষেবাগুলিতে চালিত অ্যাপ্লিকেশনগুলির জন্য প্রদান করে।
যদি ADC উপরের শংসাপত্রগুলির কোনওটি ব্যবহার করতে না পারে, তাহলে সিস্টেমটি একটি ত্রুটি নিক্ষেপ করে।
নিম্নলিখিত অ্যাডমিন SDK কোড উদাহরণটি এই কৌশলটি তুলে ধরে। উদাহরণটি স্পষ্টভাবে অ্যাপ্লিকেশন শংসাপত্রগুলি নির্দিষ্ট করে না। তবে, যতক্ষণ পরিবেশ পরিবর্তনশীল সেট করা থাকে, অথবা যতক্ষণ অ্যাপ্লিকেশনটি Compute Engine , Google Kubernetes Engine , App Engine , অথবা Cloud Functions-এ চলমান থাকে, ততক্ষণ ADC পরোক্ষভাবে শংসাপত্রগুলি খুঁজে পেতে সক্ষম।
নোড.জেএস
admin.initializeApp({
credential: admin.credential.applicationDefault(),
});
জাভা
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
পাইথন
default_app = firebase_admin.initialize_app()
যাও
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
সি#
FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.GetApplicationDefault(),
});
ম্যানুয়ালি শংসাপত্র প্রদান করুন
ফায়ারবেস প্রকল্পগুলি গুগল পরিষেবা অ্যাকাউন্টগুলিকে সমর্থন করে, যা আপনি আপনার অ্যাপ সার্ভার বা বিশ্বস্ত পরিবেশ থেকে ফায়ারবেস সার্ভার API কল করতে ব্যবহার করতে পারেন। আপনি যদি স্থানীয়ভাবে কোড তৈরি করেন বা আপনার অ্যাপ্লিকেশনটি অন-প্রেমিসে স্থাপন করেন, তাহলে আপনি সার্ভার অনুরোধগুলি অনুমোদনের জন্য এই পরিষেবা অ্যাকাউন্টের মাধ্যমে প্রাপ্ত শংসাপত্রগুলি ব্যবহার করতে পারেন।
একটি পরিষেবা অ্যাকাউন্ট প্রমাণীকরণ করতে এবং Firebase পরিষেবাগুলিতে অ্যাক্সেস করার জন্য এটিকে অনুমোদন করতে, আপনাকে অবশ্যই JSON ফর্ম্যাটে একটি ব্যক্তিগত কী ফাইল তৈরি করতে হবে।
আপনার পরিষেবা অ্যাকাউন্টের জন্য একটি ব্যক্তিগত কী ফাইল তৈরি করতে:
Firebase কনসোলে, Settings > Service Accounts খুলুন।
নতুন প্রাইভেট কী তৈরি করুন ক্লিক করুন, তারপর কী তৈরি করুন ক্লিক করে নিশ্চিত করুন।
কীটি ধারণকারী JSON ফাইলটি নিরাপদে সংরক্ষণ করুন।
কোনও পরিষেবা অ্যাকাউন্টের মাধ্যমে অনুমোদন দেওয়ার সময়, আপনার অ্যাপ্লিকেশনে শংসাপত্র সরবরাহ করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে। আপনি হয় GOOGLE_APPLICATION_CREDENTIALS পরিবেশ পরিবর্তনশীল সেট করতে পারেন, অথবা আপনি কোডে পরিষেবা অ্যাকাউন্ট কী-তে স্পষ্টভাবে পথটি পাস করতে পারেন। প্রথম বিকল্পটি আরও নিরাপদ এবং এটি দৃঢ়ভাবে সুপারিশ করা হয়।
পরিবেশ পরিবর্তনশীল সেট করতে:
আপনার সার্ভিস অ্যাকাউন্ট কী ধারণকারী JSON ফাইলের ফাইল পাথে GOOGLE_APPLICATION_CREDENTIALS পরিবেশগত ভেরিয়েবল সেট করুন। এই ভেরিয়েবলটি শুধুমাত্র আপনার বর্তমান শেল সেশনের ক্ষেত্রে প্রযোজ্য, তাই আপনি যদি একটি নতুন সেশন খোলেন, তাহলে ভেরিয়েবলটি আবার সেট করুন।
লিনাক্স বা ম্যাকওএস
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
জানালা
পাওয়ারশেলের সাথে:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
উপরের ধাপগুলি সম্পন্ন করার পরে, অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়ালস (ADC) আপনার ক্রেডেনশিয়ালগুলি পরোক্ষভাবে নির্ধারণ করতে সক্ষম হবে, যা আপনাকে নন-গুগল পরিবেশে পরীক্ষা করার সময় বা চালানোর সময় পরিষেবা অ্যাকাউন্ট ক্রেডেনশিয়ালগুলি ব্যবহার করার অনুমতি দেবে।
টোকেন অ্যাক্সেস করতে শংসাপত্র ব্যবহার করুন
স্বল্পস্থায়ী OAuth 2.0 অ্যাক্সেস টোকেন পুনরুদ্ধার করতে আপনার পছন্দের ভাষার জন্য Google Auth লাইব্রেরির সাথে আপনার Firebase শংসাপত্রগুলি ব্যবহার করুন:
নোড.জেএস
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 ওয়েব টোকেন দেখুন।
পাইথন
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
জাভা
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
স্কোপটি অনুরোধ করুন।
HTTP অনুরোধের শিরোনামে অ্যাক্সেস টোকেন যোগ করতে:
Authorization: Bearer <access_token>
ফর্ম্যাটে Authorization
হেডারের মান হিসেবে টোকেনটি যোগ করুন :
নোড.জেএস
headers: {
'Authorization': 'Bearer ' + accessToken
}
পাইথন
headers = {
'Authorization': 'Bearer ' + _get_access_token(),
'Content-Type': 'application/json; UTF-8',
}
জাভা
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 HTTP v1 JSON মেসেজ পেলোডের কাঠামোতে একটি উল্লেখযোগ্য পরিবর্তন আনে। প্রাথমিকভাবে, এই পরিবর্তনগুলি নিশ্চিত করে যে বিভিন্ন ক্লায়েন্ট প্ল্যাটফর্মে প্রাপ্ত বার্তাগুলি সঠিকভাবে পরিচালনা করা হয়; অতিরিক্তভাবে, পরিবর্তনগুলি আপনাকে প্রতিটি প্ল্যাটফর্মের জন্য মেসেজ ফিল্ডগুলি কাস্টমাইজ বা "ওভাররাইড" করার জন্য অতিরিক্ত নমনীয়তা দেয়।
এই বিভাগের উদাহরণগুলি পরীক্ষা করার পাশাপাশি, প্ল্যাটফর্ম জুড়ে একটি বার্তা কাস্টমাইজ করা দেখুন এবং HTTP v1 এর সাথে পরিচিত হতে API রেফারেন্স পর্যালোচনা করুন।
উদাহরণ: সহজ বিজ্ঞপ্তি বার্তা
এখানে একটি খুব সহজ নোটিফিকেশন পেলোডের তুলনা দেওয়া হল—যাতে শুধুমাত্র title
, body
এবং data
ফিল্ড রয়েছে—যা লিগ্যাসি এবং HTTP 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 ডেটা
লিগ্যাসি মেসেজিং API-এর বিপরীতে, HTTP v1 API data
ক্ষেত্রে নেস্টেড JSON মান সমর্থন করে না। JSON থেকে স্ট্রিং-এ রূপান্তর প্রয়োজন।
আগে
{
...
"data": {
"keysandvalues": {"key1": "value1", "key2": 123}
}
}
পরে
{
"message": {
...
"data": {
"keysandvalues": "{\"key1\": \"value1\", \"key2\": 123}"
}
}
}
উদাহরণ: একাধিক প্ল্যাটফর্ম লক্ষ্য করে
মাল্টিপল-প্ল্যাটফর্ম টার্গেটিং সক্ষম করার জন্য, লিগ্যাসি API ব্যাকএন্ডে ওভাররাইড সম্পাদন করে। বিপরীতে, HTTP 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"
}
}
}
}
}
উদাহরণ: প্ল্যাটফর্ম ওভাররাইডের মাধ্যমে কাস্টমাইজ করা
বার্তাগুলির ক্রস-প্ল্যাটফর্ম টার্গেটিং সহজ করার পাশাপাশি, HTTP 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"
}
}
}
}
}
উদাহরণ: নির্দিষ্ট ডিভাইসগুলিকে টার্গেট করা
HTTP v1 API ব্যবহার করে নির্দিষ্ট ডিভাইসগুলিকে টার্গেট করতে, to
কী-এর পরিবর্তে token
কী-তে ডিভাইসের বর্তমান নিবন্ধন টোকেন প্রদান করুন।
আগে
{ "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 সম্পর্কে আরও নমুনা এবং তথ্যের জন্য, নিম্নলিখিতটি দেখুন:
HTTP v1 API ব্যবহার করে অ্যাপ সার্ভার সেন্ড রিকোয়েস্ট তৈরি করার নির্দেশিকা। সমস্ত "REST" স্নিপেট v1 API ব্যবহার করে যদি না নির্দিষ্টভাবে উল্লেখ করা হয়।