Ingenico Moby/5500

Pairing a Moby/5500 Card Reader

For mobile application use (iOS and Android), the Moby/5500 can be used over a Bluetooth connection. In order to pair the Moby/5500 to the mobile device, you need to use the existing findDevices API to find the reader first, and then setup a pairing listener for that device. When you call 'connectAndInitialize` on that device, you will see a pairing dialog displayed by iOS and Android. The user should click pair and then press the power/bluetooth button on the Moby/5500. This will display a sequence of LED lights on the Moby/5500. The same sequence will be returned back to the application via the pairing listener. The application can then display the sequence for the user to confirm. Once confirmed, the pairing process will be completed.

Overview of pairing steps:

  1. Call findDevices API using the commerce account.
  2. When device search returns with Moby/5500, call selectDevice API to set it as the active device.
  3. Setup the LED pairing listener on the card reader interface returned from selectDevice.
  4. Call connectAndInitialize API.
  5. iOS/Android displays dialog to pair; user accepts.

  6. User presses bluetooth button on the Moby/5500.

  7. Moby/5500 displays sequence of LED lights.

  8. The LED sequence is sent to the pairing listener.
  9. App displays the sequence to the user. Per PCI compliance, the app is required to display the sequence so the user can confirm it.
  10. User confirms the sequence. Bluetooth pairing is now established.

Troubleshooting Guidelines for Users

Pairing process fails

  • iOS - User has to go into iOS Bluetooth settings and forget the temporarily paired reader before re-starting pairing process.
  • Android - User can start pairing process again without any further steps to be done.

Reader is not initiating LED sequence

  • Make sure user clicks button on Moby/5500 within 30 seconds of accepting the pairing dialog displayed by iOS/Android.

Java (Android)

Code Sample - Simplified Flow

Refer to the sample application source code for more information.

// get a hold of the cardreaders interface
ECLDevicesInterface<ECLCardReaderInterface> cardReadersInterface = eclAccountInterface.getCardReaders();
// kick off a device search and setup a listener to receive callbacks from the search
cardReadersInterface.findDevices(new ECLFindDevicesListener() {
       // implementation of device search done callback
       public void devicesSearchDone(List<ECLFindDevicesSearchResult> deviceSearchResults) {
              ...
              if (deviceSearchResults.size() > 0) {
                   ECLFindDevicesSearchResult result = deviceSearchResults.get(0);
                   // set this card reader as the active device
                   ECLCardReaderInterface cardReaderInterface = cardReadersInterface.selectDevice(result.getName(), result.getConnectionTypes());
                   ...
                   // add connection listener to receive connect and disconnect callbacks
                   cardReaderInterface.addConnectionListener( new CardReaderListenerAdapter(...));

                   if (result.getName().contains("MOB55")) {
                        cardReaderInterface.addDevicePairingListener(new ECLDeviceLedPairingListener() {
                            // the implementation of one of the pairing delegate callbacks
                            // User has to press the power button on Moby/5500 to display the pairing sequence before this method gets called
                            public void deviceLedPairingSequence(ECLDeviceInterface eclDeviceInterface, List ledSequence,
                                                                 ECLLedDevicePairingConfirmationInterface eclLedDevicePairingConfirmationInterface) {
                                // display the sequence using com.roam.roamreaderunifiedapi.view.PairingLedView
                                // see LedPairingDialog of sample app for details

                                ...
                                // if user confirms the sequence
                                eclLedDevicePairingConfirmationInterface.confirm();
                            }
                            ...
                        }
                   }

                   ...
                   // connect and initialize the device.  if an update is necessary, perform the update.
                   cardReaderInterface.connectAndInitialize(true);
              }
        }
        ...
}

Objective-C

Code Sample - Simplified Flow

Refer to the sample application source code for more information.

// get a hold of card readers implementation of the devices protocol from the account and call findDevices
[[_account cardReaders] findDevices:self forceToDisconnect:true timeoutInSeconds:30];

// in this case we made the current class receive the findDevices callbacks (note the reference to "self" above)
...

// the implementation of one of the findDevices callbacks
+ (void)devicesSearchDone:(id<ECLDevicesProtocol>)devices searchResults:(NSArray<ECLFindDevicesSearchResult *> *)deviceSearchResults {
    ...
    if ([searchResults count] > 0) {
        // make this device the "active" device
        ECLFindDevicesSearchResult *reader = deviceSearchResults[0];
        id<ECLDeviceProtocol> selectedDevice = [devices selectDevice:reader.name withConnectionTypes:reader.connectionTypes];
        id<ECLCardReaderProtocol> selectedCardReader = (id<ECLCardReaderProtocol>)selectedDevice;

        // register this class to receive connection related callbacks
        [selectedCardReader addConnectionDelegate:self];

        // register the pairing delegate - required for Moby/5500 pairing.
        [selectedCardReader addDevicePairingDelegate:self];

        [selectedCardReader connectAndInitialize:YES];
        ...

// the implementation of one of the pairing delegate callbacks
// User has to press the power button on Moby/5500 to display the pairing sequence before this method gets called
+ (void)devicePairingLedSequence:(NSArray *)ledSequence confirmationProtocol:(id<ECLLedDevicePairingConfirmationProtocol>)confirmationProtocol {
    // display the sequence using LedPairingView from RUA_MFI framework
    // see LedPairingViewController of sample app for details

    // if user confirms the sequence
    [confirmationProtocol confirm];
}