FCM HTTP v1 API ব্যবহার করে একটি বার্তা পাঠান

FCM HTTP v1 API ব্যবহার করে, আপনি মেসেজ রিকোয়েস্ট তৈরি করতে এবং এই ধরনের টার্গেটগুলিতে পাঠাতে পারেন:

  • বিষয়ের নাম
  • অবস্থা
  • ডিভাইস নিবন্ধন টোকেন
  • ডিভাইস গ্রুপের নাম (শুধুমাত্র প্রোটোকল)

আপনি পূর্বনির্ধারিত ফিল্ড দিয়ে তৈরি একটি নোটিফিকেশন পেলোড, আপনার নিজস্ব ব্যবহারকারী-সংজ্ঞায়িত ফিল্ডের একটি ডেটা পেলোড, অথবা উভয় প্রকার পেলোড সম্বলিত একটি বার্তা পাঠাতে পারেন। আরও তথ্যের জন্য ‘বার্তার প্রকারভেদ’ দেখুন।

HTTP v1 অনুরোধ পাঠানোর অনুমোদন

আপনার সার্ভার পরিবেশের বিশদ বিবরণের উপর নির্ভর করে, Firebase পরিষেবাগুলিতে সার্ভার অনুরোধ অনুমোদন করতে এই কৌশলগুলির একটি সমন্বয় ব্যবহার করুন:

  • গুগল অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল (ADC)
  • একটি পরিষেবা অ্যাকাউন্ট JSON ফাইল
  • একটি পরিষেবা অ্যাকাউন্ট থেকে প্রাপ্ত স্বল্পস্থায়ী OAuth 2.0 অ্যাক্সেস টোকেন।

আপনার অ্যাপ্লিকেশনটি যদি Compute Engine, Google Kubernetes Engine, App Engine, বা Cloud Functions ( Cloud Functions for Firebase সহ) Compute Engine Google Kubernetes Engine App Engine তাহলে Application Default Credentials (ADC) ব্যবহার করুন। ADC অনুরোধ অনুমোদন করার জন্য ক্রেডেনশিয়াল পেতে আপনার বিদ্যমান ডিফল্ট সার্ভিস অ্যাকাউন্ট ব্যবহার করে, এবং GOOGLE_APPLICATION_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে এটি নমনীয় স্থানীয় পরীক্ষার সুযোগ করে দেয়। অনুমোদন প্রক্রিয়ার সম্পূর্ণ স্বয়ংক্রিয়তার জন্য, Admin SDK সার্ভার লাইব্রেরির সাথে ADC ব্যবহার করুন।

আপনার অ্যাপ্লিকেশনটি যদি গুগল-বহির্ভূত কোনো সার্ভার পরিবেশে চলে , তাহলে আপনাকে আপনার ফায়ারবেস প্রজেক্ট থেকে একটি সার্ভিস অ্যাকাউন্ট JSON ফাইল ডাউনলোড করতে হবে। যতক্ষণ পর্যন্ত প্রাইভেট কী ফাইলটি থাকা ফাইল সিস্টেমে আপনার অ্যাক্সেস থাকবে, ততক্ষণ আপনি এই ম্যানুয়ালি প্রাপ্ত ক্রেডেনশিয়ালগুলো দিয়ে অনুরোধ অনুমোদন করার জন্য GOOGLE_APPLICATION_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবলটি ব্যবহার করতে পারবেন। যদি আপনার এই ধরনের ফাইল অ্যাক্সেস না থাকে, তবে আপনাকে অবশ্যই আপনার কোডে সার্ভিস অ্যাকাউন্ট ফাইলটি রেফারেন্স করতে হবে— যা আপনার ক্রেডেনশিয়াল প্রকাশ হয়ে যাওয়ার ঝুঁকির কারণে অত্যন্ত সতর্কতার সাথে করা উচিত।

ADC ব্যবহার করে পরিচয়পত্র প্রদান করুন

গুগল অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়ালস (ADC) নিম্নলিখিত ক্রমে আপনার ক্রেডেনশিয়ালগুলো যাচাই করে:

  1. ADC যাচাই করে দেখে যে GOOGLE_APPLICATION_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবলটি সেট করা আছে কিনা। যদি ভেরিয়েবলটি সেট করা থাকে, তবে ADC সেই সার্ভিস অ্যাকাউন্ট ফাইলটি ব্যবহার করে যেটিকে ভেরিয়েবলটি নির্দেশ করে।

  2. যদি এনভায়রনমেন্ট ভেরিয়েবল সেট করা না থাকে, তাহলে ADC সেইসব অ্যাপ্লিকেশনগুলির জন্য Compute Engine , Google Kubernetes Engine , App Engine এবং Cloud Functions দ্বারা প্রদত্ত ডিফল্ট সার্ভিস অ্যাকাউন্ট ব্যবহার করে, যেগুলি ঐ সার্ভিসগুলিতে চলে।

  3. যদি 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(),
});

ম্যানুয়ালি পরিচয়পত্র প্রদান করুন।

ফায়ারবেস প্রজেক্টগুলো গুগল সার্ভিস অ্যাকাউন্ট সমর্থন করে, যা ব্যবহার করে আপনি আপনার অ্যাপ সার্ভার বা বিশ্বস্ত পরিবেশ থেকে ফায়ারবেস সার্ভার এপিআই কল করতে পারেন। আপনি যদি স্থানীয়ভাবে কোড ডেভেলপ করেন বা আপনার অ্যাপ্লিকেশনটি অন-প্রিমিসেস-এ ডেপ্লয় করেন, তবে এই সার্ভিস অ্যাকাউন্টের মাধ্যমে প্রাপ্ত ক্রেডেনশিয়াল ব্যবহার করে সার্ভার রিকোয়েস্ট অনুমোদন করতে পারেন।

একটি সার্ভিস অ্যাকাউন্টকে প্রমাণীকরণ করতে এবং ফায়ারবেস সার্ভিসগুলো অ্যাক্সেস করার জন্য অনুমোদন দিতে, আপনাকে অবশ্যই JSON ফরম্যাটে একটি প্রাইভেট কী ফাইল তৈরি করতে হবে।

আপনার পরিষেবা অ্যাকাউন্টের জন্য একটি ব্যক্তিগত কী ফাইল তৈরি করতে:

  1. Firebase কনসোলে, সেটিংস > পরিষেবা অ্যাকাউন্ট খুলুন।

  2. Generate New Private Key-তে ক্লিক করুন, তারপর Generate Key-তে ক্লিক করে নিশ্চিত করুন।

  3. কী-টি ধারণকারী 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) আপনার ক্রেডেনশিয়ালগুলো স্বয়ংক্রিয়ভাবে নির্ধারণ করতে সক্ষম হয়, যার ফলে আপনি গুগল-বহির্ভূত পরিবেশে পরীক্ষা বা চালানোর সময় সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়াল ব্যবহার করতে পারেন।

অ্যাক্সেস টোকেন তৈরি করতে ক্রেডেনশিয়াল ব্যবহার করুন

যদি না আপনি Firebase Admin SDK ব্যবহার করেন, যা স্বয়ংক্রিয়ভাবে অনুমোদন পরিচালনা করে, তাহলে আপনাকে অ্যাক্সেস টোকেন তৈরি করতে হবে এবং অনুরোধ পাঠানোর জন্য সেটি যোগ করতে হবে।

আপনার পছন্দের ভাষার জন্য গুগল অথ লাইব্রেরির সাথে আপনার ফায়ারবেস ক্রেডেনশিয়াল ব্যবহার করে একটি স্বল্পস্থায়ী OAuth 2.0 অ্যাক্সেস টোকেন পুনরুদ্ধার করুন:

নোড.জেএস

 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);
    });
  });
}

এই উদাহরণে, গুগল এপিআই ক্লায়েন্ট লাইব্রেরি একটি 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;

অন্য একটি প্রজেক্টের সার্ভিস অ্যাকাউন্ট দিয়ে অনুমোদন করুন

আপনি অন্য একটি প্রজেক্টের (প্রেরক প্রজেক্ট) সার্ভিস অ্যাকাউন্ট থেকে তৈরি করা একটি OAuth 2.0 টোকেন ব্যবহার করে একটি প্রজেক্টের (টার্গেট প্রজেক্ট) জন্য মেসেজ পাঠাতে পারেন। এর ফলে আপনি অন্যদের পক্ষ থেকে মেসেজ পাঠানোর পাশাপাশি একটি প্রজেক্টেই সার্ভিস অ্যাকাউন্ট ম্যানেজমেন্টকে কেন্দ্রীভূত করতে পারেন। এটি কীভাবে করতে হয় তা জানতে, নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. এপিআই সক্রিয় করুন: প্রেরক প্রজেক্টে ফায়ারবেস ক্লাউড মেসেজিং এপিআই সক্রিয় করা আছে কিনা তা নিশ্চিত করুন।
  2. সার্ভিস অ্যাকাউন্ট তৈরি করুন: প্রেরক প্রজেক্টে একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন।
  3. অনুমতি প্রদান করুন: টার্গেট প্রজেক্টের IAM পেজে সার্ভিস অ্যাকাউন্টের ইমেল অ্যাড্রেসটিকে Firebase Cloud Messaging API Admin রোলটি প্রদান করুন। এর ফলে অন্য প্রজেক্টের সার্ভিস অ্যাকাউন্টটি টার্গেট প্রজেক্টে মেসেজ পাঠাতে পারবে।
  4. টোকেন সংগ্রহ করুন: প্রেরক প্রোজেক্টের সার্ভিস অ্যাকাউন্টের জন্য একটি OAuth 2.0 অ্যাক্সেস টোকেন তৈরি করুন । আপনি নিম্নলিখিত যেকোনো একটি উপায়ে এটি করতে পারেন:
    • সার্ভিস অ্যাকাউন্ট কী JSON ফাইলটি ডাউনলোড এবং ব্যবহার করা।
    • বিকল্পভাবে, আপনার পরিষেবাটি গুগল ক্লাউডে চললে ওয়ার্কলোড আইডেন্টিটি ব্যবহার করতে পারেন।
  5. অনুরোধ পাঠান: আপনার অনুরোধ পাঠানোর Authorization হেডারে প্রাপ্ত অ্যাক্সেস টোকেনটি ব্যবহার করুন। অনুরোধটি অবশ্যই টার্গেট প্রজেক্টের HTTP v1 এন্ডপয়েন্টে করতে হবে।
        POST https://fcm.googleapis.com/v1/TARGET_PROJECT_ID/messages:send

নির্দিষ্ট ডিভাইসগুলিতে বার্তা পাঠান

একটি নির্দিষ্ট ডিভাইসে পাঠানোর জন্য, দেখানো পদ্ধতি অনুযায়ী ডিভাইসটির রেজিস্ট্রেশন টোকেনটি পাস করুন।

বিশ্রাম

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 ব্যবহার করে কীভাবে একটি টেস্ট নোটিফিকেশন মেসেজ পাঠাতে হয় তা বর্ণনা করা হয়েছে।

HTTP অনুরোধ URL

অনুরোধটি নিম্নলিখিত URL-এ নির্দিষ্ট লক্ষ্যে (একটি রেজিস্ট্রেশন টোকেন, টপিক বা কন্ডিশন) একটি HTTP POST অনুরোধ নিয়ে গঠিত:

POST https://fcm.googleapis.com/v1/projectId/messages:send

সম্পূর্ণ HTTP অনুরোধ JSON নমুনা

একটি HTTP POST অনুরোধের মধ্যে কীভাবে একটি নোটিফিকেশন পোস্ট করতে হয়, তার একটি সম্পূর্ণ উদাহরণ এখানে দেওয়া হলো:

{
  "message": {
    "token": REGISTRATION_TOKEN,
    "notification": {
      "title": "FCM API test",
      "body": "This is the body of the notification.",
      "image": "https://cat.10515.net/1.jpg"
    }
  }
}

দৌড়

এপিআই এক্সপ্লোরার- এ নমুনাটি চেষ্টা করার জন্য রান-এ ক্লিক করুন।