Boas Práticas e Segurança

  1. Utilize as boas práticas de programação Android.
  2. Para iniciar o desenvolvimento, você deve adicionar os nossos repositórios no build.gradle do seu projeto e depois adicionar a dependência para o core da SDK.
  3. Ao chamar um provider, uma ação será executada. Para que o usuário tenha uma melhor experiência e tenha o feedback da operação que está fazendo, aconselhamos sempre mostrar o progresso dessa ação.
  4. Para garantir que o portador do cartão não tenha nenhuma cobrança indevida, sugerimos que seja chamada a função 'reversalProvider' a cada hora, para cancelar as transações com erro.
  5. É de responsabilidade do desenvolvedor garantir a segurança da informação dentro do aplicativo.
    1. Garantir comunicações com o TLS mínimo 1.2
    2. Seguir as boas práticas de segurança do Android.
    3. Não expor dados sensíveis dos clientes, tais como, senhas, informações pessoais e de negócio.
    4. Integridade dos dados.
  6. Tamanho do APK – é importante que seu APK não ultrapasse 70Mb de armazenamento, isso pode gerar impactos na assinatura das aplicações e download nos terminais.
  7. Evite funcionalidades com timeout infinito que possa deixar sua aplicação travada ou aguardando algum evento.
  8. Não manter a antena do Mifare ligada, apenas ligar quando for ser utilizada.
  9. Uso consciente e controlado do consumo de dados via redes móveis (Chip Stone).
  10. A Stone utiliza um proxy na conectividade via chip Stone, portanto é necessário que nos envie todas as URLs externas que utiliza em sua aplicação.
  11. Uso consciente do consumo de bobina de impressão – evite imagens grandes, muitos espaços em branco, deixar grandes espaços entre linhas, espaços no início e final dos comprovantes.
    1. A “customização de impressão” tem o intuito de ser um adicional a impressão da venda, ficha, ticket e etc, não é recomendado a geração de grandes relatórios.
  12. Uso consciente do consumo de memória e CPU.
  13. Uso consciente e controlado de bateria, seguindo os padrões já estabelecidos para Android
  14. Gestão do cancelamento, deixar claro o fluxo de stakeholders que podem cancelar dentro do app e impor uma validação do cliente para permitir o cancelamento da transação.

Não é permitido!

  1. É expressamente proibido "WebApps", "WebView" e "WebSockets" devido a medidas de segurança. Desenvolvimentos com tecnologias baseadas em Webview, são proibidas. Exemplo:Ionic, Cordova.
  2. É expressamente proibido o uso de comunicações abertas entre POS e Servidor, tais como Websockets e MQTT, estas tecnologias tornam o POS ativo nas comunicações, não sendo permitido pela norma PCI.
  3. O Google Play Services não estará disponível, portanto algumas funcionalidades que dependem dele (ex.: Play Services Location, Push Notifications) não funcionarão.
  4. O aplicativo não pode realizar alterações nas configurações de sistema do Android (Ex: data, hora, localização, etc). Fique atento se estiver usando um framework não nativo, pode haver interferência na conversão de horas
  5. Acesso a recursos externos impróprios (USB, Google Play...). Terminais de produção têm tais recursos bloqueados.
  6. O Ícone, logo e Nome do aplicativo não podem estar vinculado às identificações visuais dos itens abaixo:
    1. Stone Co e seus produtos;
    2. Concorrentes diretos ou indiretos da Stone Co.
    3. Nome de fabricantes ou modelo de terminais.
  7. Utilizar qualquer referência ao nome da fabricante do Terminal no nome do pacote da aplicação integrante.
    Exemplo: (br.com.sunmi.abc, br.com.positivoXPTO).

Permissões no AndroidManifest.xml

As permissões abaixo “NÃO SÃO PERMITIDAS”, por permitirem que o aplicativo acesse alguns recursos do Android ou recursos de hardware não permitidos pela Stone, ou também por colocar em risco a operação de outros aplicativos.
A Stone pode adicionar outras permissões proibidas durante o processo de homologação.

Atenção: Nenhuma permissão de sistema deve ser utilizada pelo app.

PermissõesDescrição
ACCESS_INSTANT_APPS
BROADCAST_STICKYPermite que um aplicativo transmita intents persistentes. São broadcasts cujos dados são retidos pelo sistema depois de finalizados, para que os clientes possam recuperá-los rapidamente sem ter que esperar pelo próximo broadcast.
CHANGE_NETWORK_STATEPermite que os aplicativos alterem o estado de conectividade da rede.
CHANGE_WIFI_STATEPermite que os aplicativos alterem o estado da conectividade Wi-Fi.
DELETE_PACKAGESPermite que um aplicativo exclua pacotes.
DOWNLOAD_WITHOUT_NOTIFICATION
DUMPPermite que um aplicativo recupere informações de despejo de estado dos serviços do sistema.
INSTALL_PACKAGESPermite que um aplicativo instale pacotes.
INSTALL_SHORTCUTPermite que um aplicativo instale um atalho no Launcher.
INTERACT_ACROSS_USERS_FULLPermite todas as interações possíveis entre os usuários.
KILL_BACKGROUND_PROCESSESPermite que um aplicativo chame ActivityManager.killBackgroundProcesses(String).
MOUNT_UNMOUNT_FILESYSTEMSPermite montar e desmontar sistemas de arquivos para armazenamento removível.
REQUEST_INSTALL_PACKAGESPermite que um aplicativo solicite a instalação de pacotes. Aplicativos direcionados a APIs maiores que 25 devem ter essa permissão para usar Intent.ACTION_INSTALL_PACKAGE.
SET_TIMEPermite que os aplicativos definam a hora do sistema diretamente.
SET_TIME_ZONEPermite que os aplicativos definam o fuso horário do sistema diretamente.
SET_WALLPAPERPermite que os aplicativos definam o papel de parede.
SET_WALLPAPER_HINTSPermite que os aplicativos definam as dicas do papel de parede.
SYSTEM_ALERT_WINDOWPermite que um aplicativo crie janelas usando o tipo WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, mostrado acima de todos os outros aplicativos. Muito poucos aplicativos devem usar essa permissão; essas janelas destinam-se à interação no nível do sistema com o usuário.
USB_PERMISSION
USB_SET
USE_PERIPHERAL_IOLista e abre periféricos.
WAKE_LOCKPermite o uso de PowerManager WakeLocks para evitar que o processador durma ou a tela escureça.
WRITE_CALENDARPermite que um aplicativo grave os dados do calendário do usuário.
WRITE_OWNER_DATA
WRITE_SECURE_SETTINGSAllows an application to read or write the secure system settings.
WRITE_SETTINGSPermite que um aplicativo leia ou grave as configurações do sistema.
WRITE_APN_SETTINGSPermite que os aplicativos gravem as configurações de apn e leiam campos confidenciais de configurações de apn existentes, como usuário e senha.
READ_LOGSPermite que um aplicativo leia os arquivos de log do sistema de baixo nível.
READ_USER_DICTIONARYPermite que o aplicativo leia todas as palavras, nomes e frases que o usuário possa ter armazenado no dicionário do usuário.
READ_PHONE_STATEPermite acesso somente leitura ao estado do telefone, incluindo as informações atuais da rede celular, o status de qualquer chamada em andamento e uma lista de qualquer PhoneAccounts registrado no dispositivo.
GET_ACCOUNTSPermite o acesso à lista de contas no Serviço de Contas.
DEVICE_POWER
GET_TASKSDeprecated apartir da API 21
MODIFY_PHONE_STATEPermite modificação de estado do telefone - Liga, Desliga, MMI, etc.
REBOOTPermite o reboot do aparelho.
RECEIVE_BOOT_COMPLETEDPermite que um aplicativo receba o Intent.ACTION_BOOT_COMPLETED que é transmitido após a conclusão da inicialização do sistema.
WRITE_EXTERNAL_STORAGEPermite que um aplicativo grave em armazenamento externo.
📘

Guia do Desenvolvedor SDK Android

Para maiores informações acessar o doc: Guia do Desenvolvedor SDK Android