Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

অ্যাপ বৃত্তান্ত (মেনিফেস্ট)

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

মেনিফেস্ট ফাইলের নাম হতে হবে manifest.webapp এবং এটা আপনার ওয়েব অ্যাপ এর রুট ফোল্ডারে রাখতে হবে, একটি index.html ফাইলের সাথে।

আপনি যদি চান আপনার অ্যাপটি আপনার নিজের কোন ওয়েবসাইট থেকে ব্যবহারকারীরা ইন্সটল করতে পারবে, তাহলে আপনার ওয়েবসাইট থেকে অ্যাপটি ইন্সটল করার ব্যবস্থা করে  দিন (যেমন আপনার ওয়েবসাইটের কোন বাটনে navigator.mozApps.install() জাভাস্কিপ্ট কোডটি কল করুন)। অথবা, যখন কোন ওয়েব-দোকান বা মার্কেটপ্লেস এ অ্যাপটি প্রকাশ করবেন, তখন আপলোড করা অ্যাপটির মেনিফেস্ট ফাইলের মাধ্যমেই ইন্সটল প্রক্রিয়া শুরু হয়।

সাধারণ প্রশ্নোত্তর (FAQ) এর জন্য মেনিফেস্ট ফাইল সম্পর্কে পাতাটি দেখুন। এছাড়া আপনি আমাদের মেনিফেস্ট ফাইল যাচাইকারী ব্যবহার করতে পারেন। এটি আপনার মেনিফেস্ট ফাইলে কোন ভুল থাকলে ধরতে পারবে।

নমুনা মেনিফেস্ট

নিচে সবচেয়ে ছোট যে মেনিফেস্ট ফাইলটি সম্ভব, সেটি দেখানো হল। আপনি এটি কপি একটি টেক্সট ফাইল তৈরি করে আপনার নিজের তথ্য জায়গামত বসিয়ে দিতে পারেন।

খেয়াল করুন: আপনার অ্যাপ এর মেনিফেস্ট ফাইলে এসব তথ্য ছাড়াও আরও কিছু তথ্য দেওয়া লাগতে পারে। নিচের ডকুমেন্টেশনে মেনিফেস্টের সব বিষয় সম্পর্কে জানতে পারবেন।

{
  "name": "My App",
  "description": "My elevator pitch goes here",
  "launch_path": "/index.html",
  "icons": {
    "128": "/img/icon-128.png"
  },
  "developer": {
    "name": "Your name or organization",
    "url": "http://your-homepage-here.org"
  },
  "default_locale": "en"
}

মেনিফেস্ট এর বিষয়গুলো

নিচের বিষয়গুলো মেনিফেস্ট ফাইলে দিতে পারবেন। মাত্র তিনটি বিষয় অবশ্যই আপনার মেনিফেস্ট ফাইলে অবশ্যই দিতে হবেঃ name, description এবং icons (সাথে ১২৮ পিক্সেল এর আইকন দিতে হবে)। এছাড়া আরও কিছু বিষয় আছে যেগুলো আপনার দেওয়া লাগবে কিনা, তা আপনি অন্যান্য কি কি বিষয় আপনার মেনিফেস্ট ফাইলে উল্লেখ করেছেন, তার ওপর নির্ভর করে। এসব-ই ডকুমেন্টেশনে বলা হয়েছে।

আপনার মেনিফেস্ট ফাইলের তথ্যগুলো যেকোন ক্রমে দিতে পারেন। নিচে উল্লেখ করা বিষয়গুলোর বাইরে অন্য কোন বিষয় উল্লেখ করলে সেগুলো অগ্রাহ্য করা হবে।

activities

(ঐচ্ছিক, শুধুমাত্র ফায়ারফক্স ওএস এর জন্য) কিছু ওয়েব এক্টিভিটি দিতে পারবেন যেগুলো এই অ্যাপটিতে ব্যবহার করা হয়েছে। এখানে যেসব মান দিবেন সেগুলো একেক-টি এক্টিভিটি হতে হবে। এক্টিভিটি এর নাম হিসেবে যেকোন টেক্সট ব্যবহার করা যায় এবং প্রতিটি এক্টিভিটি একটি অবজেক্ট দ্বারা নির্দেশ করা হয়। নিচের উদাহরণে share নামের একটি এক্টিভিটি কিভাবে ব্যবহার করবেন তা দেখানো হলঃ

"activities": {
  "share": {
    "filters": {
      "type": [ "image/png", "image/gif" ]
    },
    "href": "foo.html",
    "disposition": "window",
    "returnValue": true
  }
}

share এক্টীভিটি-টি'র জন্য যে অবজেক্ট টি ব্যবহার করা হয়েছে তার নিচের বৈশিষ্ট্যগুলো রয়েছেঃ filters, href, disposition এবং returnValue। এগুলো নিয়ে আলোচনা করা হয়েছে এক্টিভিটি যেভাবে পরিচালনা করবেন পাতায়।

appcache_path

(ঐচ্ছিক) আপনার অ্যাপ্লিকেশন ক্যাচ (AppCache) ফাইলটির পুরো ঠিকানা দিতে হবে। ইন্সটল হওয়ার সময় এই ফাইলটি পার্স করা হবে, আর যেসব স্ট্যাটিক ফাইল CACHE হেডারের পর দেওয়া হয়েছে সেগুলো ক্যাশ করে রাখা হবে।

"appcache_path": "/cache.manifest"

chrome

Requires Firefox OS 1.1 (ঐচ্ছিক) স্ক্রিনের নিচে একটি ন্যাভিগেশন করার ইন্টারফেইস তৈরি করে দেয়। যেসব অ্যাপ এর নিজস্ব ব্যাক-বাটন নেই তারা এটি ব্যবহার করে সহজেই অ্যাপ এর এক স্ক্রিন থেকে আরেক স্ক্রিনে যাওয়ার ব্যবস্থা যোগ করে দিতে পারেন।

এই অংশটি নিচের বামের ছবিটির মত হয়ে থাকবে, আপনি যদি এটি ট্যাপ করে ওপরে তুলে আনেন তাহলে ডানপাশের ছবিটির মত দেখাবে।

chrome navigation

উদাহরণঃ

"chrome": { "navigation": true }

খেয়াল করুণ: এই পদ্ধতিটি আপনার শেষ বিকল্প হিসেবে ব্যবহার করুন - চেষ্টা করুন আপনার অ্যাপ এ নিজস্ব ব্যাক-বাটন দিতে, যাতে ব্যবহারকারীরা স্বাচ্ছন্দ্যবোধ করেন।

csp

(ঐচ্ছিক) একটি বিষয়বস্তু'র নিরাপত্তা নীতিমালা দিতে পারেন। এই নীতিমালা আপনার অ্যাপ এর সকল পাতার জন্য প্রযোজ্য হবে। আরও তথ্যের জন্য এই পাতাটি দেখুন।

default_locale

(আবশ্যকীয় যদি locales ব্যবহার করেন) একটি ভাষা-ট্যাগ (RFC 4646 অনুযায়ী) যা বলে দেয় আপনার মেনিফেস্ট ফাইলটি কোন ভাষায় লেখা। এখানে যেই ভাষা-ট্যাগটি দিয়েছেন সেটি locales এর ঘরে আবার দিতে হবে না। আপনি locales এর কোন মান না দিলেও default_locale এর মান উল্লেখ করে দেওয়া ভাল। এটি দিয়ে দিলে ফায়ারফক্স মার্কেটপ্লেস বুঝতে পারবে আপনার মেনিফেস্ট কোন ভাষায় লেখা হয়েছে, তাই অন্যান্য ভাষায় দেখানোর জন্য এটি ঠিক মাণগুলো ব্যবহার করতে পারবে। আপনি মাণটি উল্লেখ করে না দিলে ফায়ারফক্স মার্কেটপ্লেস অনুমান করে নিবে। যে ডিভাইসে অ্যাপটি ইন্সটল করা হচ্ছে তা অবশ্য default_locale বিষয়টি ব্যবহার করে না।

English এর উদাহরণঃ

"default_locale": "en"​

description

(আবশ্যকীয়) অন্যান্য ব্যবহারকারীরা যাতে আপনার অ্যাপটি সম্পর্কে জানতে পারে (সর্বোচ্চ ১০২৪টি অক্ষর ব্যবহার করা যাবে)।

developer

(ঐচ্ছিক তবে নিচের নোট দেখুন) অ্যাপ এর ডেভেলপারের বিষয়ে তথ্য দেয়। নিচের মাণগুলো ব্যবহার করতে পারবেনঃ

  • name - ডেভেলপারের নাম।
  • url - অ্যাপ এর ডেভেলপারের আরও তথ্য নিয়ে URL। ব্যবহারকারী ড্যাশবোর্ড বা ব্রাউজারে অ্যাপটি'র বিস্তারিত দেখতে গিয়ে ডেভেলপারের নামে ক্লিক করলে URL টি ব্যবহার করা হবে।

খেয়াল করুন: ফায়ারফক্স মার্কেটপ্লেসে অ্যাপটি জমা দিলে অবশ্যই ডেভেলপারের নাম দিতে হবে অ্যাপের সাথে দেখানোর জন্য।

fullscreen

(ঐচ্ছিক, শুধুমাত্র ফায়ারফক্স ওএস এর জন্য) অ্যাপটি পুরো পর্দা জুড়ে থাকবে কিনা তা নির্ধারণ করে দিন true অথবা false এই মাণগুলো দিয়ে।

"fullscreen": "true"

icons

(আবশ্যকীয়) একটি ম্যাপ যাতে আইকনের আকারের সাথে আইকনের ঠিকানা URI ( যা হতে পারে  absolute paths অথবা ডেটা URIs)। যদি মাণটি / দিয়ে শুরু হয় তাহলে ধরে নেওয়া হয় এটি অ্যাপের রুট ফোল্ডার থেকে শুরু হয়েছে। আইকন গুলো বর্গাকার হতে হবে এবং আপনার অ্যাপের সাথে সামঞ্জস্যপূর্ণ হতে হবে। আইকনের ব্যাকগ্রাউন্ড সলিড কিছু হতে পারবেনা যা কিনা আইকনের চারটি কোণা পর্যন্ত-ই বিস্তৃত।

ফায়ারফক্স ওএস এর জন্য আইকনগুলোর এই নীতিমালা মানতে হবে, এদের কোন drop shadow থাকতে পারবে না। সচরাচর ব্যবহার করা আকারগুলো হলঃ

128 x 128
ফায়ারফক্স মার্কেটপ্লেসে দেখানোর জন্য।
60 x 60
ডিভাইসে এই আইকনটি ব্যবহার করা হবে; শুধুমাত্র ১২৮ পিক্সেলের আইকন আবশ্যকীয়। তবে এই আকারের আইকনও দিয়ে দিতে উৎসাহিত করা হয় যাতে ডিভাইসে সবথেকে ভালভাবে দেখানো যায়।
32 x 32, 90 x 90, 120 x 120 and 256 x 256
অন্যান্য বিভিন্ন প্লাটফর্ম যেমন উইন্ডোজ ৭ এবং এন্ড্রয়েডে ভালভাবে দেখানোর জন্য এই আকারের আইকন দিয়ে দিতে উৎসাহিত করা হয়।

গুরুতপূর্ণঃ মার্কেটপ্লেসে গ্রহণযোগ্য হওয়ার জন্য শুধুমাত্র ১২৮*১২৮ আকারের আইকন-টি দেওয়াই বাধ্যতামূলক।

এরকম বিভিন্ন আকারের আইকন দিতে পারবেন এভাবেঃ

"icons": {
  "60": "/img/icon-60.png",
  "128": "/img/icon-128.png"
}

খেয়াল করুনঃ উইন্ডোজ ৭ এবং এন্ড্রয়েডে এই আকারের আইকন সমর্থন করেঃ 16 x 16, 32 x 32, 48 x 48, 64 x 64, 128 x 128 এবং 256 x 256.

installs_allowed_from

(ঐচ্ছিক) এক বা একাধিক যেসব ওয়েবসাইট থেকে অ্যাপটি ইন্সটল করা যাবে। পেইড অ্যাপ (যেসব অ্যাপ কিনতে হবে ব্যবহারকারীকে) এর জন্য এই বিষয়টি থাকা দরকার যাতে আপনি যানতে পারেন কোন কোন স্টোরের সাথে আপনার লেনদেন হচ্ছে। আপনার অ্যাপটি যদি ফ্রি হয় তাহলে এই বিষয়টি দেওয়ার দরকার নাই এবং আপনি যেকোন সাইট থেকে ইন্সটল করার অনুমতি দিন - এটাই আমরা উৎসাহিত করি।

এই বিষয়টির মাণ দিতে হবে এভাবেঃ <scheme name> + <domain>। যেমনঃ

"installs_allowed_from": [
  "https://marketplace.firefox.com",
  "https://marketplace.example.com"
]

আপনি যদি ["*"] এই অ্যারে টি ব্যবহার করেন তাহলে আপনার অ্যাপ যেকোন সাইট থেকে ইন্সটল করা যাবে। এটাই ডিফল্ট মাণ। খেয়াল করুন আপনি যদি ফাকা অ্যারে দিয়ে রাখেন তাহলে কোন সাইট (আপনার নিজের সাইট-ও) থেকেই অ্যাপটি ইন্সটল করা যাবে না।

রিসিপ্ট যাচাইকারী এই বিষয়টি ব্যবহার করে কোন কোন স্টোর আপনার অ্যাপ এর জন্য রিসিপ্ট দিবে তা নিয়ন্ত্রণ করতে পারে।

খেয়াল করুন: এই অ্যারে তে URL গুলোর শেষে কোন / দেওয়ার দরকার নেই। যেমন, এটি ভুলঃ https://marketplace.example.com/। এরকম দিলে ইন্সটল হবে না। সম্পর্কিত বাগ

খেয়াল করুন: যদি আপনি ফায়ারফক্স মার্কেটপ্লেস থেকে ইন্সটল করতে চান, তাহলে আপনাকে অবশ্যই এই মাণটি দিয়ে দিতে হবেঃ https://marketplace.firefox.com

launch_path

(ঐচ্ছিক, প্যাকেজড অ্যাপ এর জন্য আবশ্যকীয়) অ্যাপটি চালু হওয়ার সময় যেই পাতাটি লোড করা হবে। দেওয়া না হলে অ্যাপ এর অরিজিন হিসেবে যে ডোমেইন থেকে লঞ্চ করা হচ্ছে তাই ধরে নেওয়া হয়। আরও তথ্যের জন্য ঠিকানা ব্যাবহার কিভাবে করতে হবে তা দেখুন। আপনার অ্যাপটি ডোমেইনের শুরুতে (রুট এ) না থাকলে বিশেষভাবে বিবেচনা করতে হবে।

প্যাকেজড অ্যাপ এ, এই মাণটি নির্ধারণ করে দেয় অ্যাপটি যে জিপ ফাইলে আছে সেটির সাপেক্ষে কোথা থেকে শুরু করা হবে। যেমন, যদি launch_path এর মাণ হিসেবে /myApp/index.html দেওয়া হয়, তাহলে অ্যাপটি চালু হওয়ার সময় /myApp/index.html ফাইলটি লোড করা হবে। 

locales

(ঐচ্ছিক) মেনিফেস্টে থাকা এক-একাধিক তথ্য বিভিন্ন ভাষায় সরবরাহ করতে পারেন এই বিষয়টির সাহায্যে। ডিভাইসে যেই ভাষা ঠিক করা আছে, আপনার মেনিফেস্টের তথ্যগুলো সেই ভাষায় ব্যবহারকারীকে দেখানো হবে। যেমন, যদি আপনি চান বাঙালিরা আপনার অ্যাপ ইন্সটল করবে তাহলে আপনি বাংলা ভাষায় মেনিফেস্টের কিছু তথ্য দেখাতে পারেন। এই বিষয়টির মাণ হিসেবে একটি ম্যাপ দিতে হয়, যার key তে দিতে হয় ভাষা-ট্যাগ (RFC 4646) এবং value হিসেবে মেনিফেস্ট ফাইলের যেই যেই ফিল্ডগুলো এই ভাষায় দেখাতে চান, সেই সেই ফিল্ড বা বিষয়গুলো দিতে হবে। locale এর মাণ হিসেবে থাকা সকল বিষয় বা ফিল্ড মেনিফেস্টে থাকা ফিল্ডগুলোকে ওভাররাইড করবে। তবে আপনি এই ফিল্ডগুলো ওভাররাইড করতে পারবেন নাঃ default_locale, locales itself, এবং installs_allowed_from। কোন মেনিফেস্ট ফাইল যদি ওপরের কোন একটা বিষয় ওভাররাইড করতে চায় তাহলে তা ত্রুটিযুক্ত ধরে নেওয়া হবে। locales বিষয়টি মেনিফেস্টে উল্লেখ করলে default_locale বিষয়টিও দেওয়া লাগবে।

এই বিষয়টির মাণ হিসেবে দেওয়ার ম্যাপের key হিসেবে যা দেবেন তা xx-YY অথবা xx ফরম্যাটের হতে হবে। যেমন, pt_br, pt_BR, or ES এর বদলে pt-BR এবং es দেওয়া ভাল। ফায়ারফক্স মার্কেটপ্লেস ও এটাই উৎসাহিত করে

খেয়াল করুনঃ locales এ দেওয়া মাণগুলো যেন ঠিক ভাষায় থাকে তা আমরা বরাবরই উৎসাহিত করি। কারণ এই মাণ দেখে ব্যবহারকারী বুঝতে পারে আপনি তাদের ভাষায় অ্যাপের সাপোর্ট দিচ্ছেন কি না। ভুল ভাষা বা বিষয়বস্তু ব্যবহার করলে টেকনিক্যাল কোন সমস্যা হবে না কিন্তু ব্যবহারকারী অসন্তুষ্ট হবে আর আপনাকে খারাপ ডেভেলপার ধরে নেবে এই আরকি।

স্প্যানিশ এবং ইটালিয়ান এর জন্য উদাহরণঃ

"locales": {
"es": {
  "description": "¡Acción abierta emocionante del desarrollo del Web!",
  "developer": {
    "url": "http://es.mozillalabs.com/"
  }
},
"it": {
  "description": "Azione aperta emozionante di sviluppo di fotoricettore!",
  "developer": {
    "url": "http://it.mozillalabs.com/"
  }
}
}

messages

(ঐচ্ছিক, শুধুমাত্র ফায়ারফক্স ওএস এর জন্য) যেসব সিস্টেম মেসেজ আপনার অ্যাপ পড়তে চায়, সেগুলোর লিস্ট একটি অ্যারে তে দিতে হবে। অ্যারে তে সিস্টেম মেসেজ এবং আপনার অ্যাপের যে পেইজ মেসেজটি পড়তে চায় তা ম্যাপ করে দিতে হয়। মেসেজটি সিস্টেম থেকে ছাড়া হলে আপনার অ্যাপের ঐ পাতাটি দেখানো হবে। যেমন, একটি ফায়ারফক্স ওএস অ্যাপের বেলায়ঃ

"messages": [
  { "telephony-new-call": "/dialer/index.html#keyboard-view" },
  { "bluetooth-dialer-command": "/dialer/index.html#keyboard-view" },
  { "headset-button": "/dialer/index.html#keyboard-view" },
  { "notification": "/dialer/index.html#keyboard-view" },
  { "alarm": "/facebook/fb_sync.html" }
]

এই উদাহরণে যখন telephony-new-call সিস্টেম মেসেজটি ছাড়া হয় (যখন আপনার ফোনে কন কল আসে), ডিভাইসটি অ্যাপের /dialer/index.html পাতাটি #keyboard-view অ্যাংকরে দেখাবে। তাই এই পাতাটির উচিত হবে ব্যবহারকারীকে জানানো যে ফোন এসেছে এবং ফোন ধরার জন্য দরকারি নিয়ন্ত্রণগুলো দেখাবে।

খেয়াল করুনঃ bug 800431 বাগটি সমাধান না করা পর্যন্ত মেসেজটি পড়ার জন্য যে পাতাটি নিবন্ধন করা হয়েছিল সে পাতাটি আর messages এর মাণ হিসেবে উল্লেখ করা পাতা একই হতে হবে।

name

(আবশ্যকীয়) অন্যরা পড়তে পারবে এমন একটা নাম, আপনার অ্যাপের জন্য (সর্বোচ্চ ১২৮ অক্ষরে)।

খেয়াল করুনঃ আপনি যদি আপনার অ্যাপ অন্যদের সরররাহ করে ফেলার পর নাম বদলে ফেলেন তাহলে ইতোমধ্যেই ইন্সটল হওয়া অ্যাপগুলোতে নাম আপডেট হবে না।

orientation

(শুধুমাত্র এন্ড্রয়েড এবং ফায়ারফক্স ওএস এর জন্য, ঐচ্ছিক) একটি অ্যারে তে কিছু অরিয়েন্টেশন (অর্থাৎ ডিভাইস বিভিন্নত দিকে ঘুরালে স্ক্রিন বিভিন্ন দিকে ঘুরে যাওয়া) মাণ দিয়ে দিতে পারেন - শুধুমাত্র এসব অরিয়েন্টেশনেই অ্যাপ্লিকেশনটি চলবে - ডিভাইস হেলানো হলে বা এদিক-সেদিক নাড়ালেও এসব মাণ ছাড়া অন্য কোন অরিয়েন্টেশন কার্যকরী হবে না। অ্যারেতে মাণ হিসেবে দিতে পারেনঃ portrait, landscape, portrait-primary, landscape-primary, portrait-secondary অথবা landscape-secondary। যেসব মানের সাথে -primary আর -secondary আছে সেগুলো ব্যবহার করলে শুধুমাত্র একটি অরিয়েন্টেশনেই লক করে রাখবে, অরিয়েন্টেশন বদলে গেলেও পরিবর্তিত হবে না। ওপরে উল্লেখ করা যেসব মানের সাথে -primary এবং -secondary নাই তারা উভয় মানেই অরিয়েন্টেশন করতে দেবে। আর যেসব মানের সাথে -secondary যুক্ত আছে তারা এই এই -secondary শব্দটি ছাড়া মাণগুলোর থেকে ১৮০ ডিগ্রি ঘুরালে ডিভাইসের যে অরিয়েন্টেশন হবে, তা বুঝায়। যেমন, portrait-secondary মানে হল ফোনকে আপনি যদি উলটো করে ধরেন (কিন্তু ডিভাইসের এমন একটা অবস্থান যেখানে width কম থাকবে height থেকে)। যদি এই বিষয়টিতে বৈধ মাণ দিয়ে থাকেন তাহলে ডিভাইস ঘুরালেও রানটাইম আপনার দেওয়া মাণগুলো থেকে অন্য কোন দিকে (অরিয়েন্টেশনে) স্ক্রিন ঘুরাবে না। যেমনঃ

"orientation": ["portrait","landscape-secondary"]

origin

Requires Firefox OS 1.1 (privileged অথবা certified অ্যাপ শুধুমাত্র) এই বিষয়টি ব্যবহার করে privileged অথবা certified প্যাকেজড অ্যাপ এ অ্যাপটি'র অরিজিন বা উৎস বলে দেওয়া যায়। হোস্টেড বা আপলোড করা অ্যাপে এই বিষয়টির কোন মাণ দেওয়া লাগে না কারণ হোস্টেড অ্যাপের বেলায় অরিজিন এর মাণ হচ্ছে যে ওয়েবসাইট থেকে অ্যাপটি সরবরাহ করছেন তা। এই বিষয়টি ব্যবহার করে প্যাকেজড অ্যাপে সহজেই অথেনটিকেশন যেমন OAuth বা Persona ব্যবহারের সুবিধা দেওয়া যায়।

প্যাকেজড অ্যাপের বেলায় একটি বিশেষ, অভ্যন্তরীণ প্রোটোকল আছে। যেটা হল এরকমঃ app://<UUID>, যেখানে <UUID> একটি লম্বা স্ট্রিং যেটা প্রতিটি ডিভাইসে (যেখানে অ্যাপটি ইন্সটল করা হয়েছে) অনন্য। ডেভেলপারের কাছে এই URL টি পাওয়ার এখন কোন সহজ উপায় নেই। origin বিষয়টি ব্যবহার করে আপনি UUID এর পরিবর্তে একটি মাত্র ডোমেইন নাম ব্যবহার করতে পারেন যেটা ইন্সটল হওয়া অ্যাপটি ব্যবহার করবে যেমন //my-app.com

আপনি নিজে নিয়ন্ত্রণ করেন এমন ডোমেইনই ব্যবহার করুন। আপনার অ্যাপ মার্কেটপ্লেসে অনুমোদিত হবে না যদি আপনি app://facebook.com এরকম কিছু ব্যবহার করেন এবং আপনি Facebook এর মালিক নন।

যেমনঃ (মনে রাখুন app:// প্রটোকল ব্যবহার করতে হবে)

"origin": "app://my-app.com"

permissions

(ঐচ্ছিক) যেসব বিশেষ অনুমতি অ্যাপ এর দরকার হবে। এসব অনুমতি বিশেষ বিশেষ ডিভাইস API (WebAPIs) আপনার অ্যাপ কিভাবে ব্যবহার করতে পারবে তা নিয়ন্ত্রণ করে। প্রত্যেক WebAPI যা অ্যাপটি ব্যবহার করতে চায় তাদের এ লিস্টে দিয়ে দিতে হবে। যদি এমন কোন APIs ব্যবহার করতে চান যা permissions এর ঘরে দেখানো হয়নি, তা আপনার অ্যাপকে ব্যবহার করতে দেওয়া হবে না।

খেয়াল করুনঃ এই অনুমতিগুলোর বেশিরভাগই privileged অথবা certified অ্যাপের বেলায়ই খাটে, হোস্টেড অ্যাপের বেলায় নয়।

এই permissions এর মাণ হিসেবে আপনাকে একটি object দিতে হয়, যার প্রত্যেকটা প্রোপার্টি হল একেকটি অনুমতি। প্রত্যেক এন্ট্রি'র সাথে একটি description মাণ দিতে হবে। কিছু API এর আবার access প্রোপার্টি আছে। উদাহরণ দেখানো হলঃ

"permissions": {
  "contacts": {
    "description": "Required for autocompletion in the share screen",
    "access": "readcreate"
    },
  "alarms": {
    "description": "Required to schedule notifications"
  }
}
  • description - একটি স্ট্রিং যেখানে কেন আপনার এই অনুমতি দরকার তা লিখতে হবে। এটা আবশ্যকীয়।
  • access -  একটি স্ট্রিং দিতে হবে কি ধরণের অনুমতি দরকার, তা উল্লেখ করে। অল্প কিছু API এর জন্যেই এই মাণটি আবশ্যকীয়। সম্ভাব্য মাণ হচ্ছে readonly, readwrite, readcreate, এবং createonly

অনেক অনেক WebAPIS আছে, অনুমতিগুলোর পুরো লিস্ট দেখুন এখানে

precompile

Requires Firefox OS 2.0

(শুধুমাত্র ফায়ারফক্স ওএস এবং privileged ও certified অ্যাপের জন্য) বলে দেয় যে অ্যাপে যেসব asm.js ব্যবহার করা হয়েছে সেগুলোকে অ্যাপটি প্রথমবার চালু হওয়ার পরিবর্তে অ্যাপটি ইন্সটল করার সময়ই কম্পাইল করে নিতে হবে। যেকারণে অ্যাপ প্রথমবার চালু হওয়ার সময় অনেক কমে যায়, যদিও ইন্সটল হতে একটু বেশি সময় নেবে। এই বিষয়টির মাণ দিতে হবে অ্যারে ব্যবহার করে, যেসব জাভাস্ক্রিপ্ট ফাইলে asm.js কোড আছে এবং আপনি আগেই কম্পাইল করে নিতে চান সেসব ফাইলের রিলেটিভ পাথ।

"precompile": [
  "game.js",
  "database.js"
]

redirects

(শুধুমাত্র ফায়ারফক্স ওএস এবং privileged ও certified অ্যাপের জন্য) privileged বা বিশেষ সুবিধা পাওয়া এবং certified অ্যাপগুলোর বাইরেরে ওয়েবসাইট থেকে অথেনটিকেশন বা ব্যবহারকারীর পরিচয় যাচাই করতে চাইতে পারে। যেমন, অ্যাপটি ফেসবুকের OAuth অথেনটিকেশন করতে চাইতে পারে যাতে সে ব্যবহারকারীর কন্টাক্ট লিস্ট পেতে পারে। অথেনটিকেশন সার্ভারের কাজ শেষ হলে এটি রিডাইরেক্ট করে আপনাকে আপনার কোন একটি URL এ ফেরত পাঠিয়ে দেবে।

কিন্তু, প্রিভিলিজড এবং সার্টিফায়েড অ্যাপের আসলে কোন URL থাকে না যেটায় রিডাইরেক্ট করা সম্ভব, কারণ এই ধরণের অ্যাপগুলো কোথাও হোস্ট করা থাকে না (এরা প্যাকেজড অ্যাপ যাদের কোন পাবলিক ওরিজিন নেই)। এজন্য আপনাকে redirects বিষয়টি ব্যবহার করে যেকোন ওয়েব URL কে অ্যাপ এর অভ্যন্তরীণ URL এ রূপান্তর করতে হবে।

যেমনঃ

"redirects": [
  {"from": "http://mydomain.com/oauth2/flow.html",
    "to": "/redirects/redirect.html"},
  {"from": "http://mydomain.com/oauth2/dialogs_end.html",
    "to": "/redirects/dialogs_end.html"}
]

from এর ঘরে ওয়েব URL এবং to এর ঘরে অভ্যন্তরীণ অ্যাপএর URL দিতে হবে। অভ্যন্তরীণ URL টি রিলেটিভ হতে হবে, এর সামনে কোন http:// ব্যবহার করবেন না। 

redirects এর মাণ ব্যবহার করে যেসব URL রিডাইরেক্ট করা হচ্ছে তার আওতা শুধুমাত্র নিজ অ্যাপ পর্যন্তই। তাই বিভিন্ন একই পাবলিক URL কে তাদের নিজস্ব অভ্যন্তরীণ URL এ রূপান্তর করে নিতে পারে।

খেয়াল করুনঃ from এর ঘরে দেওয়া  URL টি to এর ঘরে দেওয়া URL এ রূপান্তর করা হবে শুধুমাত্র যদি, এটি HTTP redirect (30x HTTP স্ট্যাটাস হেডার) দিয়ে পাঠানো হয়। URL টি HTTP redirect ছাড়া পাঠানো হলে redirects সেটিং এর মাণ অগ্রাহ্য করা হবে।

type

(ঐচ্ছিক) অ্যাপটির প্রকার, যার মাণ হতে পারে web, privileged, অথবা certified। এই মাণ এর ওপর নির্ভর করে বিভিন্ন ডিভাইস-api (WebAPIs) ব্যবহারে আপনার অ্যাপ এর কিরকম অনুমতি আছে তা নির্ধারণ করা হয়। নিচে বর্ণনা করা হয়েছে কিন্তু আরও তথ্যের জন্য প্যাকেজড অ্যাপ দেখুন। WebAPIs ব্যবহারে কিরকম অনুমতি দরকার তা জানার জন্য permissions দেখুন।

  • web - সাধারণ হোস্টেড/ওয়েবসাইটে আপলোড করা অ্যাপ। WebAPIs ব্যবহারে সবথেকে কম অনুমতি এই ধরণের অ্যাপগুলোর। মেনিফেস্টে কোন মাণ না দিলে এই মানটি-ই ডিফল্ট ধরা হয়।
  • privileged - একটি বিশ্বস্ত অ্যাপ যা কোন একটি অ্যাপ স্টোর যেমন ফায়ারফক্স মার্কেটপ্লেসে স্বীকৃত। এদের WebAPIs ব্যবহারে আরেকটু বেশি মাত্রায় অনুমতি আছে।
  • certified - বিশ্বস্ত অ্যাপ যা গুরুত্তপূর্ণ সিস্টেম ফাংশনে ব্যবহৃত হয়, যেমন ডিফল্ট ডায়ালার অথবা স্মার্টফোনের সিস্টেম সেটিংস অ্যাপ। ওয়াপ স্টোরের থার্ড পার্টি অ্যাপ এর ধরণ এমন হতে পারবে না। এই ধরণের অ্যাপগুলোর WebAPIs ব্যবহারে সবথেকে বেশি মাত্রায় অনুমতি আছে।

যেমন:

"type": "privileged"

version

(ঐচ্ছিক) একটি বাক্য যাতে মেনিফেস্টের ভার্সন দেওয়া থাকবে। অবশ্য ওয়েব রানটাইম এই মাণটি আদৌ ব্যবহার করে না, তাই এখানে যা ইচ্ছা দিতে পারেন। আপনি মেনিফেস্টে এই বিষয়টি ব্যবহার করলে এর মাণটি নিতে পারবেন এবং আপডেট করার সময় বিভিন্ন ক্ষেত্রে ব্যবহার করতে পারেবন। অ্যাপ আপডেট করা দেখুন।

পাথ ব্যবহার করা

মেনিফেস্ট ফাইলের যেসব বিষয়ে পাথ আছে তাদের সবগুলোই পুর্ণ পাথ দিতে হবে (যেমন, /images/myicon.png), এবং পাথগুলো অবশ্যই অ্যাপ এর অরিজিন থেকে সরবরাহ করতে হবে।

এছাড়া, launch_path এর মাণ দেওয়ার দুটো পদ্ধতি আছেঃ

  • যদি ওয়েব সার্ভারের রুটে বা শুরুতেই অ্যাপটি থাকে যেমন mywebapp.github.com/, তাহলে  launch_path এর মাণ দিতে পারেন /
  • অথবা, আপনার অ্যাপ যদি কোন সাব-ডিরেক্টরিতে রাখা থাকে যেমন mymarket.github.com/mywebapp/, তাহলে launch_path এর নাম দিতে হবে /mywebapp/

মেনিফেস্ট যাচাই করা

মেনিফেস্ট ফাইল ঠিক আছে কিনা চেক করতে এই ওয়েবসাইট ব্যবহার করুনঃ https://marketplace.firefox.com/developers/validator

মেনিফেস্ট যাচাই করার জন্য একটি API ও আছেঃ http://firefox-marketplace-api.readthedocs.org/en/latest/

মেনিফেস্ট সরবরাহ করা

অ্যাপটি যে অরিজিন বা ওয়েবসাইটে আছে সেই একই অরিজিন থেকেই মেনিফেস্ট ফাইলটি সরবরাহ করতে হবে।

মেনিফেস্ট ফাইলটির এক্সটেনশন হতে হবে.webapp এবং এটি ওয়েব থেকে ব্যবহারকারী'র কাছে পাঠানোর সময় HTTP Content-Type হেডারের মাণ হতে হবে application/x-web-app-manifest+json। ফায়ারফক্স এটি নিয়ে কড়াকড়ি করে না কিন্তু ফায়ারফক্স মার্কেটপ্লেস করে। ফায়ারফক্স ওএস এই হেডার তখনি চেক করবে যখন যেই অরিজিন বা সাইট থেকে ব্যবহারকারী অ্যাপ ইন্সটল করতে চাইছে তা অ্যাপের নিজস্ব অরিজিন থেকে ভিন্ন। অন্য কোন হেডার যেমন Content-Security-Policy এবং X-UA-Compatible নিয়ে কিছু করার দরকার নেই।

কিছু বিশেষ ওয়েব-আক্রমণ ঠেকাতে SSL ব্যবহার করতে পারেন। এছাড়া HTTP compression সুবিধা সহ মেনিফেস্ট সরবরাহ করতে পারেন। তবে মেনিফেস্ট ফাইল ক্যাশ করে রাখবেন না।

ফায়ারফক্স মার্কেটপ্লেসে জমা দিতে চাইলে মেনিফেস্টের এনকোডিং UTF-8 হতে হবে। Byte order mark (BOM) ব্যবহার না করতে আমরা উৎসাহিত করি। অন্য কোন এনকোডিং দিতে চাইলে Content-Type হেডারের charset প্যারামিটার ব্যবহার করুন। (যেমনঃ Content-Type: application/x-web-app-manifest+json; charset=ISO-8859-4), যদিও মার্কেটপ্লেস এটাকে অগ্রাহ্য করবে।

User Agents (ব্রাউজার) যেখানে সম্ভব যথাযথভাবে সাইটের পরিচয় এবং TLS এর অবস্থা সম্পর্কে ব্যবহারকারীকে অবহিত করবে অ্যাপ ইন্সটল করার সময়।

Apache দিয়ে সরবরাহ করা

আপনার .htaccess ফাইলে নিচের লাইন যোগ করুনঃ

AddType application/x-web-app-manifest+json .webapp
খেয়াল করুনঃ ধরে নেওয়া হয়েছে আপনি .webapp এক্সটেনশন ব্যবহার করছেন। আপনি যদি .json বা অন্য কোন এক্সটেনশন ব্যবহার করেন তাহলে উপরের কোড যথাযথভাবে বদলে নিন।
 

যদি আপনার .htaccess ফাইল না থাকে আপনার সার্ভারের গোড়ায় বা রুট ডিরেক্টরিতে একটি তৈরি করে নিন। যদি কাজ না করে তাহলে হোস্টে AddHandler x-web-app-manifest+json .webapp যোগ করতে হতে পারে।

IIS থেকে সরবরাহ করা

আপনার web.config ফাইল পরিবর্তন করতে হবে। সম্ভবত এটি আপনার ওয়েবসাইটের রুট ফোল্ডারে আছে।

<configuration> <system.webServer> <staticContent> অংশে নতুন এন্ট্রি দিতে হবেঃ

<remove fileExtension=".webapp" />
<mimeMap fileExtension=".webapp" mimeType="application/x-web-app-manifest+json; charset=UTF-8" />

IIS সার্ভারে স্ট্যাটিক বিষয়বস্তুর MIME ম্যাপিং যোগ করা নিয়ে আরও তথ্য।

খেয়াল করুনঃ ধরে নেওয়া হয়েছে আপনি .webapp এক্সটেশন ব্যবহার করছেন। .json বা অন্য কোন এক্সটেনশন ব্যবহার করতে চাইলে কোডে পরিবর্তন করে নিন।
nginx থেকে সরবরাহ করা

conf ডিরেক্টরিতে থাকা mime.types ফাইলটি পরিবর্তন করতে হবে। ফাইলটি সম্ভবত /etc/nginx/ অথবা /opt/nginx/ ঠিকানায় আছে।

নিচের মত কিছু একটা দেখতে পাবেন ফাইলটিতে। সবচেয়ে নিচের লাইনটি যোগ করে দিন।

types {
text/html   html htm shtml;
text/css    css;
text/xml    xml;
application/x-web-app-manifest+json   webapp;
}
Note: ধরে নেওয়া হয়েছে আপনি .webapp এক্সটেশন ব্যবহার করছেন। .json বা অন্য কোন এক্সটেনশন ব্যবহার করতে চাইলে কোডে পরিবর্তন করে নিন।
GitHub থেকে সরবরাহ করা

যদি GitHub Pages থেকে মেনিফেস্ট সরবরাহ করেন তাহলে GitHub নিজেই ঠিক হেডারের মাণ দিয়ে দিবে। আপনার শুধুমাত্র .webapp ফাইল এক্সটেনশনটি ব্যবহার করতে হবে।

Python থেকে সরবরাহ করা

Python ইন্সটল করা থাকলে সহজেই লোকাল ডিরেক্টরিতে সার্ভার চালু করে দিতে পারেন, নিচের কোড ব্যবহার করেঃ

import SimpleHTTPServer
import SocketServer
SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map['.webapp'] = 'application/x-web-app-manifest+json'
httpd = SocketServer.TCPServer(("", 3000), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.serve_forever()
Rack (Ruby) দিয়ে সরবরাহ করা

config/initializers/mime_types.rb ফাইলে যোগ করুনঃ

Rack::Mime::MIME_TYPES['.webapp'] = 'application/x-web-app-manifest+json'

মেনিফেস্ট আপডেট করা

অ্যাপ আপডেট করা দেখুন।

ডকুমেন্ট ট্যাগ এবং অবদানকারী

 Contributors to this page: Bolaram, shafiul
 সর্বশেষ হালনাগাদ করেছেন: Bolaram,