অনুমতি পাঠান অনুরোধ

আপনার অ্যাপ সার্ভার বা বিশ্বস্ত পরিবেশ থেকে FCM এ পাঠানো অনুরোধ অনুমোদিত হতে হবে। অবচিত লিগ্যাসি HTTP API এবং HTTP v1 API অনুমোদনের মধ্যে এই গুরুত্বপূর্ণ পার্থক্যগুলি নোট করুন:

  • FCM HTTP v1 API একটি স্বল্পকালীন OAuth 2.0 অ্যাক্সেস টোকেন সহ অনুরোধগুলি অনুমোদন করে৷ এই টোকেনটি মিন্ট করতে, আপনি Google অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র ব্যবহার করতে পারেন (Google সার্ভার পরিবেশে) এবং/অথবা একটি পরিষেবা অ্যাকাউন্টের জন্য তৈরি করা একটি JSON ব্যক্তিগত কী ফাইল থেকে প্রয়োজনীয় শংসাপত্রগুলি ম্যানুয়ালি পেতে পারেন৷ আপনি যদি বার্তা পাঠানোর জন্য Firebase Admin SDK ব্যবহার করেন, লাইব্রেরি আপনার জন্য টোকেন পরিচালনা করে।
  • অপ্রচলিত লিগ্যাসি প্রোটোকল শুধুমাত্র Firebase কনসোল থেকে প্রাপ্ত দীর্ঘস্থায়ী API কী ব্যবহার করতে পারে।

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

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

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

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

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

ADC ব্যবহার করে শংসাপত্র প্রদান করুন

Google Application Default Credentials (ADC) নিম্নলিখিত ক্রমে আপনার শংসাপত্রগুলি পরীক্ষা করে:

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

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

  3. যদি ADC উপরের শংসাপত্রগুলির মধ্যে একটি ব্যবহার করতে না পারে, তাহলে সিস্টেমটি একটি ত্রুটি নিক্ষেপ করে৷

নিম্নলিখিত প্রশাসক SDK কোড উদাহরণ এই কৌশল চিত্রিত. উদাহরণটি স্পষ্টভাবে অ্যাপ্লিকেশন শংসাপত্রগুলি নির্দিষ্ট করে না। যাইহোক, যতক্ষণ পর্যন্ত এনভায়রনমেন্ট ভেরিয়েবল সেট করা থাকে বা যতক্ষণ পর্যন্ত অ্যাপ্লিকেশনটি Compute Engine , Google Kubernetes Engine , App Engine বা ক্লাউড ফাংশনে চলছে ততক্ষণ পর্যন্ত ADC নিহিতভাবে শংসাপত্রগুলি খুঁজে পেতে সক্ষম।

Node.js

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

ম্যানুয়ালি শংসাপত্র প্রদান করুন

Firebase প্রকল্পগুলি Google পরিষেবা অ্যাকাউন্টগুলিকে সমর্থন করে, যা আপনি আপনার অ্যাপ সার্ভার বা বিশ্বস্ত পরিবেশ থেকে Firebase সার্ভার API কল করতে ব্যবহার করতে পারেন৷ আপনি যদি স্থানীয়ভাবে কোড ডেভেলপ করছেন বা আপনার অ্যাপ্লিকেশনটি প্রাঙ্গনে স্থাপন করছেন, আপনি সার্ভার অনুরোধ অনুমোদন করতে এই পরিষেবা অ্যাকাউন্টের মাধ্যমে প্রাপ্ত শংসাপত্রগুলি ব্যবহার করতে পারেন৷

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

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

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

  2. জেনারেট নিউ প্রাইভেট কী ক্লিক করুন, তারপর জেনারেট কী ক্লিক করে নিশ্চিত করুন।

  3. কী আছে এমন JSON ফাইলটি নিরাপদে সংরক্ষণ করুন।

একটি পরিষেবা অ্যাকাউন্টের মাধ্যমে অনুমোদন করার সময়, আপনার আবেদনে শংসাপত্রগুলি প্রদান করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে৷ আপনি হয় GOOGLE_APPLICATION_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন, অথবা আপনি কোডে পরিষেবা অ্যাকাউন্ট কী-এর পথটি স্পষ্টভাবে পাস করতে পারেন৷ প্রথম বিকল্পটি আরো নিরাপদ এবং দৃঢ়ভাবে সুপারিশ করা হয়।

পরিবেশ পরিবর্তনশীল সেট করতে:

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

লিনাক্স বা ম্যাকোস

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

উইন্ডোজ

PowerShell এর সাথে:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

আপনি উপরের ধাপগুলি সম্পন্ন করার পরে, অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র (ADC) আপনার প্রমাণপত্রগুলিকে স্পষ্টভাবে নির্ধারণ করতে সক্ষম হয়, যা আপনাকে নন-Google পরিবেশে পরীক্ষা বা চালানোর সময় পরিষেবা অ্যাকাউন্টের শংসাপত্রগুলি ব্যবহার করার অনুমতি দেয়।

মিন্ট অ্যাক্সেস টোকেন করতে প্রমাণপত্রাদি ব্যবহার করুন

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

একটি স্বল্পস্থায়ী OAuth 2.0 অ্যাক্সেস টোকেন পুনরুদ্ধার করতে আপনার পছন্দের ভাষার জন্য Google Auth লাইব্রেরির সাথে একসাথে আপনার 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 ওয়েব টোকেন দেখুন।

পাইথন

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 শিরোনামের মান হিসাবে টোকেন যুক্ত করুন Authorization: Bearer <access_token> :

node.js

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;

উত্তরাধিকার প্রোটোকল অনুরোধ পাঠান অনুমোদন

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

লিগ্যাসি সার্ভার কী মাইগ্রেট করুন

মার্চ 2020 থেকে শুরু করে, FCM লিগ্যাসি সার্ভার কী তৈরি করা বন্ধ করে দিয়েছে। বিদ্যমান লিগ্যাসি সার্ভার কীগুলি কাজ করতে থাকবে, তবে আমরা সুপারিশ করছি যে আপনি পরিবর্তে Firebase কনসোলে সার্ভার কী লেবেলযুক্ত কীটির নতুন সংস্করণ ব্যবহার করুন৷

আপনি যদি একটি বিদ্যমান লিগ্যাসি সার্ভার কী মুছতে চান, আপনি Google Cloud কনসোলে তা করতে পারেন।

HTTP অনুরোধ অনুমোদন

একটি বার্তা অনুরোধ দুটি অংশ নিয়ে গঠিত: HTTP শিরোনাম এবং HTTP বডি। HTTP হেডারে অবশ্যই নিম্নলিখিত শিরোনাম থাকতে হবে:

  • Authorization : কী=YOUR_SERVER_KEY
    নিশ্চিত করুন যে এটি সার্ভার কী, যার মান Firebase কনসোল সেটিংস ফলকের ক্লাউড মেসেজিং ট্যাবে উপলব্ধ। Android, Apple প্ল্যাটফর্ম, এবং ব্রাউজার কীগুলি FCM দ্বারা প্রত্যাখ্যান করা হয়েছে৷
  • Content-Type : JSON-এর জন্য application/json ; application/x-www-form-urlencoded;charset=UTF-8 প্লেইন টেক্সটের জন্য।
    যদি Content-Type বাদ দেওয়া হয়, তাহলে বিন্যাসটিকে সাধারণ পাঠ্য বলে ধরে নেওয়া হয়।

যেমন:

Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "data" : {
    ...
  },
}

পাঠানোর অনুরোধ তৈরি করার সম্পূর্ণ বিশদ বিবরণের জন্য বিল্ড সেন্ড রিকোয়েস্ট দেখুন। লিগ্যাসি HTTP প্রোটোকল রেফারেন্স আপনার বার্তায় থাকতে পারে এমন সমস্ত প্যারামিটারের একটি তালিকা প্রদান করে।

সার্ভার কী এর বৈধতা পরীক্ষা করা হচ্ছে

বার্তা পাঠানোর সময় আপনি যদি প্রমাণীকরণের ত্রুটি পান, আপনার সার্ভার কীটির বৈধতা পরীক্ষা করুন। উদাহরণস্বরূপ, লিনাক্সে, নিম্নলিখিত কমান্ডটি চালান:

api_key=YOUR_SERVER_KEY

curl --header "Authorization: key=$api_key" \
     --header Content-Type:"application/json" \
     https://fcm.googleapis.com/fcm/send \
     -d "{\"registration_ids\":[\"ABC\"]}"

আপনি যদি একটি 401 HTTP স্থিতি কোড পান তবে আপনার সার্ভার কী বৈধ নয়৷

একটি XMPP সংযোগ অনুমোদন করুন

XMPP এর সাথে, আপনি FCM সার্ভারের সাথে একটি অবিরাম, অ্যাসিঙ্ক্রোনাস, দ্বিমুখী সংযোগ বজায় রাখতে পারেন। সংযোগটি আপনার সার্ভার এবং আপনার ব্যবহারকারীদের FCM সংযুক্ত ডিভাইসগুলির মধ্যে বার্তা পাঠাতে এবং গ্রহণ করতে ব্যবহার করা যেতে পারে।

আপনি FCM সাথে দীর্ঘস্থায়ী সংযোগ পরিচালনা করতে বেশিরভাগ XMPP লাইব্রেরি ব্যবহার করতে পারেন। XMPP এন্ডপয়েন্ট fcm-xmpp.googleapis.com:5235 এ চলে। অ-উৎপাদন ব্যবহারকারীদের সাথে কার্যকারিতা পরীক্ষা করার সময়, আপনার পরিবর্তে fcm-xmpp.googleapis.com:5236 (বিভিন্ন পোর্টটি নোট করুন) এ প্রি-প্রোডাকশন সার্ভারের সাথে সংযোগ করা উচিত।

প্রি-প্রোডাকশনে নিয়মিত পরীক্ষা করা (একটি ছোট পরিবেশ যেখানে সর্বশেষ FCM তৈরি হয়) পরীক্ষার কোড থেকে প্রকৃত ব্যবহারকারীদের বিচ্ছিন্ন করার জন্য উপকারী। পরীক্ষামূলক ডিভাইস এবং fcm-xmpp.googleapis.com:5236 সাথে সংযোগকারী পরীক্ষার কোড একটি ভিন্ন FCM প্রেরক আইডি ব্যবহার করা উচিত যাতে উৎপাদন ব্যবহারকারীদের পরীক্ষামূলক বার্তা পাঠানোর বা পরীক্ষার সংযোগের মাধ্যমে উৎপাদন ট্র্যাফিক থেকে আপস্ট্রিম বার্তা পাঠানোর ঝুঁকি এড়াতে হয়।

সংযোগের দুটি গুরুত্বপূর্ণ প্রয়োজনীয়তা রয়েছে:

  • আপনাকে অবশ্যই একটি ট্রান্সপোর্ট লেয়ার সিকিউরিটি (TLS) সংযোগ শুরু করতে হবে। মনে রাখবেন যে FCM বর্তমানে STARTTLS এক্সটেনশন সমর্থন করে না।
  • FCM জন্য <your_ FCM _Sender_Id>@fcm.googleapis.com ( FCM প্রেরক আইডি ) এবং পাসওয়ার্ড হিসাবে সার্ভার কী ব্যবহার করে একটি SASL প্লেইন প্রমাণীকরণ প্রক্রিয়া প্রয়োজন৷ এই মানগুলি Firebase কনসোল সেটিংস ফলকের ক্লাউড মেসেজিং ট্যাবে উপলব্ধ৷

যদি কোনো সময়ে সংযোগ ব্যর্থ হয়, আপনার অবিলম্বে পুনরায় সংযোগ করা উচিত। প্রমাণীকরণের পরে সংযোগ বিচ্ছিন্ন হওয়ার পরে ব্যাক অফ করার দরকার নেই। প্রতিটি প্রেরক আইডির জন্য, FCM সমান্তরালভাবে 2500টি সংযোগের অনুমতি দেয়।

নিম্নলিখিত স্নিপেটগুলি ব্যাখ্যা করে কিভাবে FCM সাথে একটি XMPP সংযোগের জন্য প্রমাণীকরণ এবং অনুমোদন করতে হয়।

XMPP সার্ভার

XMPP সার্ভার FCM সাথে একটি সংযোগের অনুরোধ করে

<stream:stream to="fcm.googleapis.com"
        version="1.0" xmlns="jabber:client"
        xmlns:stream="http://etherx.jabber.org/streams">

FCM

FCM সংযোগ খোলে এবং PLAIN পদ্ধতি সহ একটি প্রমাণীকরণ প্রক্রিয়ার অনুরোধ করে।

<stream:features>
  <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
    <mechanism>X-OAUTH2</mechanism>
    <mechanism>X-GOOGLE-TOKEN</mechanism>
    <mechanism>PLAIN</mechanism>
  </mechanisms>
</stream:features>

XMPP সার্ভার

Firebase কনসোল সেটিংস ফলকের ক্লাউড মেসেজিং ট্যাব থেকে সার্ভার কী প্রদান করে XMPP সার্ভারকে PLAIN প্রমাণীকরণ পদ্ধতি ব্যবহার করে প্রতিক্রিয়া জানাতে হবে।

<auth mechanism="PLAIN"
xmlns="urn:ietf:params:xml:ns:xmpp-sasl">MTI2MjAwMzQ3OTMzQHByb2plY3RzLmdjbS5hb
mFTeUIzcmNaTmtmbnFLZEZiOW1oekNCaVlwT1JEQTJKV1d0dw==</auth>

FCM

<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>

XMPP সার্ভার

<stream:stream to="fcm.googleapis.com"
        version="1.0" xmlns="jabber:client"
        xmlns:stream="http://etherx.jabber.org/streams">

FCM

<stream:features>
  <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/>
  <session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
</stream:features>

XMPP সার্ভার

<iq type="set">
  <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"></bind>
</iq>

FCM

<iq type="result">
  <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
    <jid>SENDER_ID@fcm.googleapis.com/RESOURCE</jid>
  </bind>
</iq>

দ্রষ্টব্য: FCM বার্তা রাউটিং করার সময় আবদ্ধ সম্পদ ব্যবহার করে না।

পাঠানোর অনুরোধ তৈরি করার সম্পূর্ণ বিশদ বিবরণের জন্য বিল্ড সেন্ড রিকোয়েস্ট দেখুন। লিগ্যাসি XMPP প্রোটোকল রেফারেন্স আপনার বার্তায় থাকতে পারে এমন সমস্ত প্যারামিটারের একটি তালিকা প্রদান করে।