Google 致力于为黑人社区推动种族平等。查看具体举措

আপনার সার্ভার পরিবেশ এবং এফসিএম

ফায়ারবেস ক্লাউড মেসেজিংয়ের সার্ভার সাইডে দুটি উপাদান রয়েছে:

  • গুগল সরবরাহ করেছে এফসিএম ব্যাকএন্ড
  • আপনার অ্যাপ্লিকেশন সার্ভার বা অন্যান্য বিশ্বস্ত সার্ভার পরিবেশ যেখানে আপনার সার্ভার লজিক চলে, যেমন ফায়ারবেসের জন্য ক্লাউড ফাংশন বা গুগল দ্বারা পরিচালিত অন্যান্য ক্লাউড পরিবেশ।

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

বিশ্বস্ত সার্ভার পরিবেশের জন্য প্রয়োজনীয়তা

আপনার অ্যাপ্লিকেশন সার্ভার পরিবেশ অবশ্যই নিম্নলিখিত মানদণ্ড পূরণ করতে হবে:

  • FCM ব্যাকএন্ডে সঠিকভাবে ফর্ম্যাট বার্তা অনুরোধগুলি প্রেরণ করতে সক্ষম।
  • ক্ষতিকারক ব্যাক-অফ ব্যবহার করে অনুরোধগুলি হ্যান্ডেল করতে এবং তাদের পুনরায় পাঠাতে সক্ষম
  • সার্ভার অনুমোদনের শংসাপত্র এবং ক্লায়েন্ট নিবন্ধকরণ টোকেনগুলি নিরাপদে সঞ্চয় করতে সক্ষম।
  • এক্সএমপিপি প্রোটোকলের জন্য (যদি ব্যবহৃত হয়) তবে সার্ভার অবশ্যই প্রেরিত প্রতিটি বার্তা স্বতন্ত্রভাবে সনাক্ত করতে বার্তা আইডি তৈরি করতে সক্ষম হতে হবে (এফসিএম এইচটিটিপি ব্যাকএন্ড বার্তা আইডি উত্পন্ন করে এবং প্রতিক্রিয়াতে সেগুলি ফেরত দেয়)। এক্সএমপিপি বার্তা আইডি প্রতিটি প্রেরক আইডি অনন্য হওয়া উচিত।

একটি সার্ভার বিকল্প নির্বাচন করা

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

FCM সার্ভারের সাথে কথোপকথনের জন্য বিকল্পগুলির মধ্যে রয়েছে:
  • ফায়ারবেস অ্যাডমিন এসডিকে, যা নোড , জাভা , পাইথন , সি # , এবং গো সমর্থন করে
  • আরও সুরক্ষিত অনুমোদন এবং নমনীয় ক্রস-প্ল্যাটফর্ম মেসেজিং ক্ষমতা সহ ফোটোম এইচটিটিপি ভি 1 এপিআই , যা প্রোটোকল বিকল্পগুলির মধ্যে সর্বাধিক আপ টু ডেট (ফায়ারবেস অ্যাডমিন এসডিকে এই প্রোটোকলের উপর ভিত্তি করে তৈরি করা হয়েছে এবং এর সমস্ত অন্তর্নিহিত সুবিধা সরবরাহ করে)।
  • উত্তরাধিকার HTTP প্রোটোকল।
  • এক্সএমপিপি সার্ভার প্রোটোকল। মনে রাখবেন যে আপনি যদি আপনার ক্লায়েন্ট অ্যাপ্লিকেশনগুলি থেকে আপ স্ট্রিম মেসেজিং ব্যবহার করতে চান তবে আপনাকে অবশ্যই এক্সএমপিপি ব্যবহার করতে হবে।

এফসিএম এর জন্য ফায়ারবেস অ্যাডমিন এসডিকে

অ্যাডমিন এফসিএম এপিআই ব্যাকএন্ডের সাথে প্রমাণীকরণ পরিচালনা করে এবং বার্তা প্রেরণ এবং বিষয় সাবস্ক্রিপশন পরিচালনা করতে সহায়তা করে। ফায়ারবেস অ্যাডমিন এসডিকে দিয়ে আপনি এটি করতে পারেন:

  • স্বতন্ত্র ডিভাইসে বার্তা প্রেরণ করুন
  • এক বা একাধিক বিষয়ের সাথে মেলে এমন বিষয় এবং শর্ত বিবরণীতে বার্তা প্রেরণ করুন।
  • বিষয়গুলিতে এবং বিষয়গুলি থেকে ডিভাইসগুলি সাবস্ক্রাইব করুন এবং সদস্যতা বাতিল করুন
  • বিভিন্ন টার্গেট প্ল্যাটফর্মের জন্য তৈরি বার্তা পেডলোডগুলি তৈরি করুন

অ্যাডমিন নোড.জেএস এসডিকে ডিভাইস গ্রুপগুলিতে বার্তা প্রেরণের জন্য পদ্ধতি সরবরাহ করে।

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

এফসিএম সার্ভার প্রোটোকল

বর্তমানে এফসিএম এই কাঁচা সার্ভার প্রোটোকল সরবরাহ করে:

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

এক্সএমপিপি মেসেজিং নিম্নলিখিত উপায়ে HTTP মেসেজিং থেকে পৃথক:

  • প্রবাহ / ডাউন স্ট্রিম বার্তা
    • এইচটিটিপি: কেবল ডাউনস্ট্রিম, ক্লাউড থেকে ডিভাইস।
    • এক্সএমপিপি: প্রবাহ এবং ডাউন স্ট্রিম (ডিভাইস থেকে ক্লাউড, ক্লাউড থেকে ডিভাইস)।
  • মেসেজিং (সিঙ্ক্রোনাস বা অ্যাসিনক্রোনাস)
    • এইচটিটিপি: সিঙ্ক্রোনাস। অ্যাপ সার্ভারগুলি HTTP পোষ্ট অনুরোধ হিসাবে বার্তা পাঠায় এবং প্রতিক্রিয়াটির জন্য অপেক্ষা করুন for এই প্রক্রিয়াটি সিঙ্ক্রোনাস এবং প্রতিক্রিয়া না পাওয়া পর্যন্ত প্রেরককে অন্য বার্তা প্রেরণ থেকে বাধা দেয়।
    • এক্সএমপিপি: অ্যাসিনক্রোনাস। অ্যাপ সার্ভারগুলি অবিচ্ছিন্ন এক্সএমপিপি সংযোগের জন্য তাদের সমস্ত ডিভাইস থেকে পুরো লাইন গতিতে / থেকে বার্তা প্রেরণ / গ্রহণ করে। এক্সএমপিপি সংযোগ সার্ভারটি স্বীকৃতি বা ব্যর্থতার বিজ্ঞপ্তিগুলি (বিশেষ ACK এবং NACK JSON- এনকোডড এক্সএমপিপি বার্তার আকারে) অবিচ্ছিন্নভাবে প্রেরণ করে।
  • জেএসওএন
    • HTTP: জেএসএন বার্তা এইচটিটিপি পোস্ট হিসাবে প্রেরণ করা হয়েছে।
    • এক্সএমপিপি: জেএসওএন বার্তাগুলি এক্সএমপিপি বার্তাগুলিতে আবদ্ধ।
  • সাধারণ পাঠ্য
    • HTTP: সাধারণ পাঠ্য বার্তাগুলি HTTP পোষ্ট হিসাবে প্রেরণ করা হয়েছে।
    • এক্সএমপিপি: সমর্থিত নয়।
  • মাল্টিকাস্ট ডাউনস্ট্রিম একাধিক নিবন্ধকরণ টোকেনে প্রেরণ করে।
    • HTTP: JSON বার্তা ফর্ম্যাটে সমর্থিত।
    • এক্সএমপিপি: সমর্থিত নয়।

HTTP সার্ভার প্রোটোকল প্রয়োগ করা হচ্ছে ing

একটি বার্তা প্রেরণের জন্য, অ্যাপ্লিকেশন সার্ভারটি একটি HTTP শিরোনাম এবং জেএসএন কী মান জোড় সমন্বিত একটি HTTP বডি সহ একটি পোষ্ট অনুরোধ জারি করে। শিরোনাম এবং বডি বিকল্পগুলির বিশদগুলির জন্য, অ্যাপ্লিকেশন সার্ভারের অনুরোধগুলি তৈরি করুন দেখুন Build

এক্সএমপিপি সার্ভার প্রোটোকল প্রয়োগ করা হচ্ছে

এফসিএম বার্তাগুলির জন্য জেএসএন পে-লোড এই ব্যতিক্রমগুলির সাথে এইচটিটিপি প্রোটোকলের অনুরূপ:

  • একাধিক প্রাপকদের জন্য কোনও সমর্থন নেই।
  • এফসিএম ক্ষেত্র message_id , যা প্রয়োজনীয়। এই আইডিটি এক্সএমপিপি সংযোগে মেসেজটি স্বতন্ত্রভাবে সনাক্ত করে। FCM থেকে ACK বা NACK অ্যাপ্লিকেশন সার্ভার থেকে FCM এ পাঠানো কোনও বার্তা সনাক্ত করতে message_id ব্যবহার করে। সুতরাং, এটি গুরুত্বপূর্ণ যে এই message_id কেবল অনন্য (প্রতি প্রেরক আইডি ) নয়, তবে সর্বদা উপস্থিত থাকে।
  • এক্সএমপিপি FCM এর সাথে অবিচ্ছিন্ন সংযোগ অনুমোদনের জন্য সার্ভার কী ব্যবহার করে। আরও তথ্যের জন্য অনুমোদন প্রেরণের অনুরোধ দেখুন।

নিয়মিত এফসিএম বার্তা ছাড়াও, নিয়ন্ত্রণ বার্তাগুলি প্রেরণ করা হয়, message_type অবজেক্টে message_type ক্ষেত্র দ্বারা নির্দেশিত। মানটি 'আক্ক' বা 'ন্যাক', বা 'নিয়ন্ত্রণ' (নীচে ফর্ম্যাটগুলি দেখুন) হতে পারে। অজানা message_type সাথে যে কোনও এফসিএম বার্তা আপনার সার্ভার দ্বারা উপেক্ষা করা যেতে পারে।

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

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

সমস্ত বার্তা পরামিতিগুলির তালিকার জন্য প্রোটোকল রেফারেন্সটি দেখুন।

অনুরোধ বিন্যাস

পেইড সহ বার্তা - বিজ্ঞপ্তি বার্তা

একটি বিজ্ঞপ্তি বার্তার জন্য এখানে একটি এক্সএমপিপি পদক্ষেপ রয়েছে:

<message id="">
  <gcm xmlns="google:mobile:data">
  {
     "to":"REGISTRATION_ID",  // "to" replaces "registration_ids"
     "notification": {
        "title": "Portugal vs. Denmark”,
        "body”: "5 to 1”
      },
      "time_to_live":"600"
  }
  </gcm>
</message>

পেইড সহ বার্তা - ডেটা বার্তা

এখানে একটি এক্সএমপিপি স্তরের একটি অ্যাপ্লিকেশন সার্ভার থেকে FCM- তে JSON বার্তা সম্বলিত রয়েছে:

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to":"REGISTRATION_ID",  // "to" replaces "registration_ids"
      "message_id":"m-1366082849205" // new required field
      "data":
      {
          "hello":"world",
      }
      "time_to_live":"600",
  }
  </gcm>
</message>

প্রতিক্রিয়া বিন্যাস

একটি এফসিএম প্রতিক্রিয়াতে তিনটি সম্ভাব্য ফর্ম থাকতে পারে। প্রথমটি হ'ল নিয়মিত 'আক্ক' বার্তা। কিন্তু যখন প্রতিক্রিয়াটিতে একটি ত্রুটি রয়েছে, নীচে বর্ণিত বার্তাটি নিতে পারে এমন দুটি পৃথক রূপ রয়েছে।

ACK বার্তা

এফসিএম থেকে অ্যাপ সার্ভারে ACK / NACK বার্তা সম্বলিত একটি এক্সএমপিপি স্তম্ভ রয়েছে:

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "from":"REGID",
      "message_id":"m-1366082849205"
      "message_type":"ack"
  }
  </gcm>
</message>

ন্যাক বার্তা

একটি ন্যাক ত্রুটি একটি নিয়মিত এক্সএমপিপি বার্তা যেখানে message_type স্থিতি বার্তাটি " message_type " থাকে। একটি ন্যাক বার্তায় রয়েছে:

  • একটি ন্যাক ত্রুটি কোড।
  • একটি ন্যাক ত্রুটি বর্ণনা।

নীচে কয়েকটি উদাহরণ দেওয়া হল।

খারাপ নিবন্ধকরণ:

<message>
  <gcm xmlns="google:mobile:data">
  {
    "message_type":"nack",
    "message_id":"msgId1",
    "from":"SomeInvalidRegistrationToken",
    "error":"BAD_REGISTRATION",
    "error_description":"Invalid token on 'to' field: SomeInvalidRegistrationId"
  }
  </gcm>
</message>

অবৈধ জেএসএন:

<message>
 <gcm xmlns="google:mobile:data">
 {
   "message_type":"nack",
   "message_id":"msgId1",
   "from":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
   "error":"INVALID_JSON",
   "error_description":"InvalidJson: JSON_TYPE_ERROR : Field \"time_to_live\" must be a JSON java.lang.Number: abc"
 }
 </gcm>
</message>

ডিভাইসের বার্তার হার ছাড়িয়ে গেছে:

<message id="...">
  <gcm xmlns="google:mobile:data">
  {
    "message_type":"nack",
    "message_id":"msgId1",
    "from":"REGID",
    "error":"DEVICE_MESSAGE_RATE_EXCEEDED",
    "error_description":"Downstream message rate exceeded for this registration id"
  }
  </gcm>
</message>

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

স্তানজার ত্রুটি

নির্দিষ্ট কিছু ক্ষেত্রে আপনি স্তম্ভের ত্রুটিও পেতে পারেন। একটি স্তবকের ত্রুটিতে রয়েছে:

  • স্তবকের ত্রুটি কোড।
  • স্ট্যানজা ত্রুটির বর্ণনা (নিখরচায় পাঠ্য)।

উদাহরণ স্বরূপ:

<message id="3" type="error" to="123456789@fcm.googleapis.com/ABC">
  <gcm xmlns="google:mobile:data">
     {"random": "text"}
  </gcm>
  <error code="400" type="modify">
    <bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
    <text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">
      InvalidJson: JSON_PARSING_ERROR : Missing Required Field: message_id\n
    </text>
  </error>
</message>

বার্তা নিয়ন্ত্রণ করুন

পর্যায়ক্রমে, এফসিএম লোড ভারসাম্য সম্পাদনের জন্য একটি সংযোগ বন্ধ করতে হবে। সংযোগটি বন্ধ করার আগে, এফসিএম সংযোগটি নিষ্কাশিত হচ্ছে এবং এটি শীঘ্রই বন্ধ হয়ে যাবে তা বোঝাতে একটি CONNECTION_DRAINING বার্তা প্রেরণ করে। "ড্রইং" বলতে কোনও সংযোগে আসা বার্তাগুলির প্রবাহ বন্ধ করে দেওয়া বোঝায়, তবে পাইপলাইনে ইতিমধ্যে যা রয়েছে তা চালিয়ে যাওয়ার অনুমতি দেওয়া হচ্ছে। আপনি যখন একটি CONNECTION_DRAINING বার্তা পান, আপনার প্রয়োজনে অন্য কোনও সংযোগ খোলার সাথে সাথে অন্য একটি FCM সংযোগে বার্তা প্রেরণ শুরু করা উচিত begin তবে আপনার মূল সংযোগটি উন্মুক্ত রাখা উচিত এবং সংযোগের উপরে আসা বার্তাগুলি গ্রহণ করা অবিরত করা উচিত (এবং সেগুলি ACCing করা) —এফসিএম যখন প্রস্তুত থাকে তখন একটি সংযোগ শুরু করা পরিচালনা করে।

CONNECTION_DRAINING বার্তাটি এমন দেখাচ্ছে:

<message>
  <data:gcm xmlns:data="google:mobile:data">
  {
    "message_type":"control"
    "control_type":"CONNECTION_DRAINING"
  }
  </data:gcm>
</message>

CONNECTION_DRAINING বর্তমানে একমাত্র control_type সমর্থিত।

প্রবাহ নিয়ন্ত্রণ

FCM- এ প্রেরিত প্রতিটি বার্তা একটি ACK বা NACK প্রতিক্রিয়া পায়। এই বার্তাগুলির মধ্যে একটিও পায় নি এমন বার্তাগুলি মুলতুবি বলে বিবেচিত হয়। যদি মুলতুবি থাকা বার্তার সংখ্যা 100 এ পৌঁছে যায় তবে অ্যাপ্লিকেশন সার্ভারটি নতুন বার্তাগুলি প্রেরণ করা বন্ধ করবে এবং চিত্র 1-এ বর্ণিত হিসাবে বিদ্যমান কিছু মুলতুবি বার্তাগুলি স্বীকৃতি দেওয়ার জন্য এফসিএম অপেক্ষা করবে:

চিত্র 1. বার্তা / ack প্রবাহ।

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

ACK গুলি কেবল একটি সংযোগের প্রসঙ্গেই বৈধ। যদি কোনও বার্তা ACKed করার আগে সংযোগটি বন্ধ হয়ে যায়, অ্যাপ্লিকেশন সার্ভারটি আবার ACKing করার আগে এফসিএমটির আপস্রিম বার্তাটি পুনরায় পাঠানোর জন্য অপেক্ষা করা উচিত। একইভাবে, সংযুক্তি বন্ধ হওয়ার আগে এফসিএম থেকে যে সকল এসসি / ন্যাক পাওয়া যায়নি তার জন্য মুলতুবি থাকা সমস্ত বার্তা আবার প্রেরণ করতে হবে।