Розробка мобільного додатку для корпоративного портальу
Корпоративний портал на мобільному пристрої — це не адаптивна версія інтранету. Це окремий додаток із власною архітектурою, який повинен працювати в умовах корпоративної інфраструктури: 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. Оновлення відбувається автоматично через перехоплювач 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 — SharePoint REST API (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 підключається як залежність та ініціалізується через MAMApplication:
class MyApp : MAMApplication() {
override fun onCreate() {
super.onCreate()
// MAM автоматично застосовує політики
}
}
Без цієї інтеграції додаток може бути заблокований корпоративною політикою на enrolled-пристроях.
Оффлайн та синхронізація
Корпоративні мережі нестабільні — VPN розривається, корпоративний Wi-Fi втрачається. Критичний функціонал повинен працювати оффлайн: перегляд документів, контакти, задачі.
На Android — Room для кешу + WorkManager для фонової синхронізації. На iOS — Core Data + BGAppRefreshTask. Розв'язуємо конфлікти синхронізації за часом останньої зміни: серверні дані перемагають, якщо користувач не редагував локально.
Push-сповіщення про нові задачі та документи через FCM / APNs. На корпоративних мережах FCM може бути заблокований файрволом — потрібен fallback на polling або WebSocket.
Стек та сроки
Flutter або React Native — оптимальний вибір для корпоративних порталів: один набір кодової бази для iOS та Android, швидка розробка. Нативна розробка виправдана, якщо є жорсткі вимоги до Intune SDK або специфічна нативна інтеграція.
Архітектура: Clean Architecture + BLoC (Flutter) або Redux Toolkit (React Native). Модульна структура: auth, documents, tasks, contacts, calendar — незалежні модулі з власними репозиторіями.
MVP (SSO + оргструктура + документи): 2–3 місяці. Повний портал із задачами, календарем, сповіщеннями, оффлайном — 4–6 місяців. Вартість розраховується індивідуально після аудиту корпоративної інфраструктури.







