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 como Oxxo ou PayCash. 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);
