Файл manifest.webapp является одним из основных файлов, необходимых для работы того или иного приложения. В этом файле содержится полная информация о приложении: имя, версия, описание, расположение иконок, языковые параметры и многое другое. Но самое главное, он содержит список API функций, доступных вашему приложению. Кодировка файла: UTF-8 без BOM.
Файл manifest.webapp должен находиться в корневом каталоге вашего приложения. Структура файла соответствует стандарту JSON. Ниже приведён простейший файл манифеста.
{
"name": "Simple App",
"short_name": "Simple App",
"description": "Your first app",
"launch_path": "/index.html",
"version": "0.9.9",
"icons": {
"56": "/icons/BodyWeight_56.png",
"112": "/icons/BodyWeight_112.png"
},
"developer": {
"name": "Myself"
},
"locales": {
"en-US": {
"name": "Body Weight",
"description": "Your Ideal Body Weight"
}},
"default_locale": "en-US",
"type":"privileged"
}
Поля в манифесте могут идти в произвольном порядке. Поля, которых нет в приведённом ниже материале, будут системой игнорироваться. Рассмотрим структуру файла более подробно.
Обязательные поля
name
Название приложения. Максимальная длина составляет 20 символов. Если вы измените название своего приложения после дистрибуции, оно не будет обновлено для существующих установок.
"name": "Hello World"
version
Версия приложения. Целые числа, разделённые точкой.
"version": "1.0.1"
description
Короткое описание приложения.
"description": "Dancing app"
icons
Примечание: одна иконка размером 56х56 пикселей обязательна для всех приложений. Иконка разрешением 112х122 не является обязательной, но желательна для всех приложений.
Путь к иконкам приложений. Иконки должны быть квадратными в формате .png.
"icons": {
"56": "/img/icon_56.png",
"112": "/img/icon_112.jpg"
}
developer
Примечание: только поле name является обязательным для всех приложений
- name: имя разработчика.
- url: адрес веб-сайта разработчика. Опционально.
"developer": {
"name": "Bagration",
"url": "http://www.site.com"
}
locales
Список одного или нескольких языков, для которых есть переведённое название и описание приложения.
"locales": {
"en-US": {
"name": "Simple App",
"description": "Very simple app"
},
"ru-RU": {
"name": "Простое приложение",
"description": "Очень простое приложение"
}
}
default_locale
Язык по умолчанию - определяет язык, который вы использовали в значениях полей манифеста вашего приложения. Список языковых кодов (стандарт RFC 4646), используемых в системе KaiOS вы можете посмотреть ниже:
af-ZA | Afrikaans |
ar-SA | عربي |
az-Latn-AZ | Azərbaycan |
be-BY | Беларуская |
bg-BG | Български |
bn-IN | বাংলা (IN) |
bn-BD | বাংলা-BD |
bs-BA | Bosanski |
cs-CZ | Česky |
da-DK | Dansk |
de-DE | Deutsch |
el-GR | Ελληνικά |
en-GB | English (GB) |
en-US | English (US) |
es-US | Español (US) |
et-EE | Eesti |
es-ES | Español (ES) |
fa-IR | فارسی (IR) |
fi-FI | Suomi |
fil-PH | Tagalog |
fr-CA | French (CA) |
fr-FR | Français (FR) |
he-IL | עברית |
hi-HI | हिन्दी |
hr-HR | Hrvatski |
hu-HU | Magyar |
hy-AM | Հայերեն |
id-ID | Bahasa Indonesia |
is-IS | Íslenska |
it-IT | Italiano |
it-LT | Lietuvių |
ka-GE | ქართული |
kk-KZ | Қазақша |
km-KH | ភាសាខ្មែរ |
lo-LA | ລາວ |
lv-LV | Latviešu |
mk-MK | Македонски |
mo-RO | Молдовеняскэ |
ms-MY | Melayu |
nb-NO | Norsk (bokmål) |
ne-IN | नेपाली |
nl-NL | Nederlands |
pl-PL | Polski |
ps-AF | پښتو |
pt-BR | Português (do Brasil) |
pt-PT | Português (Europeu) |
ro-RO | Română |
ru-RU | Русский |
si-LK | සිංහල |
sk-SK | Slovenčina |
sl-SI | Slovenščina |
sq-AL | Shqip |
sr-Latn-CS | Српски/Srpski |
sv-SE | Svenska |
sw-ZA | Kiswahili |
ta-IN | தமிழ் |
th-TH | ไทย |
tr-TR | Türkçe |
uk-UA | Українська |
ur-PK | اردو |
uz-Cyrl-UZ | O'zbek |
vi-VN | Tiếng Việt |
xh-ZA | isiXhosa |
zh-CN | 中文 (简体) |
zh-HK | 中文-HK |
zh-TW | 中文-TW |
zu-ZA | isiZulu |
as-IN | অসমীয়া |
und-bod | बोड़ो |
doi-IN | डोगरी |
gu-IN | ગુજરાતી |
kn-IN | ಕನ್ನಡ |
ks-IN | کأشُر |
kok-IN | कोंकणी |
mai-IN | मैथिली |
ml-IN | മലയാളം |
mni-IN | মণিপুরী |
mr-IN | मराठी |
or-IN | ଓଡ଼ିଆ |
pa-IN | ਪੰਜਾਬੀ |
sa-IN | संस्कृत |
sat-IN | ᱥᱟᱱᱛᱟᱞᱤ |
sd-IN | सिन्धी |
te-IN | తెలుగు |
ko-KR | 한국어" |
Например, если ваше приложение использует английский язык, его default_locale будет:
"default_locale": "en-US"
type
Примечание: без указания типа privileged приложение невозможно выложить на KaiStore.
Тип приложения, который определяет уровень доступа к API-интерфейсам устройства. Если вы не определили тип, по умолчанию в качестве типа будет использоваться web.
- web: обычное приложение. Имеет наименьший доступ к API.
- privileged: привилегированное приложение. Этот тип имеет больший доступ к API, чем web.
Опциональные поля
short_name
Короткое название приложения. Может отличатся от значения поля name.
"short_name": "World"
subtitle
Подзаголовок появляются под именем вашего приложения в KaiStore. Подзаголовок - это короткий, яркий и запоминающийся текст, предназначенный для краткого изложения сути вашего приложения. Максимальная длина подзаголовка составляет 40 символов.
"subtitle": "My Best App"
bgs
Путь к фоновым изображениям для ваших иконок.
"bgs": {
"56": "/back_56.png",
"112": "/back_112.png"
}
launch_path
Путь к запускаемому файлу в вашем приложении.
"launch_path": "/index.html"
origin
Примечание: применяется только к привилегированным или сертифицированным упакованным (в формате .zip) приложениям.
Приложения имеют специальный внутренний протокол app://UUID, где UUID - это строка, уникальная для каждого устройства, на котором установлено приложение. Поле orign позволяет заменить значение UUID именем домена, которое будет использоваться каждым установленным приложением.
Примечание: доменное имя должно начинаться с app://, и вы должны быть владельцем указанного вами доменного имени.
Внимание: в настоящее время UUID недоступен.
"origin": "app://mysite.com"
permissions
Пользовательские разрешения для API функций, которые необходимы вашему приложению, например, доступ к контактам пользователя. Каждое разрешение требует:
- name: название разрешения;
- description: описание причины, по которой вашему приложению нужно использовать это разрешение;
- access: требуемый уровень доступа. Могут быть: readonly (только чтение), readwrite (чтение и запись), readcreate (чтение и создание) и createonly (только создание).
"permissions": {
"contacts": {
"description": "access to the users сontacts",
"access": "readcreate"
}
}
Примечание: если приложение пытается использовать один из API без соответствующей записи в поле прав доступа, оно не будет работать.
fullscreen
Элемент управления, который сообщает среде выполнения, запускать ли приложение в полноэкранном режиме или нет.
"fullscreen": "true"
datastores-owned
Примечание. Применяется только к привилегированным/сертифицированным приложениям.
При использовании Data Store API приложение, которому принадлежит хранилище данных, должно иметь поле datastores-owned в своем манифесте, чтобы подтвердить права владения.
"datastores-owned": {
"myData": {
"access": "readwrite",
"description": "my data store"
}
}
datastores-access
Примечание. Применяется только к привилегированным/сертифицированным приложениям.
При использовании Data Store API любое приложение, не являющееся владельцем, которое хочет получить доступ к хранилищу данных, должно включать в свой манифест поле доступа к данным.
"datastores-access": {
"myData": {
"access": "readwrite",
"description": "Read and modify my data store"
}
}
messages
Примечание. Применяется только к привилегированным/сертифицированным приложениям.
Системные сообщения, которые вы позволяете перехватывать приложению, и ссылки на страницы в вашем приложении, которые будут отображаться при появлении этих сообщений.
"messages": [
{ "alarm": "/alarm.html" }
{ "notification": "/notify.html" }
{ "telephony-new-call": "/call.html" }
]
redirects
Примечание. Применяется только к привилегированным/сертифицированным приложениям.
Внутренние URL-адреса, используемые вашим приложением для обработки внешних процессов.
Например, ваше приложение использует проверку подлинности OAuth Facebook для получения контактов пользователя. Когда аутентификация завершена, сервер перенаправляет запрос обратно на URL-адрес. Поскольку приложение не размещено в Интернете,оно не имеет действительного URL-адреса, на который можно перенаправить. Таким образом, вы используете поле redirects для перенаправления внешнего URL-адреса на внутренний URL-адрес приложения.
"redirects": [
{
"from": "http://facebook.com/authentication/success.html",
"to": "/app/index.html"
}
]
activities
Набор веб-действий (activities), которые поддерживает ваше приложение (полный список).
- Каждое свойство в этом поле является действием.
- Имена действий записываются в произвольной форме.
- Каждое действие представлено объектом.
"activities": {
"share": {
"filters": {
"type": [ "image/png", "image/gif" ]
},
"href": "footer.html",
"disposition": "window",
"returnValue": true
}
}
precompile
Путь к файлам JavaScript, содержащим код asm.js, который вы хотите скомпилировать во время установки.
Компиляция во время установки увеличивает продолжительность процесса установки, но сокращает время, необходимое для запуска приложения.
"precompile": [
"first.js",
"second.js"
]
csp
Это поле можно использовать для определения Политики безопасности контента (CSP), которая применяется ко всем страницам в приложении. Политики, которые вы можете добавить в CSP, перечислены в директивах политик CSP, и для приложения вам необходимо включить их в поле.
"csp" : "default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'"
Политики по умолчанию, применяемые к привилегированным и сертифицированным приложениям KaiOS:
Privileged CSP
default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'
Certified/Internal CSP
default-src *; script-src 'self'; object-src 'none'; style-src 'self'
Значения по умолчанию не могут быть переопределены, только добавлены.
orientation
Зафиксировать ориентацию экрана в одним из следующих способов:
- portrait-primary: обычная портретная;
- portrait-secondary: перевёрнутая портретная;
- portrait: портретная, в зависимости от положения телефона (обычная или перевёрнутая);
- landscape-primary: ландшафтная (телефон на левом боку);
- landscape-secondary: ландшафтная (телефон на правом боку);
- landscape: ландшафтная в зависимости от положения телефона (на левом или правом боку).
"orientation": [ "portrait-primary" ]
По материалам сайта: Kaiostech