myPOS MDB SDK Integration Guide
This guide outlines how to install and use the myPOS-MDB-SDK to enable cashless vending machine integration via Android.
1. Installation
Gradle Setup
Add the Maven Central repository in your project-level build.gradle:
allprojects {
repositories {
mavenCentral()
}
}
Add the SDK dependency in your app-level build.gradle:
dependencies {
implementation 'com.mypos:mdbsdk:1.0.0'
}
2. Initialization
Android Manifest
Add required package queries:
<queries>
<package android:name="com.mypos" />
<package android:name="com.mypos.ipp" />
</queries>
Application Class Setup
public class SampleApplication extends Application implements MDBManager.OnBindListener {
@Override
public void onCreate() {
super.onCreate();
MDBManager.getInstance().bind(this, this);
}
@Override
public void onBindComplete() {
MDBManager.getInstance().init(paymentAppInfo, iCompletionCallback, iPaymentCallback);
}
}
3. Cashless Device Configuration
Setup PaymentAppInfo
PaymentAppInfo paymentAppInfo = new PaymentAppInfo();
paymentAppInfo.setClientId("12345678");
paymentAppInfo.setManufactureCode("XGD");
paymentAppInfo.setModel(Build.MODEL);
paymentAppInfo.setCountryCode("826");
paymentAppInfo.setDecimalPlaces((byte) 0x02);
paymentAppInfo.setScaleFactor(1);
paymentAppInfo.setResponseTime((byte) 0x3C);
paymentAppInfo.setLogLevel(LogLevel.INFO.ordinal());
paymentAppInfo.setReaderFeatureLevel((byte) 0x00);
paymentAppInfo.setRevalueApproved(false);
paymentAppInfo.setRequestRefunds(true);
paymentAppInfo.setDeviceMode(DeviceMode.CASHLESS);
paymentAppInfo.setNotifyStatus(false);
paymentAppInfo.setRespondAckFirst(false);
paymentAppInfo.setDeviceType(0);
paymentAppInfo.setSupportCashSale(false);
paymentAppInfo.setDelayTm(0);
paymentAppInfo.setWaitEndSessionTm(30);
paymentAppInfo.setSupportMultiVend(false);
paymentAppInfo.setSupportRemoteVend(false);
paymentAppInfo.setEnableAlwaysIdle(true);
paymentAppInfo.setMonetaryFormat(0);
4. Payment Callback
private final IPaymentCallback iPaymentCallback = new IPaymentCallback.Stub() {
@Override
public int onPay(int tradeType, String itemPrice, String itemNumber) {
if (tradeType == VendType.SALE.ordinal()) {
// Handle sale
}
return 0;
}
@Override
public void notifyMdbStatus(int mdbDeviceStatus) {
switch (DeviceStatus.values()[mdbDeviceStatus]) {
case INACTIVE:
case DISABLE:
case ENABLE:
case SESSION_IDLE:
case VEND:
break;
}
}
@Override
public void notifyVendResult(int result) {
switch (VendResult.values()[result]) {
case VEND_SUCCESS:
case VEND_FAILURE:
case VEND_END_SESSION:
case VEND_CANCEL:
break;
}
}
@Override
public void notifyVendParam(int type, byte[] data) {
switch (VendParam.values()[type]) {
case MIN_PRICE:
double minPrice = Long.parseLong(ByteArray.bytesToHex(data), 16) / 100.0;
break;
case MAX_PRICE:
double maxPrice = Long.parseLong(ByteArray.bytesToHex(data), 16) / 100.0;
break;
case IDLE_MODE:
long idleMode = Long.parseLong(ByteArray.bytesToHex(data), 16);
break;
}
}
@Override public void onPayResult(String result) {}
@Override public void onCallDiagnostics(byte[] bytes) {}
@Override public void onReaderCancel() {}
};
5. Setup Completion Callback
private final ICompletionCallback iCompletionCallback = new ICompletionCallback.Stub() {
@Override public void onSuccess() {}
@Override public void onFailure(int retCode) {}
@Override public void onAppUpdate() {}
@Override public void onNotifyVMCInfo(String brand, String model) {}
@Override public void onReportError(int type, boolean success, String errorMessage) {}
};
6. Session Management
Start Session
JSONObject report = new JSONObject();
report.put(ReportKey.TYPE, ReportType.BEGIN_SESSION.ordinal());
report.put(ReportKey.FUNDS, hexAmount); // in hexadecimal format
MDBManager.getInstance().reportToVMC(report.toString());
Cancel Session
JSONObject report = new JSONObject();
report.put(ReportKey.TYPE, ReportType.CANCEL_SESSION_REQUEST.ordinal());
MDBManager.getInstance().reportToVMC(report.toString());
Report Vend Result
JSONObject report = new JSONObject();
report.put(ReportKey.TYPE, ReportType.TRADE_RESULT.ordinal());
report.put(ReportKey.TRADE_RESULT, TransResult.TRADE_SUCCESS.ordinal());
report.put(ReportKey.TRANS_RESULT_AMOUNT, hexAmount);
MDBManager.getInstance().reportToVMC(report.toString());
7. Age Verification
MDBManager.getInstance().setAgeVerificationCallback(ageVerificationCallback);
Implement Callback
private final IAgeVerificationCallback ageVerificationCallback = new IAgeVerificationCallback.Stub() {
@Override
public void onCheckAgeVerification(int age) {
// Perform your age check logic
}
};
Set Verification Result
AgeVerificationManager.getInstance().setDRAVSStatus(AgeVerificationResult.VALID_CARD);