We regularly encounter situations where after implementing Bitrix24, mobile push notifications do not work. Clients receive complaints from employees: chat messages missing, tasks overlooked, lead notifications arriving late. Most often, the problem lies in incorrect Firebase Cloud Messaging (FCM) keys for Android or Apple Push Notification Service (APNs) certificates for iOS. We handle this setup end-to-end and resolve failures within 1–2 days. Our service costs $150–$350 depending on complexity, saving businesses up to 5% of revenue by preventing missed leads.
How push notification delivery works
Bitrix24 uses the mobile module and the push.bitrix24.com service as an intermediate push broker. Your Bitrix24 server sends an event to push.bitrix24.com, which then forms a request to FCM or APNs, and finally the notification reaches the device. This is important: if your Bitrix24 is installed on-premise and firewalled, the broker must be able to reach your server via API.
For on-premise Bitrix24, the chain looks like this:
- Event on the portal (new message, task, lead) → trigger in the
mobile module
- Request to
https://push.bitrix24.com/pub/ with device token and payload
- Broker → FCM/APNs → user's device
Device tokens are stored in the b_mobile_device table. When the app is reinstalled, the token changes, and the old one is marked invalid after the first failed response from FCM/APNs.
Why push notifications don't arrive: typical causes
-
Firebase key mismatch. Bitrix24 up to version 22.x uses Legacy API — a key like
AAAAxxxxxxx:APA91b.... Starting from newer versions of the mobile module, FCM HTTP v1 API via OAuth2 token from a service account is supported. If you upgraded but kept the old key, push stops working. We recommend configuring FCM v1 immediately — it's more reliable and won't require key updates in the future.
-
Apple APNs certificates. Apple uses two authentication mechanisms:
.p12 certificates and .p8 keys (token authentication). Certificates expire after one year — a typical reason for sudden push failure on iOS. .p8 keys have no expiration, so we recommend them. To generate a .p8 key: Apple Developer Console → Certificates, Identifiers & Profiles → Keys → create a key with the Apple Push Notifications service (APNs) flag. You can download it only once.
Comparison of Legacy and FCM v1 for Bitrix24
| Aspect |
FCM Legacy API |
FCM HTTP v1 |
| Support in Bitrix24 |
Up to version 22.x |
Starting from mobile module 22.x |
| Key type |
Static Server Key |
OAuth2 token from a service account |
| Key duration |
Unlimited |
Token auto-refreshes |
| Security |
Low (key can be easily compromised) |
High (limited permissions) |
| Recommendation |
Only for old versions |
For all new projects |
FCM HTTP v1 is better than Legacy API in terms of security and does not require manual key renewal. We migrate clients to v1 as part of push setup.
How to diagnose push notification failures
If push isn't working, first check the b_push_queue table. If unprocessed records accumulate, the agent \Bitrix\Push\QueueAgent is not running. Set up cron for agents. Another common cause is an incorrectly set external portal address in on-premise settings. Ensure that push.bitrix24.com can reach your server.
Technical details for setting up FCM v1
- Create a project in Firebase Console.
- Add a service account in project settings (IAM & Admin → Service Accounts).
- Download the JSON key.
- In Bitrix24: Administration → Mobile App → Push Notifications → select FCM HTTP v1, upload the JSON.
- Test with a test notification.
What is included in push notification setup?
- Full FCM setup (Legacy or v1) for Android
- Full APNs setup (certificate or
.p8 key) for iOS
- Checking and configuring the push broker for on-premise
- Resolving typical issues (duplicates, missing push, delays)
- Administrator instructions for certificate renewal
- 1 month of support after delivery
- Documentation of all settings for future reference
Estimated timeline: from 1 day to 3 days depending on configuration complexity. Cost is calculated individually after an audit.
Diagnosing typical failures
During diagnostics, we often encounter the following situations. If push notifications don't arrive only on iOS, first check the certificate expiry date. Open Keychain Access, find the Apple Push Services: com.your.bundleid certificate — look at the expiration date. If expired — regenerate via Apple Developer Portal and re-upload to Bitrix24.
If push notifications don't arrive on both Android and iOS after a server migration, the portal may have changed its domain or IP, but push.bitrix24.com doesn't know the new address yet. In on-premise registration settings, ensure the external portal address is correct and externally accessible.
Duplicate notifications occur when a user logs in from multiple devices — several active tokens in b_mobile_device. This is normal, but if duplicates multiply without stopping, the app may be registering a new token on each launch instead of updating the existing one.
Check the send queue: if rows in b_push_queue are not decreasing, the agent \Bitrix\Push\QueueAgent is not running. Check cron.
Note: push notifications reach users faster with FCM v1 compared to Legacy, especially under high load on chats and tasks.
For more details, see the official documentation: Push Notifications in Mobile App.
Comparison of APNs authentication methods
| Authentication |
Duration |
Setup complexity |
Recommendation |
| .p12 certificate |
1 year |
Medium |
Only if already using |
| .p8 key (token) |
Unlimited |
Low |
Recommended for all projects |
We have configured push notifications on more than 200 Bitrix24 portals over 5 years. We are a certified Bitrix24 Partner with guaranteed quality. Non-functioning notifications can cost a business up to 5% of revenue due to missed leads and delayed communication. Setting up push notifications pays off within a week by accelerating employee response. Timely diagnostics prevents financial losses from missed leads.
Contact us for a free audit of your current push configuration. We will assess your project and offer the optimal solution. Order push notification setup and ensure stable operation. Get a consultation — write to us on Telegram or by email.
How to choose the right mobile app technology for your Bitrix project?
Service Worker on Bitrix – a separate adventure. The composite cache (CPagesCache) serves an HTML page from the file cache, while the Service Worker caches resources via the Cache API. Two caching layers that know nothing about each other. If you don't separate their strategies, the user sees an outdated cart after adding an item. We start any PWA project on Bitrix by configuring proper separation: Service Worker handles static assets (CSS, JS, fonts) with Cache First, while HTML and API responses always use Network First with a cache fallback. The Bitrix composite cache operates server-side and does not intersect with the client side.
What mobile app types fit your Bitrix ecosystem?
PWA (Progressive Web App) – a web application that looks like a native app but lives in the browser. No store installation needed — add to home screen. React Native – cross-platform by Meta. JavaScript, one codebase — native iOS and Android app with full device API access. Flutter – cross-platform by Google on Dart. Own Skia rendering engine, stable 60/120 FPS. Bitrix24 mobile app – ready-made corporate solution: CRM, tasks, chat, video calls.
| Criterion |
PWA |
React Native |
Flutter |
| Cost |
Low |
Medium |
Medium |
| Launch |
1-3 weeks |
2-4 months |
2-4 months |
| App Store / Google Play |
No (TWA) |
Yes |
Yes |
| Push |
Yes (iOS 16.4+) |
Yes |
Yes |
| Offline |
Basic |
Full |
Full |
| Camera, GPS |
Limited |
Full |
Full |
| Performance |
Medium |
High |
High |
PWA beats native development in launch speed by 3 times, and React Native is 40% cheaper than Flutter in labor costs for a typical online store.
How to implement PWA on Bitrix without cache conflict?
manifest.json – icon, name, display: standalone, theme_color, start_url. The user installs the site on the home screen. Place the file in the root and include via <link rel="manifest"> in header.php of the template.
Service Worker – the core of PWA. Register in footer.php:
- Cache First for static:
/bitrix/cache/, CSS, JS, fonts, product images
- Network First for HTML and API (
/ajax/, /bitrix/services/). If network unavailable – serve cache
- Stale While Revalidate for catalog — show cached, update in background
- Separate logic for cart: always Network Only, otherwise the user sees phantom items
Key nuance – conflict with Bitrix composite. The composite module caches HTML on the server and serves static files. Service Worker should not intercept these responses for authorized users — otherwise a logged-out user will see the previous cart. Solve by checking the BX_USER_ID cookie in the fetch handler.
Push notifications – Firebase Cloud Messaging or OneSignal. Order status (OnSaleStatusOrder → trigger push), promotions, stock arrival. Save device token in user UF field.
Offline catalog – previously viewed items available without internet. IndexedDB for cards, Cache API for images.
Compatibility with Proactive Protection – the security module checks Referer and session tokens. Service Worker during prefetch may not send required headers — configure exceptions in BX_SECURITY_SESSION_VIRTUAL.
Performance improvement of mobile site after PWA implementation is 60-80% Time to Interactive, and mobile conversion rates increase by 25-35%.
According to Wikipedia, PWA combines the best of web and native apps, and with proper Service Worker strategy it works seamlessly on Bitrix CMS.
React Native for online stores on Bitrix
When PWA is not enough – React Native provides a full native app with a single codebase.
Architecture:
- Backend: Bitrix serves data via REST API. Standard methods
catalog.product.list, sale.order.add for catalog and orders. For custom entities – custom controllers via \Bitrix\Main\Engine\Controller
- Intermediate layer: BFF (Backend for Frontend) on Node.js or GraphQL. Aggregate 3-5 requests to Bitrix API into one response for the mobile client – mobile internet doesn't tolerate extra round trips
- Frontend: React Native application
Online store functionality:
- Catalog: search, filters, sorting – data from
CIBlockElement::GetList via REST
- Product page: gallery (react-native-fast-image), description, specs, reviews
- Cart and checkout with persistence via AsyncStorage
- Personal account: orders, favorites, profile, addresses
- Push: order status, promotions, abandoned cart – FCM/APNs, triggers on Bitrix events
- Native features: barcode scanner (react-native-camera), geolocation for pickup points, Face ID / Touch ID (react-native-biometrics)
- Offline: catalog and favorites via AsyncStorage / WatermelonDB
- Deep linking:
react-navigation deep link → specific product from push or ad
React Native is chosen because:
- React developers already know 80% of the stack
- Ecosystem: thousands of ready packages in npm
- Hot Reload – instant feedback during development
- CodePush by Microsoft – update JS bundle without store publication. Fix a bug in minutes instead of 2-3 days of review
Flutter vs React Native: when to choose Flutter
Alternative to React Native. Choose when you need custom UI with heavy animations.
Strengths:
- Skia engine – 60/120 FPS on complex animations where React Native starts to lag due to bridge
- Pixel-perfect identity on iOS and Android – own rendering, not platform widgets
- Dart: strictly typed, errors at compile time, not in production on user's device
- Material Design and Cupertino widgets out of the box
When Flutter:
- Interface with complex animations and custom screen transitions
- Critical to have identical UI on both platforms
- Plans for web and desktop (Flutter supports all three targets)
- Team knows Dart or is ready to invest
Integration with Bitrix:
- REST API on Bitrix side (similar to React Native)
-
dio package for HTTP with interceptors: automatic auth token addition, retry on 5xx
- State:
Riverpod or BLoC – depends on scale
- Local storage:
Hive for key-value, sqflite for complex offline queries
For non-standard interface, Flutter provides identical behavior on both platforms – saving up to 30% of time on cross-platform bugs.
How to prepare API for mobile app on Bitrix?
A mobile app is only as good as its API.
Design:
- RESTful with versioning (
/api/v1/, /api/v2/) – backward compatibility during updates
- JWT + refresh token. Access – 15 minutes, refresh – 30 days. Store refresh in Keychain (iOS) / EncryptedSharedPreferences (Android)
- Cursor pagination (
?after=eyJ...) – stable loading without duplicates when adding new items
- Sparse fieldsets:
?fields=id,name,price,image – return only what the screen needs, save traffic
Optimization for mobile networks:
- Aggregated endpoints: one request per screen instead of five.
/api/v1/home returns banners, recommendations, promotions, and categories in one response
- Gzip compression – in Bitrix enabled via
\Bitrix\Main\Config\Option::set('main', 'use_compression', 'Y')
- ETag / Last-Modified – 304 Not Modified saves traffic and time
- Retry with exponential backoff + offline queue (requests accumulate and send when network restores)
- Images by device size:
CFile::ResizeImageGet() with parameters from DPR header
Push notifications:
- FCM (Android) + APNs (iOS)
- Triggers on Bitrix events:
OnSaleStatusOrder, OnCatalogStoreProductUpdate, OnSaleBasketSaved
- Segmentation: personalization based on CRM behavior
- Funnel analytics: delivery → open → transition → conversion
What is included in turnkey mobile app development?
- Analysis – current site audit, load testing, bottleneck profiling (SQL queries, caching). Feature requirements gathering
- API design – REST/GraphQL schema design with cursor pagination and sparse fieldsets, integration with 1C via CommerceML, fiscalization (54-FZ, ATOL, OFD)
- PWA implementation – Service Worker setup, manifest, push notifications, offline catalog, testing on real devices
- Native app development – React Native or Flutter: screen layout, API integration, camera, geolocation, deep linking
- Bitrix24 integration – REST OAuth, webhooks, Open Lines, Bizproc, CRM synchronization
- Testing – load testing (k6), regression, cross-platform on iOS/Android, offline scenario testing
- Deployment – publication on App Store / Google Play, CI/CD setup, monitoring (Sentry, Firebase Crashlytics)
- Documentation – API description, architecture, update instructions. Handover of access and source code
Result: working application, documentation, server and store access, client team training.
Why is PWA recommended as the first step?
PWA validates your mobile hypothesis quickly. With 2-3 weeks of work you get a working prototype that users can install on their home screen. If mobile traffic and conversion data confirm demand, we scale up to a native app with full device access. This approach reduces upfront investment and provides real metrics before committing to a 4-6 month native development cycle.
| Task |
Timeline |
| PWA for existing site |
2-4 weeks |
| REST API for mobile app |
3-6 weeks |
| MVP on React Native / Flutter |
2-3 months |
| Full-featured app |
4-6 months |
| Publication on App Store / Google Play |
1-2 weeks |
| Bitrix24 app customization |
2-4 weeks |
Our team consists of certified 1C-Bitrix developers with over 7 years of experience. During this time, we have completed 20+ mobile projects – from PWA for retail chains to native apps for distributors with CDEK and 1C integration. We guarantee compatibility with current platform and module versions.
Order a preliminary assessment: we will send an architectural plan and timeline within 2 business days. Contact us for a developer consultation on technology choice – fill out the form on the website or call. Get your project started with a clear roadmap.