Android SDK v2.84.0.1 - Change Log
[2.84.0.1-260904] - 2026-09-04
- Documentation
- Technical Guide
1. Mastercard contactless taps now approve on a VP3300
Mastercard contactless taps declined with ARC 05 (do not honor). The
device's contactless configuration group 1 never declared a cardholder
verification method (CVM) capability. The card's kernel had no valid CVM
path to complete, so it returned a decline instead of an approval.
No work is required. The SDK now writes all five VP3300 contactless
configuration groups (00, 01, 02, 04 and 05) into the device immediately
before every transaction. Group 1 declares CVM capability:
Tag Value Meaning
------- ------------- ----------------------
9F7E 01 CVM capability enabled
DF8118 08 No CVM required
DF8119 08 No CVM required
DF811F 08 Security capability
DF8126 000000010000 CVM required limit
The SDK also sends the terminal's current date and time with every
transaction, as tags 9A and 9F21. Earlier versions carried a fixed date
in the configuration group instead.
2. EMV compound tags now de-construct into flat tags
Some IDTech firmware sends a few EMV tags under non-standard IDs:
What it is Standard tag Sent instead
------------------- ------------ ------------------
KSN DFEE12 FFEE12
Masked PAN 5A 5AA1 (compound)
Encrypted PAN - 5AC1 (compound)
Masked track 2 57 57A1 (compound)
Encrypted track 2 - 57C1 (compound)
Track 2 equivalent 9F6B 9F6BC1 (compound)
The five compound tags sit nested inside the wrapper tags FF8105 and
FF8106. An extra ID byte (A1 or C1) marks masked against encrypted. That
byte lands where a standards-compliant TLV parser expects a length byte.
The parser read it as a length and overran the buffer. The transaction
then failed with xError=Invalid chip read; try again and
xErrorCode=01714.
The SDK now renames FFEE12 to DFEE12. It also un-nests the compound tags
back to the top level:
5AA1 -> DFEF6A
5AC1 -> 5A
57A1 -> DFEF6B
57C1 -> 57
9F6BC1 -> 9F6B
The SDK applies both corrections before the transaction leaves the
device.
3. Duplicate magnetic stripe tags no longer crash the host app
A magnetic stripe read could return the same EMV tag twice. The SDK tried
to add both copies to its tag set and threw an exception. The host app
crashed. The SDK now keeps the first copy and ignores the duplicate.
4. Disable the contactless reader on a VP3300
New method SetVP3300DisableContactless(boolean) on TransactionParameters.
The default is false, so contactless stays enabled. Set it to true and
the device accepts insert and swipe only. The setting does not override
your chosen start-transaction method.
See the code sample.
5. Load a JSON configuration into a VP3300 device
New method loadDeviceConfig(String json). It is available on the CustomUI
Bluetooth manager and on the CustomUI USB manager. The behavior is
identical over Bluetooth and over USB.
Two companion methods report the callback name and the callback argument:
getLoadDeviceConfigCallbackName() and
getLoadDeviceConfigCallbackArgument().
For sample code, see JSONConfigFragment.java in the sample app.
6. Redesigned sample app
The Android SDK sample app now uses a drawer-style navigation menu in
place of the bottom navigation bar. A new JSON Config screen demonstrates
loadDeviceConfig.