Системные интеграции нативных мобильных приложений¶
Требования применяются к возможностям iOS и Android. Уровни обязательности
определены в корневом README.md.
MOB-PLAT-001. Push notifications¶
Уровень: MUST
Применяется к: приложению с push notifications
Permission должно запрашиваться после объяснения ценности. Device token должен считаться изменяемым credential доставки, передаваться backend по TLS и удаляться при logout или отказе. Payload не должен содержать секреты или чувствительные данные; обработка duplicate и out-of-order должна быть безопасной.
Обоснование¶
Push проходит через внешнюю инфраструктуру и может отображаться на lock screen.
Проверка¶
- permission allow/deny/revoke;
- ротация token и logout;
- duplicate и delayed notification tests.
Исключения¶
Публичный текст допустим по продуктовому контракту.
MOB-PLAT-002. Universal links и App Links¶
Уровень: MUST
Применяется к: внешней навигации в приложение
iOS должна использовать Universal Links, Android — verified App Links. Допустимые hosts и маршруты должны быть allowlist; параметры должны валидироваться как недоверенный ввод. Custom URL scheme не должен принимать credentials или быть единственным механизмом для защищённого действия.
Обоснование¶
Непроверенная ссылка допускает перехват и произвольную навигацию.
Проверка¶
- association verification;
- malicious host/path tests;
- cold/warm start deep-link tests.
Исключения¶
Custom scheme допустим для OAuth redirect с PKCE и точной регистрацией.
MOB-PLAT-003. Фоновое выполнение¶
Уровень: MUST
Применяется к: background task, upload, download или sync
Работа должна использовать системные API и укладываться в выданный OS budget. Она должна быть идемпотентной, возобновляемой и завершаться при expiration callback. Запрещено поддерживать процесс активным обходом платформенных лимитов.
Обоснование¶
ОС не гарантирует время запуска и продолжительность background work.
Проверка¶
- expiration, suspension и restart tests;
- проверка battery/network constraints;
- тест duplicate scheduling.
Исключения¶
Объявленный системный background mode допускается только для соответствующего назначения приложения.
MOB-PLAT-004. Биометрическая аутентификация¶
Уровень: MUST
Применяется к: Face ID, Touch ID или Android BiometricPrompt
Биометрия должна использовать системный API и разблокировать локальный credential или ключ, а не заменять серверную идентичность. Должны быть определены fallback, отмена, lockout и изменение biometric enrollment. Приложение не должно получать или хранить biometric template.
Обоснование¶
Система подтверждает локальное присутствие, а не право на backend-операцию.
Проверка¶
- success, failure, cancel и lockout tests;
- изменение enrollment;
- review Keychain/Keystore access policy.
Исключения¶
Операция может запрещать fallback по модели угроз.
MOB-PLAT-005. Восстановление UI state¶
Уровень: MUST
Применяется к: background, process death и configuration change
Значимое незавершённое состояние должно восстанавливаться из минимального сериализуемого state. SwiftUI/Compose view state не должен быть единственным источником результата операции. После восстановления должны повторно проверяться сессия и доступ.
Обоснование¶
ОС может уничтожить процесс без пользовательского завершения сценария.
Проверка¶
- process death и relaunch;
- Android configuration change;
- тест истёкшей сессии при restore.
Исключения¶
Чувствительное одноразовое состояние должно безопасно сбрасываться.
MOB-PLAT-007. Локализация и форматирование¶
Уровень: MUST
Применяется к: пользовательскому тексту и layout приложения, поддерживающего две и более locale либо имеющего обязательный процесс перевода
Строки должны храниться в платформенных localization resources, поддерживать plural rules и не собираться конкатенацией переводимых фрагментов. Числа, даты, валюта и направление layout должны определяться locale. UI должен выдерживать расширение текста и RTL для заявленных локалей.
Обоснование¶
Платформенные ресурсы обеспечивают корректные правила locale.
Проверка¶
- pseudo-localization;
- plural, long text и RTL tests;
- статический поиск hardcoded строк.
Исключения¶
Технический идентификатор, не показываемый пользователю, может быть в коде. К приложению без обязательного процесса перевода и с одной locale требование не применяется; это не является исключением.