Configurar la cámara (escáner)
Una de las funcionalidades de la terminal Point que podrás usar desde tu SmartApp es la cámara como escáner de un código QR o de barras, esencial para pagos presenciales . Además, también puede usarse para escanear códigos QR propios del establecimiento y códigos de barras de productos.
Para implementar esta funcionalidad, utiliza el método launchScanner de la clase cameraScanner dentro del objeto MPManager, y diferencia qué tipo de código quieres escanear mediante la clase ScanType, que puede ser:
CAMERA_SCANNER_QR: representa la lectura de códigos QR.CAMERA_SCANNER_BARCODE: representa la lectura de códigos de barras.
Además, a través de la clase ScannerFlowRequestData también podrás controlar algunas funcionalidades visuales de la pantalla del escáner, como:
| Funcionalidad | Tipo | Descripción |
isLanternOn | Boolean | Indica si el escáner debe abrir con la linterna de la terminal encendida. Si es así, true; si no, false. Esta funcionalidad no está disponible para lectura de códigos QR, solo para códigos de barras. |
initialOrientation | String | Define la orientación inicial de la pantalla donde se mostrará el escáner, que puede ser vertical u horizontal. Los valores posibles son: - null: la orientación será determinada por la implementación predeterminada de la pantalla del escáner, que actualmente es siempre vertical (Portrait). - 0: orientación definida como horizontal (Landscape). Se recomienda pasar este valor como ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE. - 1: orientación definida como vertical (Portrait). Se recomienda pasar este valor como ActivityInfo.SCREEN_ORIENTATION_PORTRAIT. |
A continuación, ve un ejemplo de implementación del escáner.
val cameraScanner = MPManager.cameraScanner
/**
* Lanza la cámara para escanear un código QR con los datos de solicitud
**/
val requestData = ScannerFlowRequestData(
isLanternOn = true, /** Control para encender la linterna, con valor booleano true */
initialOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE /** Control para la orientación inicial de la pantalla como Landscape, con valor int 0 */
)
cameraScanner.launchScanner(ScanType.CAMERA_SCANNER_QR, requestData) { response ->
response
.doIfSuccess { result -> /** Manejo del resultado exitoso del escáner (result.message) */ }
.doIfError { error -> /** Manejo del error que resulte del escáner (error.message.orEmpty()) */ }
}
/**
* Lanza la cámara para escanear un código de barras con los datos de solicitud
**/
val requestData = ScannerFlowRequestData(
isLanternOn = false, /** Control para encender la linterna, con valor booleano true */
initialOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT /** Control para la orientación inicial de la pantalla como Landscape, con valor int 1 */
)
cameraScanner.launchScanner(ScanType.CAMERA_SCANNER_BARCODE, requestData) { response ->
response
.doIfSuccess { result -> /** Manejo del resultado exitoso del escáner (result.message) */ }
.doIfError { error -> /** Manejo del error que resulte del escáner (error.message.orEmpty()) */ }
}
final CameraScanner cameraScanner = MPManager.INSTANCE.getCameraScanner();
final ScannerFlowRequestData requestData = ScannerFlowRequestData(true, 0);
final Function<MPResponse<CameraScannerResponse>, Unit> callback = new Function<MPResponse<CameraScannerResponse>, Unit>() {
@Override
public Unit apply(MPResponse<CameraScannerResponse> response) {
if (response.getStatus() == ResponseStatus.SUCCESS) {
// Manejar la respuesta exitosa
CameraScannerResponse cameraScannerResponse = response.getData();
String result = cameraScannerResponse.getMessage();
// ... Hacer algo con el resultado
} else {
// Manejar el error en la respuesta
String errorMessage = response.getError();
// ... Hacer algo con el error
}
return Unit.INSTANCE;
}
};
/**
* Lanzar el escáner de cámara QR o Barra con el requestData y callback
* ScanType.CAMERA_SCANNER_QR, es el tipo para lanzar la cámara para leer QR
* ScanType.CAMERA_SCANNER_BARCODE, es el tipo para lanzar la cámara para leer código de barras
*/
cameraScanner.launchScanner(ScanType.CAMERA_SCANNER_QR, requestData, callback);