Skip to main content

Overview

NetPOS supports white-label deployments for multiple financial institutions. Each bank can have its own branded version with custom configurations, URLs, and features.

Supported White-Label Variants

NetPOS uses Gradle product flavors to create bank-specific builds:

NetPOS

Package: com.woleapp.netposDefault NetPos branded version

Zenith Bank

Package: com.woleapp.netpos.zenithZenith Bank branded version with custom features

Wema Bank

Package: com.woleapp.netpos.wemaWema Bank variant with specialized services

Providus Bank

Package: com.woleapp.netpos.providusProvidus Bank customized build

Konga

Package: com.woleapp.netpos.kongaKonga marketplace integration

Heritage Bank

Package: com.woleapp.netpos.heritageHeritage Bank branded version

Unity Bank

Package: com.woleapp.netpos.unitybankUnity Bank customized build

EasyPay

Package: com.woleapp.netpos.easypayEasyPay payment solution

Aella Credit

Package: com.woleapp.netpos.aellacreditAella Credit lending solution

TingoPay

Package: com.woleapp.netpos.tingopayTingoPay digital payments

Wema Cash Out

Package: com.woleapp.netpos.wemaagentWema Bank agent banking

Wema MPGS

Package: com.woleapp.netpos.wemampgsWema MasterCard Payment Gateway Services

Build Configuration

White-label variants are defined in app/build.gradle:
flavorDimensions "whiteLabels"

productFlavors {
    netpos {
        dimension "whiteLabels"
    }
    zenith {
        dimension "whiteLabels"
        applicationIdSuffix ".zenith"
    }
    wema {
        dimension "whiteLabels"
        applicationIdSuffix ".wema"
    }
    // ... other flavors
}

Flavor-Specific Resources

Each white-label variant has its own resource directory:
app/src/
├── main/           # Shared resources
├── netpos/         # NetPOS-specific
├── zenith/         # Zenith-specific
├── wema/           # Wema-specific
├── providus/       # Providus-specific
└── defaults/       # Shared white-label code

Customizable Resources

1

Branding Assets

Each flavor can override:
  • App Name: values/strings.xml
  • Colors: values/colors.xml
  • Icons: Launcher icons and app icons
  • Logo: Brand-specific logos
  • Dimensions: UI spacing and sizes
2

Feature Flags

Use BuildConfig.FLAVOR to enable/disable features:
if (BuildConfig.FLAVOR == "wema" || BuildConfig.FLAVOR == "zenith") {
    // Enable reprint password feature
    preferenceScreen[1].isVisible = true
}
3

API Endpoints

Configure flavor-specific backend URLs in local.properties:
STRING_DEFAULT_BASE_URL=https://api.netpluspay.com
STRING_ZENITH_BASE_URL=https://zenith-api.netpluspay.com
STRING_CONTACTLESS_PAYMENT_WITH_QR_BASE_URL=https://qr.netpluspay.com

Environment Configuration

White-label builds can target different environments:

Production Environment

File: production-env.properties
base.url.netpos.mqtt=storm-mqtt.netpluspay.com
base.url.storm.utilities=https://storm-utilities.netpluspay.com/

Staging Environment

File: staging-env.properties
base.url.netpos.mqtt=storm-mqtt.test.netpluspay.com
base.url.storm.utilities=http://storm-utilities.test.netpluspay.com/

Switching Environments

Edit app-settings.properties:
env.path.production=production-env.properties
env.path.staging=staging-env.properties
env.use.mode.production=true  # Set to false for staging
env.use.test.keystore=false

Bank-Specific Features

Zenith Bank

  • Pay by Transfer: Zenith-specific transfer endpoints
  • QR Registration: Custom QR merchant registration
  • Reprint Password: Enhanced security for receipt reprinting
  • Custom API: STRING_ZENITH_BASE_URL endpoint
// Zenith QR Service
if (BuildConfig.FLAVOR == "zenith") {
    // Use ZenithQrService
}

Wema Bank

  • Agent Banking: Cash-in/cash-out services
  • MPGS Integration: MasterCard Payment Gateway
  • Merchant Accounts: Custom account management
  • Reprint Password: Enhanced receipt security
Multiple Wema variants:
  • wema: Standard Wema build
  • wemacashout: Agent banking focus
  • wemampgs: Payment gateway integration

Providus Bank

  • Merchant Accounts: Providus merchant account services
  • Custom Settlement: Bank-specific settlement flow
  • Integration: ProvidusMerchantsAccountService

Building White-Label Variants

Using Gradle

Build a specific flavor:
# Build Zenith release
./gradlew assembleZenithRelease

# Build Wema debug
./gradlew assembleWemaDebug

# Build all NetPOS variants
./gradlew assembleNetposRelease

Build Types

debug {
    signingConfig signingConfigs.netpos_signing_config
    buildConfigField "String", "BUILD_VARIANT", "\"debug\""
    applicationIdSuffix ".debug"
    ndk {
        abiFilters "armeabi-v7a", "x86"
    }
}
  • Includes debug symbols
  • Adds .debug package suffix
  • Supports ARM and x86 emulators
release {
    signingConfig signingConfigs.netpos_signing_config
    buildConfigField "String", "BUILD_VARIANT", "\"release\""
    debuggable false
    minifyEnabled false
    shrinkResources false
}
  • Production-ready build
  • Code signing required
  • Optimized for distribution

Signing Configuration

All white-label variants use the same signing configuration defined in keystore.properties:
storePassword=!#stlg#m&c
keyPassword=!#stlg#m&c
keyAlias=netplus
storeFile=../kozen-appstore.keystore
Keep keystore.properties and the keystore file secure. Never commit these to version control.

Printer Settings

Some features are flavor-specific, like printer configurations:
<ListPreference
    android:defaultValue="print_customer_copy_only"
    android:entries="@array/printer_settings_title"
    android:entryValues="@array/printer_settings_value"
    android:key="pref_printer_settings"
    android:title="Printer Print Settings" />
Options include:
  • Print customer copy only
  • Print merchant copy only
  • Print both copies

MQTT Configuration

Each environment has its own MQTT broker:
base.url.netpos.mqtt=storm-mqtt.netpluspay.com
MQTT is used for:
  • Real-time transaction notifications
  • Terminal configuration updates
  • Remote terminal management

Deployment Checklist

1

Configure Resources

  • Update brand colors in colors.xml
  • Replace app icons and logos
  • Set correct app name in strings.xml
2

Set Environment

  • Choose production or staging in app-settings.properties
  • Verify API endpoints in local.properties
  • Configure MQTT broker URLs
3

Build Configuration

  • Select correct product flavor
  • Use release build type for production
  • Verify signing configuration
4

Testing

  • Test on physical device
  • Verify terminal configuration
  • Test bank-specific features
  • Validate payment flows
5

Distribution

  • Generate signed APK
  • Test installation
  • Deploy to bank’s distribution channel

Troubleshooting

  • Clean the build: ./gradlew clean
  • Rebuild with correct flavor: ./gradlew assembleZenithRelease
  • Check BuildConfig.FLAVOR at runtime
  • Verify local.properties contains correct URLs
  • Check environment setting in app-settings.properties
  • Ensure flavor-specific endpoints are configured
  • Check flavor-specific code in BuildConfig.FLAVOR conditions
  • Verify feature flags are set correctly
  • Ensure flavor directory has required resources

See Also

Build docs developers (and LLMs) love