Разработка мобильного приложения для корпоративного портала
Корпоративный портал на мобильном — это не адаптивная версия интранета. Это отдельное приложение со своей архитектурой, которое должно работать в условиях корпоративной инфраструктуры: VPN, MDM-политики, ограниченный интернет на рабочих устройствах, Active Directory, LDAP и SSO через SAML или OIDC.
Аутентификация в корпоративной среде
Самое частое требование: вход через корпоративный SSO. Если в компании Microsoft 365 — это Azure AD с OAuth 2.0 / OIDC. Если on-premise — ADFS с SAML. Если смешанная инфраструктура — Okta или PingFederate как IdP.
Для мобильных OIDC-флоу используем AppAuth — стандартная библиотека с поддержкой iOS и Android:
// Android — OIDC через AppAuth
val serviceConfig = AuthorizationServiceConfiguration(
Uri.parse("https://login.microsoftonline.com/$tenantId/oauth2/v2.0/authorize"),
Uri.parse("https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token")
)
val authRequest = AuthorizationRequest.Builder(
serviceConfig,
clientId,
ResponseTypeValues.CODE,
Uri.parse("com.company.app://auth/callback")
)
.setScope("openid profile email offline_access")
.build()
authService.performAuthorizationRequest(authRequest, pendingIntent)
После получения authorization_code обмениваем на access_token + refresh_token. Токены храним в EncryptedSharedPreferences. Refresh происходит автоматически через перехватчик в OkHttp.
Интеграция с корпоративными системами
Типичный стек данных корпоративного портала: SharePoint / Confluence для документов, Jira / ServiceNow для задач и тикетов, AD для оргструктуры и контактов, Exchange / Google Workspace для календаря.
Microsoft Graph API покрывает большинство потребностей для Microsoft-стека:
suspend fun getMyDocuments(): List<DriveItem> {
return graphClient
.me()
.drive()
.root()
.children()
.buildRequest()
.select("id,name,lastModifiedDateTime,webUrl")
.top(50)
.get()
.currentPage
}
Для Exchange-календаря — MS Graph /me/calendarView с диапазоном дат. Для оргструктуры — /users/{id}/directReports и /users/{id}/manager.
Если портал on-premise без Microsoft 365 — REST API SharePoint (2016/2019), который значительно отличается от Graph. NTLM-аутентификация для on-premise — отдельная задача на мобильном: OkHttp поддерживает NTLM через authenticator(), но требует аккуратной настройки.
MDM и корпоративные ограничения
MDM (Mobile Device Management) накладывает политики на устройство или на приложение. Для корпоративных приложений два сценария:
MAM (Mobile Application Management) — политики применяются к конкретному приложению без управления всем устройством. Microsoft Intune MAM SDK позволяет применять политики к приложению: запрет copy/paste, запрет скриншотов, принудительный PIN перед запуском.
MDM-enrolled устройства — IT управляет устройством полностью. Приложение распространяется через managed distribution (Apple Business Manager / Google Enterprise). Не через App Store напрямую.
Intune MAM SDK для Android подключается как dependency и инициализируется через MAMApplication:
class MyApp : MAMApplication() {
override fun onCreate() {
super.onCreate()
// MAM автоматически применяет политики
}
}
Без этой интеграции приложение может быть заблокировано корпоративной политикой на enrolled-устройствах.
Офлайн и синхронизация
Корпоративные сети нестабильны — VPN разрывается, корпоративный Wi-Fi теряется. Критичный функционал должен работать офлайн: просмотр документов, контакты, задачи.
На Android — Room для кэша + WorkManager для фоновой синхронизации. На iOS — Core Data + BGAppRefreshTask. Конфликты при синхронизации разрешаем по timestamp последнего изменения: серверные данные побеждают, если пользователь не редактировал локально.
Push-уведомления о новых задачах и документах через FCM / APNs. В корпоративных сетях FCM может быть заблокирован файрволом — нужен fallback на polling или WebSocket.
Стек и сроки
Flutter или React Native — оптимальный выбор для корпоративных порталов: одна кодовая база для iOS и Android, быстрая разработка. Нативная разработка оправдана, если есть жёсткие требования к Intune SDK или специфическая нативная интеграция.
Архитектура: Clean Architecture + BLoC (Flutter) или Redux Toolkit (React Native). Modular структура: auth, documents, tasks, contacts, calendar — независимые модули со своими репозиториями.
MVP (SSO + оргструктура + документы): 2-3 месяца. Полный портал с задачами, календарём, уведомлениями, офлайн — 4-6 месяцев. Стоимость рассчитывается индивидуально после аудита корпоративной инфраструктуры.







