The GNU Taler merchant POS (point of sale) terminal allows sellers to
Note
The Android app is currently optimized for tablet devices, not phones.
At first start, the Android app asks you for a configuration URL and a user name as well as a password for HTTP basic authentication.
At every start of the app, it uses the saved configuration data to fetch the current configuration (defined below) and populates the currency, the products and their categories.
The Tabled UI is separated into three columns:
At the bottom of the main UI there is a row of buttons:
The top left corner features a hamburger icon. Clicking this opens a menu with these items:
Every change to the app’s source code triggers an automatic build that gets published in a F-Droid repository. If you don’t have it already, download the F-Droid app and then click the following link (on your phone) to add the nightly repository.
Note
Nightly apps can be installed alongside official releases and thus are meant only for testing purposes. Use at your own risk!
While not recommended, APKs can also be downloaded directly.
Import in and build with Android Studio or run on the command line:
$ git clone https://git.taler.net/merchant-terminal-android.git
$ cd merchant-terminal-android
$ ./gradlew assembleRelease
If you do not have the proprietary Android SDK installed, see the Developer’s Manual for build instructions using free SDK rebuilds.
The GNU Taler merchant POS configuration is a single JSON file with the following structure.
interface MerchantConfiguration { // Configuration for how to connect to the backend instance. config: BackendConfiguration; // The available product categories categories: MerchantCategory[]; // Products offered by the merchant (similar to Product). products: MerchantProduct[]; // Map from labels to locations locations: { [label: string]: [location: Location], ... }; }
The elements of the JSON file are defined as follows:
interface BackendConfiguration { // The URL to the Taler Merchant Backend (including instance if applicable) base_url: string; // The API key used for authentication api_key: string; }interface MerchantCategory { // A unique numeric ID of the category id: number; // The name of the category. This will be shown to users and used in the order summary. name: string; // Map from IETF BCP 47 language tags to localized names name_i18n?: { [lang_tag: string]: string }; }interface MerchantProduct { // A merchant-internal unique identifier for the product product_id?: string; // Human-readable product description // that will be shown to the user and used in contract terms description: string; // Map from IETF BCP 47 language tags to localized descriptions description_i18n?: { [lang_tag: string]: string }; // The price of the product price: Amount; // An optional base64-encoded product image image?: ImageDataUrl; // A list of category IDs this product belongs to. // Typically, a product only belongs to one category, but more than one is supported. categories: number[]; // Where to deliver this product. This may be an URL for online delivery // (i.e. 'http://example.com/download' or 'mailto:customer@example.com'), // or a location label defined inside the configuration's 'locations'. delivery_location: string; }