Перейти к содержанию

Системные интеграции нативных мобильных приложений

Требования применяются к возможностям 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.

Исключения

Публичный текст допустим по продуктовому контракту.

Уровень: 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 требование не применяется; это не является исключением.