KaiOS — یک سیستم عامل برای تلفنهای دکمهای است که بر پایه فناوریهای وب Boot to Gecko (B2G) از Mozilla ساخته شده است. توسعه برنامهها با HTML5، CSS و JavaScript بدون نیاز به یادگیری زبانهای بومی انجام میشود. KaiOS روی دستگاههایی با ۲۵۶–۵۱۲ مگابایت رم کار میکند و از 4G VoLTE، GPS، Bluetooth پشتیبانی میکند. طبق دادههای KaiOS Technologies، در سال ۲۰۲۵ بیش از ۲۰۰ میلیون دستگاه فعال در سراسر جهان وجود داشت.
نکات کلیدی
KaiOS — یک سیستم عامل موبایل برای تلفنهای دکمهای است که توسط شرکت KaiOS Technologies توسعه یافته است. این سیستم بر پایه پروژه متنباز Boot to Gecko (B2G) از Mozilla ساخته شده که در اصل به عنوان جایگزین وب برای Android در دستگاههای فوقالعاده ارزانقیمت ایجاد شده بود. اولین انتشار تجاری در سال ۲۰۱۷ بر روی تلفن Reliance JioPhone در هند انجام شد.
طبق دادههای Counterpoint Research (Q2 2025)، KaiOS ۲.۸٪ از بازار جهانی سیستمعاملهای موبایل را در اختیار دارد و پس از Android (۷۲٪) و iOS (۲۷٪) قرار میگیرد، اما از سایر پلتفرمها پیشی میگیرد. در هند سهم KaiOS به ۱۴٪ میرسد که به لطف برنامه JioPhone است. میانگین قیمت دستگاه با KaiOS ۲۰-۳۰ دلار آمریکا است که این سیستم را برای بازارهای در حال توسعه کلیدی میسازد.
ویژگی کلیدی KaiOS — همه برنامهها برنامههای وب هستند. توسعهدهنده کد را به HTML5، CSS و JavaScript مینویسد، در یک بایگانی ZIP با مانیفست بستهبندی میکند و در KaiStore منتشر میکند. این سیستم از نصب فایلهای بومی APK پشتیبانی نمیکند — فقط Open Web Apps مطابق با مشخصات W3C Widget.
KaiOS 2.5 (2018) — اولین نسخه پایدار بر روی هسته Gecko 48، نصب شده بر روی JioPhone 1. KaiOS 2.5.3 (2021) — پشتیبانی از Google Assistant، Google Maps Go، YouTube Go. KaiOS 3.0 (2022) — Gecko 84، عملکرد بهبود یافته، WebGL 2.0، CSS Grid. KaiOS 3.1 (2024) — بهینهسازی برای ۲۵۶ مگابایت رم، Web API جدید Audio Channel، امنیت بهبود یافته TLS 1.3.
| نسخه KaiOS | سال | Gecko | تغییر کلیدی |
|---|---|---|---|
| 2.5 | 2018 | 48 | اولین انتشار پایدار، JioPhone 1 |
| 2.5.3 | 2021 | 48 | Google Apps، Assistant، امنیت بهبود یافته |
| 3.0 | 2022 | 84 | ES2020، WebGL 2.0، CSS Grid، عملکرد JS بهبود یافته |
| 3.1 | 2024 | 84 | ۲۵۶ مگابایت رم، TLS 1.3، Audio Channel API |
معماری KaiOS از سه لایه کلیدی تشکیل شده است: هسته لینوکس (Gonk)، موتور وب Gecko و رابط کاربری Gaia. Gonk — لایه وابسته به سختافزار، شامل درایورها، HAL (لایه انتزاع سختافزار)، پشته مودم RIL (لایه رابط رادیویی) و پشتیبانی از حسگرها. از پروژه متنباز Android (AOSP) بوتلودر، درایورها و برخی کتابخانهها گرفته شده است.
Gonk دسترسی Gecko به سختافزار را فراهم میکند: دوربین، Bluetooth، Wi-Fi، GPS، صدا، لرزش، حسگرها. برخلاف Android که برنامهها برای Dalvik/ART نوشته میشوند، در KaiOS برنامهها از طریق Web API که توسط Gecko به Gonk IPC ترجمه میشوند به سختافزار دسترسی پیدا میکنند. رابط رادیویی (RIL) 4G VoLTE، SMS، USSD و مدیریت سیمکارتها را فراهم میکند.
Gecko در KaiOS فقط یک موتور مرورگر نیست، بلکه یک محیط اجرای کامل برای برنامهها است. همه برنامههای HTML5 در داخل Gecko Process Manager کار میکنند که هر برنامه را در یک فرآیند جداگانه ایزوله میکند. Gecko مشخصات W3C Widget Packaging و افزونههای Mozilla برای دسترسی به سختافزار را پیادهسازی میکند. نسخه Gecko تعیین میکند که کدام Web API برای توسعهدهنده در دسترس است.
Gaia — رابط وب خود سیستمعامل است: صفحه قفل، صفحه اصلی (launcher)، پنل اعلانها، صفحه شمارهگیری، مخاطبین، پیامرسان SMS. همه برنامههای سیستمی همان Open Web Apps هستند. توسعهدهنده میتواند دوربین یا صفحهکلید استاندارد را با برنامه خود جایگزین کند، با ثبت activity handler مربوطه در مانیفست.
// بررسی نسخه KaiOS و در دسترس بودن API
function checkKaiOSVersion() {
const ua = navigator.userAgent;
let version = 'unknown';
if (ua.includes('KAIOS/2.5')) {
version = '2.5';
} else if (ua.includes('KAIOS/3')) {
version = '3.0';
}
const features = {
geolocation: 'geolocation' in navigator,
vibration: 'vibrate' in navigator,
mozMobileConnection: 'mozMobileConnection' in navigator,
mozTelephony: 'mozTelephony' in navigator,
mozSms: 'mozSms' in navigator,
bluetooth: 'bluetooth' in navigator
};
return { version, features };
}
// بررسی وجود Google Apps (فقط KaiOS 2.5.3+)
const systemInfo = checkKaiOSVersion();
console.log('KaiOS version:', systemInfo.version);
console.log('Available APIs:', JSON.stringify(systemInfo.features, null, 2));
// استفاده از لرزش با بررسی در دسترس بودن
function triggerHapticFeedback() {
if (navigator.vibrate) {
navigator.vibrate([200, 100, 200]); // لرزش، مکث، لرزش
}
}تابع checkKaiOSVersion User Agent را برای تعیین نسخه KaiOS میخواند و در دسترس بودن Web APIهای کلیدی را بررسی میکند. در نسخه 2.5، mozMobileConnection، mozTelephony، mozSms در دسترس هستند — آنها در مرورگرهای معمولی وجود ندارند و منحصر به KaiOS هستند. تابع triggerHapticFeedback از Vibration API با سازگاری به عقب استفاده میکند.
برنامه KaiOS — یک بایگانی ZIP (فرمت .zip، نه .apk) حاوی فایلهای HTML، CSS، JavaScript، تصاویر و مانیفست است. ساختار یک برنامه حداقلی شامل manifest.webapp (شرح برنامه)، index.html (نقطه ورود)، style.css و icon.png (آیکون مربعی ۹۰×۹۰ پیکسل) است. مانیفست مطابق با مشخصات W3C Manifest for Web Apps است.
فایل manifest.webapp — فایل پیکربندی اصلی برنامه KaiOS است. فیلدهای اجباری: name (نام)، description (شرح تا ۱۴۰ کاراکتر)، launch_path (مسیر به index.html)، icons (آیکونهای با اندازههای ۳۰×۳۰، ۶۰×۶۰، ۹۰×۹۰، ۱۲۰×۱۲۰ پیکسل). فیلد type: 'certified' (برنامههای سیستمی)، 'privileged' (دسترسی به Web API)، 'web' (بدون مجوزهای ویژه). Permissions برای برنامههای privileged در آرایه permissions مشخص میشود.
// manifest.webapp — پیکربندی برنامه KaiOS
{
"name": "چراغ قوه",
"description": "فلاش دوربین را روشن و خاموش میکند",
"launch_path": "/index.html",
"icons": {
"30": "/icons/icon-30.png",
"60": "/icons/icon-60.png",
"90": "/icons/icon-90.png",
"120": "/icons/icon-120.png"
},
"type": "privileged",
"permissions": {
"camera": {
"description": "برای روشن کردن فلاش نیاز است"
}
},
"default_locale": "ru",
"orientation": "portrait-primary",
"fullscreen": true
}مانیفست مشخص میکند که برنامه از نوع privileged است — این از طریق permissions دسترسی به camera API را میدهد. اندازه آیکونها دقیقاً ۳۰×۳۰، ۶۰×۶۰، ۹۰×۹۰ و ۱۲۰×۱۲۰ پیکسل است. فیلد orientation جهت عمودی را محدود میکند — در تلفنهای دکمهای معمولاً شتابسنج برای چرخش صفحه وجود ندارد. fullscreen: true نوار وضعیت را پنهان میکند.
صفحه HTML5 در KaiOS از برچسبهای استاندارد با در نظر گرفتن صفحه محدود (معمولاً ۲۴۰×۳۲۰ پیکسل) استفاده میکند. متا-تگ viewport اجباری است: <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">. KaiOS از رویدادهای لمسی پشتیبانی نمیکند (در تلفنهای دکمهای صفحه لمسی وجود ندارد)، تمام ناوبری از طریق کلیدها انجام میشود: ArrowUp، ArrowDown برای حرکت، Enter برای انتخاب، Back برای بازگشت.
// index.html — برنامه ساده چراغ قوه برای KaiOS
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1">
<title>چراغقوه</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="app">
<div id="status" class="status-off">خاموش</div>
<div id="hint">برای روشن کردن Enter را فشار دهید</div>
</div>
<script>
const statusEl = document.getElementById('status');
const hintEl = document.getElementById('hint');
let isFlashOn = false;
let camera = null;
async function initCamera() {
try {
camera = navigator.mozCameras.getListOfCameras()[0];
const cameraControl = await
navigator.mozCameras.getCamera(camera, { mode: 'picture' });
return cameraControl;
} catch (e) {
showError('دوربین در دسترس نیست: ' + e.message);
}
}
async function toggleFlash() {
const cam = await initCamera();
if (!cam) return;
isFlashOn = !isFlashOn;
try {
await cam.setConfiguration({
mode: 'picture',
flashMode: isFlashOn ? 'on' : 'off'
});
statusEl.textContent = isFlashOn ? 'روشن' : 'خاموش';
statusEl.className = isFlashOn ? 'status-on' : 'status-off';
} catch (e) {
showError('خطا: ' + e.message);
}
}
// مدیریت دکمه سختافزاری Enter
document.addEventListener('keydown', function(e) {
if (e.key === 'Enter') {
toggleFlash();
}
});
initCamera();
</script>
</body>
</html>برنامه چراغ قوه از MozCamera API برای کنترل فلاش دوربین استفاده میکند. کاربر دکمه سختافزاری Enter را فشار میدهد — handler keydown فعال میشود که flashMode را بین on و off تغییر میدهد. وضعیت در یک بلوک متنی با کلاس status-on/status-off برای نشاندهی بصری نمایش داده میشود. MozCamera API فقط برای برنامههای privileged با مجوز camera در مانیفست در دسترس است.
KaiOS Web API — مجموعهای از رابطهای JavaScript که دسترسی به قابلیتهای سختافزاری تلفن را فراهم میکنند. بیشتر APIها افزونههای اختصاصی Mozilla (با پیشوند moz) هستند و در مرورگرهای معمولی در دسترس نیستند. برای استفاده از API، برنامه باید در مانیفست دارای نوع privileged یا certified باشد.
MozMobileConnection — اطلاعات شبکه: اپراتور، سطح سیگنال، نوع شبکه (4G/3G/2G)، IMEI، وضعیت رومینگ. MozTelephony — مدیریت تماسها: شمارهگیری، پاسخ، پایان، کنفرانس، وضعیت تماس. MozSms — ارسال و دریافت SMS، MMS، مدیریت پیامها در سیمکارت. MozContacts — خواندن و نوشتن دفترچه تلفن. MozBluetooth — مدیریت Bluetooth: کشف دستگاهها، جفتسازی، انتقال فایل. Push API — دریافت اعلانهای فشار از سرور.
// کار با مخاطبین و تماسها از طریق Web API KaiOS
const TelephonyManager = {
// انجام تماس با شماره
async makeCall(phoneNumber) {
if (!navigator.mozTelephony) {
throw new Error('Telephony API در دسترس نیست');
}
const call = navigator.mozTelephony.dial(phoneNumber);
call.onconnected = () => console.log('تماس برقرار شد');
call.ondisconnected = () => console.log('تماس پایان یافت');
return call;
},
// دریافت لیست مخاطبین از دفترچه تلفن
async getContacts() {
const cursor = navigator.mozContacts.getAll({
sortBy: 'familyName',
sortOrder: 'ascending'
});
const contacts = [];
return new Promise((resolve, reject) => {
cursor.onsuccess = function() {
if (this.result) {
contacts.push(this.result);
this.continue();
} else {
resolve(contacts);
}
};
cursor.onerror = function() {
reject(this.error);
};
});
},
// ارسال SMS
async sendSms(phoneNumber, message) {
if (!navigator.mozSms) {
throw new Error('SMS API در دسترس نیست');
}
const request = navigator.mozSms.send(phoneNumber, message);
return new Promise((resolve, reject) => {
request.onsuccess = () => resolve(request.result);
request.onerror = () => reject(request.error);
});
}
};
// نمونه استفاده
TelephonyManager.getContacts()
.then(contacts => console.log('تعداد مخاطبین یافت شده:', contacts.length))
.catch(err => console.error(err));شی TelephonyManager سه API کلیدی KaiOS را ترکیب میکند: mozTelephony برای تماسها، mozContacts برای دفترچه تلفن و mozSms برای پیامها. getAll() با cursor — الگویی برای خواندن ناهمزمان حجم زیادی از دادهها (معمول برای مخاطبین با بیش از ۱۰۰۰ ورودی). همه APIها DOMRequest با handlerهای onsuccess و onerror برمیگردانند.
Web APIهای KaiOS محدودیتهایی دارند: API تماس و SMS فقط در تلفنها در دسترس است (نه در تبلتها)، دوربین — فقط با دوربین فیزیکی، Bluetooth — پروفایل محدود HSP/HFP. Push API نیاز به پشتیبانی سرور Google Firebase (FCM) یا سرور شخصی دارد. API موقعیتیابی از A-GPS یا Cell ID بسته به پشتیبانی سختافزاری استفاده میکند.
| API | نوع برنامه | دسترسی | نسخه KaiOS |
|---|---|---|---|
| MozMobileConnection | privileged | همه تلفنها | 2.5+ |
| MozTelephony | privileged | فقط تلفنها | 2.5+ |
| MozSms | privileged | فقط تلفنها | 2.5+ |
| MozContacts | privileged | همه تلفنها | 2.5+ |
| MozBluetooth | certified | با ماژول Bluetooth | 2.5+ |
| Geolocation API | web | با GPS/Cell ID | 2.5+ |
| Push API | privileged | با اینترنت | 3.0+ |
| WebGL 2.0 | web | با شتاب GPU | 3.0+ |
رابط کاربری KaiOS برای کنترل با صفحهکلید T9 و دکمههای سختافزاری طراحی شده است. وضوح صفحه استاندارد — ۲۴۰×۳۲۰ پیکسل (QVGA) در اکثر تلفنهای دکمهای. نبود صفحه لمسی به این معنی است که تمام ناوبری از طریق رویدادهای keydown/keyup انجام میشود: ArrowUp، ArrowDown، ArrowLeft، ArrowRight، Enter، Back (یا Escape).
KaiOS از CSS :focus به شکل معمول پشتیبانی نمیکند — فوکوس از طریق tabindex و JavaScript مدیریت میشود. توسعهدهنده باید به صورت دستی عنصر انتخاب شده فعلی را ردیابی کرده و با فشار کلیدها فوکوس را جابجا کند. توصیه میشود از data-index در عناصر لیست برای سادهسازی ناوبری استفاده شود. عنصر انتخاب شده معمولاً از طریق کلاس .selected با ویژگی background-color CSS با رنگ متضاد برجسته میشود.
// ناوبری فوکوس در لیست برای KaiOS
class ListNavigation {
constructor(containerSelector) {
this.container = document.querySelector(containerSelector);
this.items = this.container.querySelectorAll('[data-index]');
this.currentIndex = 0;
this.init();
}
init() {
this.updateFocus();
document.addEventListener('keydown', (e) => {
switch (e.key) {
case 'ArrowUp':
e.preventDefault();
this.moveFocus(-1);
break;
case 'ArrowDown':
e.preventDefault();
this.moveFocus(1);
break;
case 'Enter':
e.preventDefault();
this.selectItem();
break;
case 'Backspace':
case 'Escape':
e.preventDefault();
this.goBack();
break;
}
});
}
moveFocus(direction) {
this.items[this.currentIndex].classList.remove('selected');
this.currentIndex = (this.currentIndex + direction + this.items.length) % this.items.length;
this.updateFocus();
}
updateFocus() {
const el = this.items[this.currentIndex];
el.classList.add('selected');
el.scrollIntoView({ block: 'nearest' });
}
selectItem() {
const el = this.items[this.currentIndex];
const event = new CustomEvent('itemselected', {
detail: { index: this.currentIndex, element: el }
});
this.container.dispatchEvent(event);
}
goBack() {
history.back();
}
}
// راهاندازی ناوبری برای لیست منو
const nav = new ListNavigation('#menu-list');
nav.container.addEventListener('itemselected', (e) => {
console.log('عنصر انتخاب شد:', e.detail.index);
});کلاس ListNavigation ناوبری فوکوس کامل را برای KaiOS پیادهسازی میکند. ArrowUp/ArrowDown فوکوس را به صورت چرخشی روی عناصر با data-index جابجا میکنند. Enter رویداد سفارشی itemselected را فراخوانی میکند. Backspace/Escape به صفحه قبلی برمیگردند. scrollIntoView با block: nearest به طور خودکار صفحه را زمانی که عنصر از منطقه قابل مشاهده خارج میشود اسکرول میکند.
KaiOS 2.5 از CSS 2.1 + بخشی از CSS3 (border-radius، box-shadow، gradients) پشتیبانی میکند. Flexbox در KaiOS 2.5 به صورت جزئی، در KaiOS 3.0 به صورت کامل از جمله CSS Grid پشتیبانی میشود. برای سازگاری توصیه میشود از طرحبندی float با عرض ثابت استفاده شود. فونت پیشفرض — TizenSans یا Noto Sans CJK برای بازارهای آسیایی. اندازه متن — ۱۴-۱۶ پیکسل برای محتوای اصلی، ۱۸-۲۰ برای عنوانها.
KaiStore — فروشگاه رسمی برنامههای KaiOS که از قبل روی همه دستگاهها نصب شده است. توسعهدهنده در پورتال توسعهدهندگان KaiOS (developer.kaiostech.com) ثبتنام میکند، بسته ZIP امضا شده را بارگذاری میکند و توضیحات را پر میکند. نظارت امنیت، پایداری و مطابقت با خط مشی محتوا را بررسی میکند. میانگین زمان بررسی — ۳-۵ روز کاری.
KaiOS نیاز به امضای دیجیتال برنامه از طریق KaiOS Certificate دارد. توسعهدهنده یک جفت کلید (خصوصی + عمومی) از طریق ابزار kaios-sign تولید میکند، کلید عمومی را به پورتال توسعهدهندگان KaiOS ارسال میکند و گواهی دریافت میکند. فایل .zip امضا شده شامل امضا در پوشه META-INF است. بدون امضا، برنامه فقط در دستگاههای توسعهدهنده نصب میشود.
KaiStore از برنامههای رایگان، تبلیغات از طریق KaiOS Ads SDK و خریدهای درونبرنامهای از طریق صورتحساب اپراتور (Direct Carrier Billing) پشتیبانی میکند. کمیسیون KaiStore — ۳۰٪ از درآمد. کانال جایگزین — نصب پیشفرض از طریق تولیدکنندگان OEM (Jio، Nokia، Alcatel، Doro). برای نصب پیشفرض نیاز به قرارداد مستقیم با تولیدکننده دستگاه است.
| مرحله | اقدام | مدت |
|---|---|---|
| ثبتنام | ایجاد حساب در پورتال توسعهدهندگان KaiOS | ۱ روز |
| امضا | تولید کلید، دریافت گواهی | ۱-۲ روز |
| ساخت | بستهبندی .zip با مانیفست و امضا | ۱ ساعت |
| بارگذاری | بارگذاری بسته، پر کردن توضیحات | ۱ روز |
| نظارت | بررسی امنیت و کیفیت | ۳-۵ روز |
| انتشار | عرضه در KaiStore برای همه مناطق | ۱ روز |
KaiStore در برخی کشورها از برنامههای پولی پشتیبانی نمیکند (پرداخت فقط از طریق صورتحساب اپراتور). اندازه برنامه برای بارگذاری از طریق شبکههای 2G/3G به ۱۰ مگابایت محدود است. برنامه نباید بیش از ۵۰ مگابایت رم استفاده کند. دسترسی به API mozMobileConnection بدون ذکر صریح در مانیفست ممنوع است. نقض خط مشیها منجر به مسدود شدن حساب توسعهدهنده میشود.
سوالات متداول
KaiOS — یک سیستم عامل برای تلفنهای دکمهای بر پایه موتور وب Gecko از Mozilla است. روی دستگاههایی با ۲۵۶-۵۱۲ مگابایت رم کار میکند، از 4G VoLTE، GPS و Bluetooth پشتیبانی میکند. برنامهها با HTML5، CSS و JavaScript نوشته میشوند. طبق Counterpoint Research، KaiOS روی بیش از ۲۰۰ میلیون دستگاه نصب شده است.
تنها پشته توسعه — HTML5، CSS و JavaScript. KaiOS از زبانهای بومی مانند C++ یا Java پشتیبانی نمیکند. همه برنامهها Open Web Apps مطابق با مشخصات W3C هستند. برای دسترسی به عملکردهای سختافزاری از Mozilla Web API با پیشوند moz استفاده میشود. برنامه در یک بایگانی ZIP با manifest.webapp بستهبندی میشود.
فروشگاه رسمی — KaiStore با ثبتنام در پورتال توسعهدهندگان KaiOS. برنامه با گواهی توسعهدهنده امضا میشود و در قالب .zip بارگذاری میشود. نظارت ۳-۵ روز طول میکشد. کانال جایگزین — نصب پیشفرض روی دستگاههای جدید از طریق قرارداد با تولیدکننده OEM. کمیسیون KaiStore — ۳۰٪.
KaiOS از موتور وب Gecko برای برنامههای HTML5 استفاده میکند و ۲۵۶-۵۱۲ مگابایت رم نیاز دارد. Android Go برنامههای بومی APK را روی Dalvik/ART اجرا میکند و ۱-۲ گیگابایت رم نیاز دارد. KaiOS روی تلفنهای دکمهای با قیمت تا ۳۰ دلار کار میکند، Android Go — روی گوشیهای هوشمند ارزانقیمت از ۵۰ دلار. KaiOS انرژی کمتری مصرف میکند و بدون شارژ بیشتر دوام میآورد.
APIهای اصلی: MozMobileConnection (شبکه)، MozTelephony (تماسها)، MozSms (SMS)، MozContacts (مخاطبین)، MozBluetooth (Bluetooth)، Geolocation API، Vibration API، Push API، Notification API. برای دسترسی به camera API نیاز به نوع برنامه privileged است. Push API از KaiOS 3.0 در دسترس است.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید