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

আপনার অ্যাপ সার্ভার বা বিশ্বস্ত পরিবেশ থেকে 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 নিহিতভাবে শংসাপত্রগুলি খুঁজে পেতে সক্ষম।

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 শংসাপত্রগুলি ব্যবহার করুন:

 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> :

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 প্রোটোকল রেফারেন্স আপনার বার্তায় থাকতে পারে এমন সমস্ত প্যারামিটারের একটি তালিকা প্রদান করে।

,

আপনার অ্যাপ সার্ভার বা বিশ্বস্ত পরিবেশ থেকে 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 নিহিতভাবে শংসাপত্রগুলি খুঁজে পেতে সক্ষম।

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 শংসাপত্রগুলি ব্যবহার করুন:

 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> :

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 প্রোটোকল রেফারেন্স আপনার বার্তায় থাকতে পারে এমন সমস্ত প্যারামিটারের একটি তালিকা প্রদান করে।

,

আপনার অ্যাপ সার্ভার বা বিশ্বস্ত পরিবেশ থেকে 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 নিহিতভাবে শংসাপত্রগুলি খুঁজে পেতে সক্ষম।

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 শংসাপত্রগুলি ব্যবহার করুন:

 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> :

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 প্রোটোকল রেফারেন্স আপনার বার্তায় থাকতে পারে এমন সমস্ত প্যারামিটারের একটি তালিকা প্রদান করে।

,

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

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

HTTP V1 প্রেরণ অনুরোধ অনুমোদন

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

  • গুগল অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র (এডিসি)
  • একটি পরিষেবা অ্যাকাউন্ট json ফাইল
  • একটি সার্ভিস অ্যাকাউন্ট থেকে প্রাপ্ত একটি স্বল্পকালীন ওআউথ 2.0 অ্যাক্সেস টোকেন

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

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

এডিসি ব্যবহার করে শংসাপত্র সরবরাহ করুন

গুগল অ্যাপ্লিকেশন ডিফল্ট শংসাপত্রগুলি (এডিসি) নিম্নলিখিত ক্রমে আপনার শংসাপত্রগুলির জন্য চেক করে:

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

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

  3. যদি এডিসি উপরের দুটি শংসাপত্র ব্যবহার করতে না পারে তবে সিস্টেমটি একটি ত্রুটি ছুড়ে দেয়।

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

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

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

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

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

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

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

  2. নতুন ব্যক্তিগত কী জেনারেট করুন ক্লিক করুন, তারপরে জেনারেট কী ক্লিক করে নিশ্চিত করুন।

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

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

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

আপনার পরিষেবা অ্যাকাউন্ট কী ধারণ করে এমন জেএসএন ফাইলের ফাইল পাথটিতে পরিবেশের পরিবর্তনশীল 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"

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

পুদিনা অ্যাক্সেস টোকেনগুলিতে শংসাপত্রগুলি ব্যবহার করুন

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

আপনার পছন্দসই ভাষার জন্য গুগল অ্যাথ লাইব্রেরির সাথে একসাথে আপনার ফায়ারবেস শংসাপত্রগুলি ব্যবহার করুন একটি স্বল্প-কালীন 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);
    });
  });
}

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

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> :

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;

লিগ্যাসি প্রোটোকল প্রেরণ অনুরোধগুলি অনুমোদন করুন

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

লিগ্যাসি সার্ভার কীগুলি স্থানান্তর করুন

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

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

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

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

  • Authorization : কী = আপনার_সভার_কি
    নিশ্চিত করুন যে এটি সার্ভার কী, যার মান Firebase কনসোল সেটিংস ফলকের ক্লাউড মেসেজিং ট্যাবে উপলব্ধ। অ্যান্ড্রয়েড, অ্যাপল প্ল্যাটফর্ম এবং ব্রাউজার কীগুলি FCM দ্বারা প্রত্যাখ্যান করা হয়।
  • Content-Type : জেএসনের জন্য 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" : {
    ...
  },
}

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

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

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

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 এইচটিটিপি স্থিতি কোড পান তবে আপনার সার্ভার কীটি বৈধ নয়।

একটি এক্সএমপিপি সংযোগ অনুমোদিত

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

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

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

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

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

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

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

এক্সএমপিপি সার্ভার

এক্সএমপিপি সার্ভার 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>

এক্সএমপিপি সার্ভার

এক্সএমপিপি সার্ভারটি অবশ্যই Firebase কনসোল সেটিংস ফলকের ক্লাউড মেসেজিং ট্যাব থেকে সার্ভার কী সরবরাহ করে 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"/>

এক্সএমপিপি সার্ভার

<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>

এক্সএমপিপি সার্ভার

<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 বার্তাগুলি রাউটিং করার সময় বাউন্ড রিসোর্স ব্যবহার করে না।

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