Odoo eCommerce Mobile App documentation
A guide to the Odoo eCommerce Mobile App: installing the module, branding the app, designing the home page, payments, sign-in, notifications, building and publishing for Android and iPhone.
Documents version 1.0.0Updated Oct 24, 2026
Start here
taqnix_ecommerce_app) that you install on your Odoo server, and the Flutter source code of the app that you build and publish under your own name. The module decides how the app looks (logo, colors, home page with banners and sliders), which payment and sign-in methods it offers and which notifications it sends; the products, prices, stock, customers, orders and payments are the ones of your Odoo.What is in the package
| Item | What it is |
|---|---|
taqnix_ecommerce_app.zip | The Odoo 19 module: API for the app, branding, home page designer, payments, sign-in, notifications, Arabic translation. |
flutter-app-source.zip | The Flutter project of the app (Android and iOS), with the setup script tools/setup.dart, its own README and tests. |
documentation/ | This guide in English (index.html) and Arabic (index-ar.html), with PDFs. |
licensing/ | The licence (OPL-1: one purchase = one shop and one app brand, updates included). |
preview-images/ | Screenshots of the app and of the Odoo settings. |
changelog.txt | History of the versions. |
How it works
| Part | Where it runs | What it does |
|---|---|---|
| Odoo module | Your Odoo server | Answers the app on https://your-shop/mo-app/v1/...: catalog, cart, checkout, orders, accounts, home page layout, branding. |
| Flutter app | The phones of your customers | Shows the shop, keeps the cart, signs customers in and opens the payment page. |
| Odoo website payment page | Inside the app (web view) | Takes the payment with the provider you configured in Odoo (card, wallets, local gateways) and confirms the order. |
| Firebase (optional) | Delivers push notifications to the phones. |
What you need
| Item | Details |
|---|---|
| Odoo | 19.0 Community or Enterprise, with the apps Website, eCommerce and Discount & Loyalty (installed automatically with the module). |
| Address | A public https address for your Odoo (for example https://shop.example.com): the phones must reach it. A self-signed certificate does not work on phones. |
| Your shop | Published products with prices, a delivery method and at least one payment provider (or cash on delivery). |
| A computer to build the app | A Mac for iPhone and Android apps (Windows or Linux can build Android only), about 30 GB of free space. |
| Developer tools | Flutter 3.41 or newer, Android Studio, and Xcode (the current version) with CocoaPods for iOS. |
| Store accounts | Google Play Console (one-time fee) and Apple Developer Program (yearly fee) to publish. |
| Optional | A Firebase project (free) for push notifications; Google, Facebook and Apple developer settings for social sign-in. |
Install the Odoo module
- Unzip the package. Inside is
taqnix_ecommerce_app.zip; unzip it to get the foldertaqnix_ecommerce_app. - Copy the folder into one of the
addons_pathfolders of your Odoo server and restart Odoo. - Log in as an administrator, activate Developer mode, open Apps and press Update Apps List.
- Remove the “Apps” filter, search eCommerce Mobile App Connector and press Install.
# or from the command line ./odoo-bin -c odoo.conf -d YOUR_DATABASE -i taqnix_ecommerce_app --stop-after-init
Get your shop ready
| What | Where in Odoo | Notes |
|---|---|---|
| Products | Website → eCommerce → Products | Publish them, add a price, images, categories (eCommerce Categories), variants (colors, sizes) and stock if you track it. |
| Categories | Website → eCommerce → eCommerce Categories | The categories (with their image) are the ones of the category slider and the filters. |
| Delivery methods | Website → Configuration → Shipping Methods | Publish at least one. The app shows the ones that apply to the address and their price. |
| Taxes and currency | Accounting and Website settings | Prices are shown with or without tax like on your website (Website → Settings → Prices). |
| Discount codes | Website → eCommerce → Promotions | Promo codes and coupons work in the cart of the app. |
| Languages | Website → Configuration → Settings → Languages | Add the languages of your customers (for example Arabic); products, categories and messages follow the language of the phone. |
Give the app your brand
| Setting | Effect |
|---|---|
| Logo | A square PNG of 1024 × 1024 is best. The same image makes the app icon unless you add an App icon. |
| Primary, secondary and accent color | Buttons, links, selected items, price highlights and the top bar when its style is Primary. |
| Splash background | The color behind the logo while the app loads. |
| Style and buttons | Material 3, how soft or contrasted the surfaces are, corner radius, filled, outlined or elevated buttons. |
| Layout direction | Follow the language (right to left for Arabic and Hebrew), or force left to right or right to left. |
| Side menu | Show or hide it; plain color, gradient or image background. |
Design the home page
| Block | What it shows | Main options |
|---|---|---|
| Banners | A slider, a sideways scroll, a grid or cards (banner blocks) of images. | Each banner opens nothing, a product, a category, a search or a web page when tapped; autoplay, dots, countdown, image fit. |
| Products | A slider, grid, list or sideways scroll of products. | Latest, from a category, best sellers, top rated, on sale or chosen by hand; how many; countdown for a flash sale. |
| Categories | The categories as round icons, a grid, a slider or a list. | All top categories or the sub-categories of one; sizes. |
Take payments
- In Odoo open Website → Configuration → Payment Providers (or Accounting → Configuration → Payment Providers).
- Choose a provider (Stripe, PayPal, Adyen, Razorpay, Mollie, Paymob, Flutterwave, Authorize.Net, Worldline, Mercado Pago, Xendit and others), enter the keys they give you and set the state to Test first, then Enabled.
- Switch Published on, choose the payment methods and the countries and currencies it accepts.
- In Mobile App → Settings → Payments leave Online payment methods empty to offer them all, or pick the ones the app shows.
- Place a test order from the app and check the payment in Mobile App → Orders from the app.
Sign-in and sign-up
| Method | What to set up | Where |
|---|---|---|
| A Google Cloud project, an OAuth consent screen and OAuth client IDs: Web (its ID is also used by Android), Android (package name and SHA-1) and iOS (bundle ID). Paste the Web and iOS client IDs in Google client IDs. | console.cloud.google.com → APIs & Services → Credentials | |
| A Facebook app with Facebook Login; copy the App ID to Odoo, and the App ID and client token into the app (see the app README). | developers.facebook.com | |
| Apple | An App ID with the Sign in with Apple capability; paste the bundle ID in Apple client IDs. Apple requires it when the app offers another social sign-in. | developer.apple.com → Certificates, IDs & Profiles |
docs/native-setup.md inside the app folder.Push notifications (optional)
- Create a project at console.firebase.google.com and add an Android app (your package name) and an iOS app (your bundle ID).
- In Odoo, Mobile App → Settings → Notifications, copy the project ID, the app IDs of the Android and the iOS app, the API key and the sender ID (Project settings → General).
- In Firebase open Project settings → Service accounts → Generate new private key and paste the whole JSON file in Service account JSON in Odoo. It stays on the server.
- For iPhone, upload an APNs authentication key in Firebase (Project settings → Cloud Messaging) and enable Push Notifications for the app ID at Apple.
- Customers allow notifications the first time they sign in. Use Mobile App → Send a notification for a message to all devices or to chosen customers.
Prepare your computer
- Install Flutter from flutter.dev (version 3.41 or newer) and run
flutter doctor; fix what it reports. - Android: install Android Studio, open it once, install the Android SDK and accept the licences with
flutter doctor --android-licenses. - iPhone (Mac only): install Xcode from the App Store, open it once to accept the licence, install the command line tools (
xcode-select --install) and CocoaPods (sudo gem install cocoapodsorbrew install cocoapods). - Unzip
flutter-app-source.zipin a folder without spaces, then runflutter pub getinside it.
flutter doctor must show no red cross for the platforms you build for.Connect the app to your shop
dart run tools/setup.dart --url https://shop.example.com --package com.yourcompany.shop flutter pub get dart run flutter_launcher_icons dart run flutter_native_splash:create
| Option | Meaning |
|---|---|
| --url | The https address of your Odoo website (no trailing slash). |
| --package | The unique ID of your app, like com.yourcompany.shop. It cannot change after publishing. |
| --name | Optional. The name under the icon; by default the name set in Odoo. |
flutter run --dart-define=SITE_URL=https://shop.example.com.Run and test the app
- Start an Android emulator or an iPhone simulator, or plug in your phone.
- Run
flutter run(add--dart-define=SITE_URL=...if you did not use the setup script). - Walk through: home page, a category, search and filters, a product with options, cart, coupon, checkout with cash on delivery and with an online provider in test mode, orders, wishlist, sign-in and sign-up.
- In Odoo check Mobile App → Orders from the app and Devices.
Build and publish the Android app
- Create the signing key once and keep it safe (without it you can never update the app):
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload. - Create
android/key.propertieswithstorePassword,keyPassword,keyAlias=uploadandstoreFile(the path of the keystore). The app README shows the exact lines. - Build:
flutter build appbundle --release --dart-define=SITE_URL=https://shop.example.com. The file isbuild/app/outputs/bundle/release/app-release.aab. - In Google Play Console create the app, fill the store listing (name, description, icon 512 × 512, feature graphic 1024 × 500, phone screenshots), the Data safety form, the content rating and the privacy policy URL.
- Upload the .aab to a testing track first. New personal developer accounts must run a closed test with at least 12 testers for 14 days before applying for production; organization accounts do not.
- Send the release for review and publish.
Build and publish the iPhone app
- In developer.apple.com create an App ID with your bundle ID and the capabilities you use: Sign in with Apple and Push Notifications.
- In App Store Connect create the app with the same bundle ID.
- Open
ios/Runner.xcworkspacein Xcode, select the Runner target → Signing & Capabilities, choose your team and enable Automatically manage signing. - Build:
flutter build ipa --release --dart-define=SITE_URL=https://shop.example.com, then upload with Xcode (Window → Organizer → Distribute App) or the Transporter app. - In TestFlight test the build, then in App Store Connect fill the listing, screenshots, privacy details and the review information, and submit for review.
| Apple review checklist | Done by the app? |
|---|---|
| Account deletion inside the app | Yes (Account → Delete my account) |
| Sign in with Apple next to other social sign-ins | Yes (turn it on in Odoo) |
| Privacy policy and terms links | Set them in Odoo → Settings → Links |
| A demo account for the reviewer | Create a customer in Odoo and write it in the review notes |
| Payments for physical goods through your own gateway | Allowed: the app sells physical goods, not digital content |
Day to day
Languages and right to left
lib/l10n/app_en.arb to app_xx.arb and translate it; see the app README.Updates
Replace the module folder with the new version, restart Odoo and run -u taqnix_ecommerce_app; your settings, layouts and devices are kept. For the app, unzip the new source next to your project, keep your android/key.properties and keystore, run the setup script again (it rewrites the shop address, the package name and the branding) and build. Keep the build number higher than the published one (version: in pubspec.yaml).
Security and privacy
| Topic | How it is handled |
|---|---|
| Secrets | Provider keys and the notification key stay in Odoo. The app contains only public identifiers. |
| Sessions | A signed-in phone holds a random token; Odoo stores only its hash. Tokens of devices unused for a year are removed. Sign out and Delete account revoke them. |
| Social sign-in | Tokens are verified with Google, Facebook and Apple on the server, including the app ID they were issued for. |
| Staff accounts | Odoo users with internal access cannot sign in to the app. |
| Payments | Handled by your provider on the website payment page; the app never sees card data. The payment link is signed and expires after one hour. |
| Orders and addresses | A customer sees only their own orders and addresses; guests see only the order they placed from the same app. |
| Reviews | Only signed-in customers can write them. |
| Privacy | Account deletion anonymises the customer. Write your privacy policy (the stores ask for it) and link it in the settings. |
Good to know
| Limit | Detail |
|---|---|
| One shop per website | Each Odoo website has one app configuration; a multi-website Odoo has one per website. |
| Prices of filters | The price filter uses the public price of the product, before pricelist discounts. |
| Variants | Products with many combinations: only existing variants can be bought in the app (create variants when you configure the product). |
| Phone login | Sign-in by SMS code is not included. |
| Wallet and loyalty points | Not included; promo codes and coupons are. |
| Wallet payments | Apple Pay and Google Pay buttons do not appear inside the payment web view; cards and other redirect methods work. |
| Offline | The app needs a connection; it shows a friendly message when there is none. |
For developers
curl https://shop.example.com/mo-app/v1/ping
# {"ok": true, "api_version": 1}
curl https://shop.example.com/mo-app/v1/homepage
curl "https://shop.example.com/mo-app/v1/products?per_page=5&orderby=price&order=asc"
curl -X POST https://shop.example.com/mo-app/v1/auth/login -H 'Content-Type: application/json' -d '{"email": "sara@example.com", "password": "..."}'| Area | Endpoints under /mo-app/v1 |
|---|---|
| App | GET /ping, /homepage, /app-config, /branding/logo.png, /branding/icon.png |
| Catalog | GET /categories, /products, /products/<id>, /product-attributes, /products/<id>/reviews; POST /write-review |
| Cart | POST /cart, /cart/add, /cart/update, /cart/remove, /cart/apply-coupon, /cart/remove-coupon |
| Checkout | GET /checkout/form; POST /checkout/update-review, /checkout; GET /pay/<order> (signed link), /orders/<id>/payment-status |
| Account | POST /auth/login, /auth/register, /auth/social-login, /auth/logout, /auth/profile, /auth/forgot-password, /auth/delete-account, /auth/fcm-token |
| Orders and more | POST /orders, /orders/<id>; GET/POST /addresses; GET/POST /wishlist, /wishlist/toggle, /wishlist/details |
Authorization: Bearer <token>; the guest cart is the cookie mo_cart (or the header X-Cart-Token); the language is the Accept-Language header or ?lang=. Errors are {code, message, data: {status}}. The Flutter code uses Riverpod, go_router and Dio; the folder map is in the app README. The module has 70+ automated tests (--test-tags /taqnix_ecommerce_app) and the app has unit tests (flutter test).Troubleshooting
| Problem | What to do |
|---|---|
| The app shows a connection error | Open https://your-shop/mo-app/v1/ping on the phone. It must answer {"ok": true}. Check the address (https, no trailing slash), the certificate and that the module is installed on the right database. |
| The home page is empty | Open Mobile App → Settings → Home page and choose a layout; add blocks to it. |
| A product is missing | Publish it on the website and check its category and the website it belongs to. |
| No payment method in checkout | Enable and publish a provider, or turn on cash on delivery in Settings → Payments. |
| Payment page stays empty or goes back to the cart | The delivery address, a shipping method and the provider currency must fit the cart. Open the same order on the website to see the message. |
| Social sign-in says invalid token | The client ID in Odoo does not match the one the app was built with (Web client ID for Google, bundle ID for Apple). |
| No notifications | Check the Firebase IDs, the service account, that the customer allowed notifications and (iPhone) the APNs key. |
| The old app does not see my change | Layout, colors and payments are read at start; close and reopen the app. Name and icon need a new build. |
Support
Installation help and bug fixes are included for 6 months, with lifetime updates. Contact us through the marketplace page where you bought the module or write to support@taqnix.com with your Odoo version and a screenshot.