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.

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