A good beginning.
A beautiful app.
Everything you need to bring your WooCommerce store to WooApp—from the first plugin upload to your own branded app release.
This handbook covers WooApp, plugin 2.0.0 and app source 2.0.0+1. Your download includes the Flutter app source, installable WordPress plugin and this handbook. Developed by Tqniyati.
01 / START WITH A CONNECTION
Your first connection
WooApp uses the WooCommerce store you already manage. Your developer connects that store at build time. Shoppers open your app and see your store directly; there is no store selector or demo mode in customer builds.
- Unzip your complete download. Locate the inner plugin ZIP and Flutter source ZIP. Keep the plugin ZIP compressed for WordPress.
- Prepare the store. Confirm the requirements, products, stock, shipping and policies on a staging copy first.
- Upload and activate the plugin. Use Plugins → Add Plugin → Upload Plugin, then open WooApp → WooApp. Look for Setup: Ready.
- Check the public connection. Visit
https://your-store.com/wp-json/wooapp/v1/bootstrap. A JSON response withdata.api_version,data.features.native_auth: trueanddata.checkout.ready: trueconfirms discovery. - Set up Flutter and preview. Extract the Flutter source, open its
mobilefolder and run the commands below with your real store URL. - Personalize and test. Update branding and home content in WordPress, then refresh the app. Configure payment accounts and test signed native builds before submitting to the stores.
flutter pub get
flutter run -d chrome --web-port 8090 --dart-define=STORE_URL=https://your-store.comYour host must allow the preview origin and the app’s REST request headers. Native apps do not use browser CORS. Start with the connection guide; never put administrator API keys in the app.
02 / THE RIGHT FOUNDATION
Requirements & compatibility
Use the compatibility requirements below to prepare your store and development tools. Keep a staging copy for store upgrades and merchant-specific customizations.
| Component | Compatibility | What to prepare |
|---|---|---|
| WordPress | Requires 7.1+ · reference 7.1.3 | A working single-site installation |
| WooCommerce | Requires 11.2+ · reference 11.2.1 | Catalog, currency, tax and shipping configured |
| PHP | 8.3 minimum | REST endpoints and HTTPS available |
| Order storage | HPOS and classic | WooCommerce order storage |
| Flutter / Dart | 3.35.5 / 3.9.2 | Use the included dependency lockfile |
| Android | Minimum SDK 24 | Android tooling and your own release signing |
| iOS | Deployment target 14.0 | macOS, Xcode, CocoaPods and Apple signing |
| Store connection | Canonical HTTPS URL | Valid certificate, no login wall on public APIs |
Supported commerce scope
WooApp supports simple and variable physical products, English and left-to-right layouts. Catalog search, sorting and pagination, galleries, variations, favorites, cart, coupons, delivery, customer accounts and order history are implemented. Checkout currently uses one address for both billing and delivery.
Subscriptions, bundles, memberships, marketplace plugins, custom required checkout fields, separate checkout billing/delivery forms, multilingual / RTL, push notifications and digital-purchase policy integrations are outside the current completed scope. Multisite is unsupported. Contact support with your exact extensions and versions for an assessment.
Store APIs must be reachable without an administrator login. Security plugins, firewalls and caching layers must permit customer bearer sessions, WooCommerce cart tokens and checkout requests. Keep customer and checkout responses out of public caches.
03 / A PLACE FOR EVERYTHING
Inside your download
The complete buyer download contains the source archive, installable plugin and this offline handbook. Extract the outer archive on your computer. Upload only the inner WordPress plugin ZIP to WordPress.
wooapp-2.0.0/
├── START-HERE.html
├── documentation/
│ ├── index.html
│ ├── docs.css + docs.js
│ └── assets/ # Screenshots, fonts and diagrams
├── wordpress-plugin/
│ └── ultimate-app-api-2.0.0.zip
├── flutter-source/
│ └── wooapp-flutter-2.0.0.zip
├── RELEASE-NOTES.txt
└── SHA256SUMS.txtExtracting the Flutter ZIP gives you mobile/, with Android and iOS projects, Flutter source, assets, tests and the locked dependencies. It does not contain installed dependencies, local environment files, signing keys, developer credentials or compiled APK / IPA files. Those are generated for your own app identity.
Open the included installable plugin ZIP ↓
Open documentation/index.html directly in a browser. Navigation, search, diagrams and screenshots work offline. External links to provider documentation and support require an internet connection. Keep the adjacent assets folder with the HTML.
04 / THE WORDPRESS SIDE
Install the WordPress plugin
- Prepare a backup and staging store. Confirm your store’s supported WordPress, WooCommerce and PHP versions.
- Sign in to WordPress as an administrator. Open Plugins → Add Plugin and choose Upload Plugin.
- Select the inner ZIP. Choose
wordpress-plugin/ultimate-app-api-2.0.0.zipfrom your extracted buyer download. Do not select the entire buyer download or the Flutter ZIP. - Choose Install Now, then Activate Plugin. In the plugin list, the display name is Ultimate App API. The merchant menu is WooApp.
- Check the setup status. Open WooApp → WooApp. It should report Setup: Ready. Resolve dependency or schema errors here before continuing.
- Verify discovery. Visit your store’s
/wp-json/wooapp/v1/bootstrapendpoint. If routing fails, review Settings → Permalinks, the web server and security restrictions.
Know your WooApp menu
| Page | Purpose | Who uses it |
|---|---|---|
| WooApp | Version, dependencies and setup readiness | Administrator |
| Home builder | Product collections, layouts and section ordering | Store manager / administrator |
| Banners | Image/video heroes, destinations and order | Store manager / administrator |
| General settings | Logo, size, tagline, typography and palette | Store manager / administrator |
| Native payments | Dedicated app payment credentials and mode | Administrator |
If a host blocks browser uploads, ask the host to install the plugin folder under wp-content/plugins/ultimate-app-api/, then activate it in WordPress. Preserve the folder name. Upload-limit changes belong to hosting/PHP settings, not the Flutter app.
05 / ONE ADDRESS. YOUR WHOLE STORE.
Connect the app to your store
Your developer supplies STORE_URL when running or building the Flutter app. Use the canonical public HTTPS address of the WordPress installation, including a subdirectory if WordPress lives in one. Do not append /wp-admin, /wp-json or an endpoint.
https://shop.example.comhttps://example.com/storehttps://example.com/wp-adminhttps://example.com/wp-json/...- Open the connection endpoint in your browser. Replace the example domain below with your WordPress address. A
dataenvelope with the store and feature configuration should load without logging in. - Use the final URL after redirects. Check HTTPS and www/non-www choices. The app avoids following unexpected API redirects; do not rely on a redirect to correct an incorrect store address.
- Run the app with the same base URL. Set the flag on every run/build, or use your own private build script to supply it consistently.
- Refresh the app home after WordPress edits. Branding and collections load from the store. Switching the destination store requires a new app build.
https://your-store.com/wp-json/wooapp/v1/bootstrap
flutter run -d chrome --web-port 8090 --dart-define=STORE_URL=https://your-store.com
flutter build apk --dart-define=STORE_URL=https://your-store.com
flutter build ipa --dart-define=STORE_URL=https://your-store.comThe ipa command requires macOS and signing setup. The apk command above is a build recipe, not a claim that your release is already signed for Google Play. Follow the platform release sections.
Do not add WordPress administrator passwords, WooCommerce consumer secrets, Stripe secrets or PayPal secrets to Dart source or build flags. The plugin handles customer sessions and native payment server operations. No merchant WooCommerce REST API key needs to be embedded in the app.
Browser preview and CORS
A browser-served Flutter app needs permission from your store to make cross-origin REST requests. Configure an exact preview origin at the web server or in a host-maintained WordPress integration. Allow Authorization, Content-Type, Cart-Token and Idempotency-Key, allow preflight requests, and expose Cart-Token. Avoid wildcard access for authenticated customer endpoints. The bundled WordPress plugin does not automatically grant arbitrary preview origins.
The development Docker store already permits the local Flutter origin on port 8090 through a separate, development-only MU plugin. That development helper is not included in the buyer’s installable plugin. The website showcase runs at port 8091 but embeds its app through the same-origin /demo/ path; its local development origin is also explicitly allowed.
If the URL is missing or unreachable
An unset URL displays a configuration error. An unreachable or incompatible store displays an error and retry control. An empty store displays the normal empty catalog. Customer builds contain no demo catalog and offer no connection selector.
06 / MAKE IT UNMISTAKABLY YOURS
Logo, colors & typography
Open WooApp → General settings. This page changes the in-app storefront header and visual theme; it does not change the installed app’s launcher icon, package name or operating-system display name.
- Upload your logo. Choose Change logo and use the WordPress media library. A transparent PNG or WebP works well for a wordmark. Without a selected logo, the store name is used.
- Set its size. Adjust Logo height (24–88 px) and Maximum logo width (80–240 px). Both act as constraints so the image keeps its aspect ratio. Preview the result at narrow phone widths.
- Write your header tagline. Keep it short and readable. The field accepts up to 70 characters.
- Choose a font style. Editorial pairs DM Sans with Cormorant headings. Modern sans uses DM Sans throughout. System sans follows the platform’s default font.
- Select a complete palette. Olive & citrus, Coastal blue, Soft rose, Warm earth, Lavender dusk and Quiet monochrome coordinate the background, text, buttons, borders and accents.
- Save settings. Refresh the app home to retrieve the updated branding. If the page says settings changed elsewhere, reload it and apply your edits to the latest saved version.
App name, icon and splash
For your own release, set the Android application label in android/app/src/main/AndroidManifest.xml and iOS CFBundleDisplayName in ios/Runner/Info.plist. Replace Android launcher/adaptive assets and the iOS AppIcon asset set with your brand’s platform-specific exports. The included tool/generate_brand_assets.dart generates WooApp’s monogram; customize it before using it for another brand. Review launcher and splash assets on a real device. The initial app splash uses a neutral white background.
07 / CURATE A HOME WORTH OPENING
The visual home builder
Open WooApp → Home builder. The app keeps its header, hero banners and category strip above the product collections you curate here.
- Add a section. Choose + Add section. Give the collection a descriptive title and, optionally, a subtitle.
- Choose the layout. Grid gives you two columns; Carousel creates a horizontal product rail; Compact list gives each item a clear row. Mix layouts to vary the page rhythm.
- Search for products. Type a product name or exact SKU in the product search. Select the matching products instead of looking up IDs. Use the next-page control when more matches are available.
- Arrange the collection. Drag selected products or use the move arrows. Remove an item from the section without deleting the WooCommerce product.
- Arrange the page. Drag sections in the left list or use their up/down arrows. Toggle Visible in app to hide a collection while keeping its saved configuration.
- Save home page. Refresh the app. The preview is a layout guide; the real app resolves current product data and prices from WooCommerce.
Limits: up to 20 sections and 100 products per section. Use smaller, focused collections for a better first screen. When no usable collection layout is configured, the app can show its latest-products collection. A missing or empty store is never replaced with a bundled demo catalog.
09 / YOUR STORE IS THE SOURCE OF TRUTH
Catalog, shipping & checkout
Prepare your products
- Use published, visible products. Add meaningful descriptions, prices, category assignments and stock settings in WooCommerce.
- Add good product images. The gallery uses the full product image list. Supply clear primary and gallery photos. Category thumbnails are managed under Products → Categories.
- Finish your variations. Configure attributes, variation combinations, prices and stock. Verify that each intended choice can actually be purchased on the website and in the app.
- Check promotions. Configure sale prices and coupons in WooCommerce; test eligibility, expiry and minimum spend with the app’s server-calculated totals.
Configure checkout in WooCommerce
Review WooCommerce → Settings for your currency, allowed selling/shipping countries, shipping zones and rates, tax rules, guest checkout, account creation and policy pages. In the app, entering an address prompts the server to calculate eligible delivery options. Rates may change the final total. No matching shipping rate must be resolved in the store, not bypassed by the app.
The cart displays product totals, discounts, shipping, named fees, tax and the final WooCommerce total. Stock limits and quantity restrictions apply. Coupons can be applied and removed with visible server errors. The current checkout collects one shared billing and delivery address.
Interrupted orders and recovery
If payment or the network is interrupted after an order attempt is retained, the app offers to resume that original attempt. Use that recovery action; do not create a new order just because a provider screen closed. The backend verifies provider status before treating an order as paid. Cash on delivery is recorded as unpaid at confirmation. Orders needing manual review are explicitly distinguished.
Customer accounts
The app supports store-enabled registration, sign-in, password recovery, profile changes, address book, order history, downloads, reviews and deletion requests. Customers sign in with their own account, not a WordPress administrator/store-manager account. Configure reliable WordPress email delivery for recovery and confirmation messages. Browser-preview sessions live only in memory and are cleared on reload.
10 / CONFIGURE THE FINAL TAP
Native payments
The current payment set is cash on delivery, Stripe and PayPal. WooApp → Native payments configures dedicated app adapters. Your website’s Stripe/PayPal plugins can coexist, but their settings are not automatically reused and their web checkout handlers are not called.
Cash on delivery
- Open WooCommerce → Settings → Payments → Cash on delivery and enable it.
- Review restrictions, including enabled shipping methods and order types.
- Place a test order with an eligible address and shipping method. Confirm the resulting WooCommerce order and its unpaid COD status.
Stripe
- Begin in a Stripe test environment. Obtain the publishable and secret API keys belonging to the same environment/account.
- Register the store webhook endpoint. Use
https://your-store.com/wp-json/wooapp/v1/webhooks/stripe. Subscribe to PaymentIntent success, payment failure and cancellation events:payment_intent.succeeded,payment_intent.payment_failed,payment_intent.canceled. - Configure WooApp. Set Stripe mode to sandbox, enter the publishable key, secret key and endpoint signing secret, then enable Stripe and save. All required values must be present for the adapter to be configured.
- Configure the app return scheme. The source uses
wooapp://safepay. If you rebrand it, updatelib/core/payments.dart, the Android manifest and iOS URL types consistently. - Test the signed Android/iOS app. Cover success, 3DS, declined payments, cancellation, background/return, interrupted network and resuming an existing attempt. Verify signed webhooks and the final WooCommerce order.
- Switch environments only for launch. Use matching live credentials and a live webhook endpoint/signing secret after confirming your store’s sandbox checkout flow. Repeat a controlled production verification.
The app displays Stripe PaymentSheet using a server-created PaymentIntent. The secret key stays on your server. A provider approval screen alone is not the final authority for the order’s paid status. Refer to Stripe’s PaymentIntents guide and webhook documentation for your provider-side setup.
PayPal
- Create a PayPal sandbox REST app. Prepare the client ID and client secret plus sandbox buyer/seller accounts.
- Register the store webhook. Use
https://your-store.com/wp-json/wooapp/v1/webhooks/paypal. Register relevant checkout order and capture events, then copy that webhook’s ID. - Configure WooApp. Select PayPal sandbox mode, enter the client ID, client secret and webhook ID, enable it and save.
- Review native return configuration. Android uses
com.wooapp.wooapp.paypalin bothMainActivity.ktand the manifest. Replace it consistently for your application ID and configure any provider-side app requirements. iOS approval is handled by the bundled PayPal bridge. - Verify approval and capture. The backend creates the PayPal order; the app approves that exact order and the backend captures/verifies it. Test cancel, duplicate taps, interruption and order recovery on both target platforms.
- Prepare live accounts and webhook. Use corresponding live REST app values only after sandbox/native verification, then verify a controlled live order.
Provider reference: PayPal REST APIs, Orders v2 and webhooks.
The browser app offers COD. Stripe and PayPal approval are Android/iOS integrations. Configure online methods in WordPress and use an Android or iOS build for provider approval.
Saving, clearing and server overrides
Blank secret inputs retain their previously saved value; the page does not echo secrets back. Clear stored secret credentials removes stored secret fields when saved. A matching private WOOAPP_* server constant overrides the UI and is shown as managed in server configuration. Mode, credentials and webhook configuration must match the same provider environment.
Another gateway?
Required gateway integration has no extra development charge. Contact item support with the provider’s official API/SDK documentation, intended country, currency, account type and your requirements. We will confirm technical feasibility and schedule. Account approval, provider fees and broader unrelated customization are separate.
11 / THE DEVELOPER’S DESK
Set up Flutter
- Install Flutter. Follow the official Flutter installation guide for your operating system. This source was tested with Flutter 3.35.5 and Dart 3.9.2. Start with the included
pubspec.lock; do not blindly upgrade dependencies before your first working build. - Install platform tooling. Android needs the Android SDK/tooling. iOS builds need macOS and Xcode. Chrome can be used for the initial browser preview.
- Extract the source ZIP. Open the extracted
mobiledirectory in VS Code or Android Studio. All commands in this chapter run from that directory. - Check your tools. Run
flutter doctor -v. Resolve problems for the platform you plan to build. iOS warnings are expected on Windows; iOS cannot be built there. - Fetch the locked dependencies. Run
flutter pub get. Keeppubspec.lockwith your source. - Run checks and preview. Start with analysis and the included Flutter tests, then run the browser preview against your own configured store. Browser CORS must be set up for its origin.
cd mobile
flutter --version
flutter doctor -v
flutter pub get
flutter analyze
flutter test
flutter run -d chrome --web-port 8090 --dart-define=STORE_URL=https://your-store.comflutter pub getGet the dependencies pinned to this source.
--dart-define=STORE_URL=https://your-store.comSupply your WordPress store address at build time.
flutter run -d chromeReview browsing, branding and COD checkout.
Signed native builds → device tests → releaseVerify your platform and payment flows before submission.
Where to make changes
| Source | What it controls |
|---|---|
lib/main.dart | Customer app entry point |
lib/design/ | Theme, components and shared motion |
lib/screens/ | Home, catalog, products, bag, checkout and accounts |
lib/core/api.dart | API transport and secure sessions |
lib/core/store.dart | Store connection, data and checkout recovery |
lib/core/payments.dart | Native payment availability and return URL |
android/, ios/ | App identity, signing, platform assets and PayPal bridges |
lib/website_preview.dart | Separate web-only marketing preview; not the customer app entry point |
The site’s branding switcher is a preview tool. It changes only that embedded instance’s theme. Real customer builds use lib/main.dart and branding from WordPress. They contain no palette switcher, demo store selector or fallback demo catalog.
12 / YOUR ANDROID DEBUT
Build & release Android
Prepare your own application identity and release signing before building for Google Play. The source currently has preview signing configuration; replace it with your private release signing setup.
- Choose your application ID. Replace
com.wooapp.wooappinandroid/app/build.gradle.kts(namespace and applicationId). Update the Kotlinpackageand its source-directory path consistently if you rename the namespace. - Name and brand the app. Change
android:labelin the main Android manifest. Replace launcher/adaptive icons with your own assets. - Update callback schemes. Keep the PayPal return scheme consistent between the manifest and
MainActivity.kt. Update the Stripe scheme/return URL in the manifest andlib/core/payments.darttogether. Provider account setup must match your app. - Create or select your upload keystore. Keep it outside the distributable source. Record its alias and passwords privately and back it up securely.
- Configure Gradle signing. Create
android/key.propertiesprivately, load it inandroid/app/build.gradle.kts, create a release signing configuration and replace the generated debug signing assignment. Follow Flutter’s Android signing guide. - Set your version. Update
version: 2.0.0+1inpubspec.yamlto the version/build number you are releasing. The build number must increase for subsequent store uploads. - Build an app bundle. Use the command below with your production HTTPS store URL. An APK is useful for direct device testing; Google Play distribution normally uses the app bundle.
- Test through an internal release track. Check the launch checklist, full cart/order flow and all enabled native payment callbacks. Verify the uploaded artifact is signed with your intended key.
- Complete the store listing. Add accurate screenshots, app access instructions where required, support/privacy details, content rating, data declarations and all current Google Play requirements. Review the live console requirements at submission time.
flutter build appbundle --release --dart-define=STORE_URL=https://your-store.com
flutter build apk --release --dart-define=STORE_URL=https://your-store.com
# Typical outputs:
# build/app/outputs/bundle/release/app-release.aab
# build/app/outputs/flutter-apk/app-release.apkCreate your upload keystore
If you do not already own the upload key for this application, run this with your Java keytool and a private destination on your computer. The command prompts for the passwords and certificate details. Replace the example path; do not use an existing published app’s identity with a different signing key.
keytool -genkeypair -keystore YOUR_PRIVATE_PATH/upload-keystore.jks -storetype JKS -alias upload -keyalg RSA -keysize 2048 -validity 10000Private signing file structure
Create android/key.properties using your own local values. The template below contains placeholders only. The source archive intentionally includes no signing credentials.
storePassword=YOUR_PRIVATE_STORE_PASSWORD
keyPassword=YOUR_PRIVATE_KEY_PASSWORD
keyAlias=YOUR_UPLOAD_KEY_ALIAS
storeFile=YOUR_ABSOLUTE_KEYSTORE_PATHConnect your key to Gradle
In android/app/build.gradle.kts, add import java.util.Properties before the existing plugins block. After that plugins block, load your private file:
val merchantKey = Properties().apply {
val configFile = rootProject.file("key.properties")
if (configFile.exists()) {
configFile.inputStream().use { load(it) }
}
}Inside the existing android { ... } block, add this signing configuration before buildTypes. The example deliberately fails when the signing file is incomplete, so a store release is not silently signed with a preview key.
signingConfigs {
create("merchantRelease") {
keyAlias = merchantKey.getProperty("keyAlias")
?: error("Missing upload key alias")
keyPassword = merchantKey.getProperty("keyPassword")
?: error("Missing upload key password")
storePassword = merchantKey.getProperty("storePassword")
?: error("Missing keystore password")
storeFile = file(merchantKey.getProperty("storeFile")
?: error("Missing private keystore path"))
}
}Replace the existing release assignment signingConfigs.getByName("debug") with your new configuration. Keep one release block:
buildTypes {
release {
signingConfig = signingConfigs.getByName("merchantRelease")
}
}Keep key.properties and the keystore outside your distributed source. On Windows, use a correctly escaped path in the properties file; forward slashes in an absolute path can avoid backslash escaping. Validate signing with your platform tooling and internal test track.
Creating this file alone is insufficient: Gradle must load it and select the release signing configuration. Never publish your keystore or this file in support tickets. Review Flutter’s complete Android release instructions for the current tooling and platform steps.
13 / YOUR IOS DEBUT
Build & release iOS
Use a Mac with Xcode, CocoaPods and your Apple developer account. The iOS source is included in your Flutter download.
- Prepare the project on macOS. Extract the Flutter source, run
flutter pub getand resolve the relevantflutter doctor -vfindings. - Open the workspace. Open
ios/Runner.xcworkspacein Xcode after CocoaPods dependencies are installed. Use the workspace rather than the project file. - Set the identity and team. In Runner’s Signing & Capabilities, choose your Apple team and unique bundle identifier. Register that identity with your own Apple developer/App Store Connect account.
- Apply branding. Change
CFBundleDisplayNameinios/Runner/Info.plistand replace the AppIcon asset set. Check launch assets and supported device orientations. - Review payment return handling. Update the Stripe URL type if you rename the
wooappscheme. Verify PayPal approval and return behavior with the bundled bridge and your account configuration. - Build with the store URL. Use your real HTTPS store address. Resolve signing/provisioning errors in Xcode.
- Test via TestFlight. Verify real-device checkout, approval/cancel flows, network interruptions, account recovery and accessibility. Check your own app’s privacy behavior.
- Prepare App Store Connect. Complete listing assets, privacy disclosures, review notes/test accounts where applicable and the latest Apple requirements. Submit only after verification.
flutter pub get
cd ios
pod install
cd ..
open ios/Runner.xcworkspace
flutter build ipa --release --dart-define=STORE_URL=https://your-store.com
# Typical output folder: build/ios/ipa/macOS commands above are for a Mac terminal. Keep Apple certificates, provisioning materials and account credentials private. Follow the official Flutter iOS release guide for current signing/export steps. Store acceptance and account approval are controlled by Apple, not guaranteed by the source package.
14 / READY MEANS TESTED
Your launch checklist
Use this checklist for each merchant release. Save your progress in this browser as you prepare your own store and app release.
15 / KEEP YOUR NEXT CHAPTER SMOOTH
Product updates
Keeping WooApp up to date
- Back up WordPress files/database and keep your current working app source and signing materials.
- Read the new release notes and verify the app/API compatibility requirements.
- Upload the new installable plugin ZIP on staging. Confirm schema readiness and test your existing customer flows.
- Merge new Flutter source changes with your own branding, app identity and customizations. Preserve private build settings outside the vendor archive.
- Run analysis, tests and device/payment checks with the new version. Increment native build numbers before store upload.
- Roll out the verified plugin/app pair in a planned sequence and monitor orders, server errors and provider events.
Keep your app identifiers and signing materials safe for future WooApp updates. Increment platform build numbers when publishing a new release to your distribution channels.
16 / FIND YOUR NEXT STEP
Troubleshooting
“This app has not been configured yet”
The build has no STORE_URL. Rerun/rebuild from mobile/ with --dart-define=STORE_URL=https://your-store.com. Setting a value after building does not change an already compiled app.
“We couldn’t load this store”
Check the final HTTPS base address, valid certificate, public /wp-json/wooapp/v1/bootstrap response and Setup: Ready. Confirm the new plugin is active. Check API redirects, security/firewall blocks and browser CORS where applicable. A response from the old plugin is not sufficient.
The browser reports a CORS or preflight error
Allow your exact preview origin and the Authorization, Content-Type, Cart-Token and Idempotency-Key request headers at the host/store; expose Cart-Token. Do not add store secrets to solve CORS. The local Docker helper is development-only.
The app loads but shows no products
Confirm published catalog visibility, category assignments and stock settings. Check the WooCommerce Store API product response. An empty real catalog is shown as empty, without demo products.
Images or videos do not load
Open the media URL directly. Check HTTPS, mixed content, hotlink protection, MIME type, video codec and access rules. Use a poster for every video and compressed store media. Cached thumbnails may need regeneration through your store’s normal tooling.
Branding or home edits do not appear
Save the correct WordPress page and refresh the app home. Verify that the app was built for this store. Check cache rules for the bootstrap/home APIs. If another admin window saved newer changes, reload the editor before saving again.
No delivery rates or COD method appears
Check the entered address against your WooCommerce shipping zones, enabled methods, allowed countries and COD restrictions. Compare the same cart/address on the website. Resolve the server configuration; do not hardcode totals/rates in Flutter.
Stripe or PayPal does not appear
Browser previews offer COD only. On Android/iOS, confirm every required WooApp credential and webhook value, the enabled flag, matching mode and provider availability. Installing a website gateway plugin alone does not configure the native adapter.
Payment approved but the order is not confirmed
Resume the original attempt. Check provider order/capture status, signed webhook delivery, server errors and the WooCommerce order notes. Avoid repeated new checkouts. Share a sanitized order reference and provider event IDs with support, never secret credentials.
Password recovery or account email does not arrive
Configure WordPress email/SMTP with your host, verify the customer’s address and check delivery/spam logs. The app cannot deliver email if the WordPress mail service is not working.
WordPress refuses the uploaded ZIP
Select the inner ultimate-app-api-2.0.0.zip, not the complete buyer archive. Confirm PHP/WordPress/WooCommerce requirements and hosting upload limits. The ZIP must contain a top-level ultimate-app-api folder and its plugin entry file.
Android signing, iOS provisioning or dependency errors
Check flutter doctor -v, use the source’s locked dependencies, and confirm platform tooling and private signing setup. iOS needs a Mac. The generated Android debug signing assignment must be replaced for release. Include sanitized build errors in a support ticket.
17 / A LITTLE CONTEXT GOES A LONG WAY
How everything connects
The customer app calls WooCommerce Store API for catalog/cart and /wp-json/wooapp/v1/ for WooApp configuration, accounts and checkout. Prices and order totals are calculated by the store. The app never needs an administrator session to fetch the catalog.
Customer sessions use bearer tokens. Native Android/iOS store session material in platform secure storage; browser preview keeps it in memory. Payment secrets remain on the server. Customer and payment responses should bypass shared page/CDN caching. Hosting must forward the required authorization and cart headers.
18 / YOUR WOOAPP REFERENCE
Features & compatibility
| Area | Included | Configuration guide |
|---|---|---|
| Store integration | WordPress plugin, WooCommerce catalog/cart, customer accounts and orders | Install the plugin |
| Storefront | Galleries, variations, search, favorites, cart, coupons and delivery choices | Catalog & checkout |
| Branding & content | Logo, six palettes, three font styles, visual collections and image/video banners | Branding settings |
| Payments | Cash on delivery, native Stripe PaymentSheet and PayPal approval | Provider setup |
| Source delivery | Flutter source ZIP, installable plugin ZIP and offline HTML documentation | Your download |
See Requirements & compatibility for the supported platform versions, product types and extension scope. Your developer configures app identifiers, signing and your canonical HTTPS store URL. Store content and branding are managed in WordPress.
19 / YOU DON’T HAVE TO FIGURE IT OUT ALONE
Getting support
Contact Tqniyati for purchase-related setup questions and reproducible product issues, within your purchase’s support terms. Keep your purchase details in the private support channel rather than public comments.
Include the details that help us help you
- Plugin/app version, WordPress/WooCommerce/PHP versions and Flutter version.
- The affected platform and whether this is a browser, debug or signed release build.
- The exact steps, expected result and actual result.
- A sanitized screenshot/error log and a reproducible product/order reference if applicable.
- Any custom checkout/product extensions and your hosting cache/security setup.
Do not include passwords, full payment details, private keys, customer tokens or signing files. For a required additional payment gateway, share its official developer documentation, country/currency and account requirements. Integration development is offered at no extra charge subject to technical feasibility and an agreed delivery schedule; provider fees remain yours.
Broader custom app design, bespoke features, store creation or publishing assistance can be discussed separately. App-store acceptance remains subject to the platform’s review.
20 / BUILT WITH GOOD FOUNDATIONS
Credits & licenses
WooApp is an independent product. Developed by Tqniyati. WordPress, WooCommerce, Flutter, Stripe and PayPal names are used to describe integrations and remain the property of their respective owners. Their appearance does not imply endorsement.
- Flutter/Dart and packages listed in the included
pubspec.yamlandpubspec.lock. Preserve the notices generated/included by your dependencies. - DM Sans and Cormorant Garamond: bundled under their included SIL Open Font License notices. DM Sans license · Cormorant license.
- Store photography and demo video: project-created sample assets used to illustrate the demonstration store. Customer apps retrieve their own store media rather than bundling this catalog.
- Guide screenshots: captured from the local WooApp staging installation. They illustrate the plugin controls and app journeys described in this handbook.
Your purchase license and the provider/platform terms govern use of the product and integrations. See the item’s current license information on CodeCanyon. This guide does not replace those terms.