Configurar câmera (scanner)
Um dos recursos do terminal Point que poderá ser utilizado pelo seu SmartApp é a câmera como scanner de um código QR ou de barras, essencial para pagamentos presenciais . Além disso, também pode ser utilizada para escanear códigos QR próprios do estabelecimento e códigos de barras de produtos.
Para implementar este recurso, utilize o método launchScanner, da classe cameraScanner dentro do objeto MPManager, e diferencie qual tipo de código deseja escanear através da classe ScanType, podendo ser:
CAMERA_SCANNER_QR: representa a leitura de códigos QR.CAMERA_SCANNER_BARCODE: representa a leitura de código de barras.
Além disso, através da classe ScannerFlowRequestData você também poderá controlar algumas funcionalidades visuais da tela do scanner:
| Funcionalidade | Tipo | Descrição |
isLanternOn | Boolean | Indica se o scanner deve abrir com a lanterna do terminal ligada. Se sim, true e, se não, false. Essa funcionalidade não está disponível para leitura de códigos QR, apenas para código de barras. |
initialOrientation | String | Define a orientação inicial da tela onde o scanner será exibido, podendo ser vertical ou horizontal. Os valores possíveis são: - null: a orientação será determinada pela implementação padrão da tela do scanner, que atualmente é sempre retrato (Portrait). - 0: orientação definida como paisagem (Landscape). Recomenda-se passar este valor como ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE. - 1: orientação definida como retrato (Portrait). Recomenda-se passar este valor como ActivityInfo.SCREEN_ORIENTATION_PORTRAIT. |
Veja abaixo um exemplo de implementação do recurso de scanner.
val cameraScanner = MPManager.cameraScanner
/**
* lançar câmera para escanear código QR com request data
**/
val requestData = ScannerFlowRequestData(
isLanternOn = true, /** Controle para ligar a lanterna, valor booleano true */
initialOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE /** Controle para ligar a lanterna, valor booleano true */
)
cameraScanner.launchScanner(ScanType.CAMERA_SCANNER_QR, requestData) { response ->
response
.doIfSuccess { result -> /** Tratar resultado bem-sucedido do scanner (result.message) */ }
.doIfError { error -> /** Tratar erro do scanner (error.message.orEmpty()) */ }
}
/**
* lançar câmera para escanear código de barras com request data
**/
val requestData = ScannerFlowRequestData(
isLanternOn = false, /** Controle para desligar a lanterna, valor booleano false */
initialOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT /** Controle para a orientação inicial da tela como Portrait, valor int 1 */
)
cameraScanner.launchScanner(ScanType.CAMERA_SCANNER_BARCODE, requestData) { response ->
response
.doIfSuccess { result -> /** Tratar resultado bem-sucedido do scanner (result.message) */ }
.doIfError { error -> /** Tratar erro do scanner (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) {
// Tratar a resposta de sucesso
CameraScannerResponse cameraScannerResponse = response.getData();
String result = cameraScannerResponse.getMessage();
// ... Fazer algo com o resultado
} else {
// Tratar o erro na resposta
String errorMessage = response.getError();
// ... Fazer algo com o erro
}
return Unit.INSTANCE;
}
};
/**
* Lança o scanner de câmera QR ou de barras com o requestData e callback
* ScanType.CAMERA_SCANNER_QR é o tipo para lançar a câmera para ler QR
* ScanType.CAMERA_SCANNER_BARCODE é o tipo para lançar a câmera para ler código de barras
*/
cameraScanner.launchScanner(ScanType.CAMERA_SCANNER_QR, requestData, callback);