- Utilize as boas práticas de programação Android.
 - 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.
 - 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.
 - 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.
 - É de responsabilidade do desenvolvedor garantir a segurança da informação dentro do aplicativo.
- Garantir comunicações com o TLS mínimo 1.2
 - Seguir as boas práticas de segurança do Android.
 - Não expor dados sensíveis dos clientes, tais como, senhas, informações pessoais e de negócio.
 - Integridade dos dados.
 
 - 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.
 - Evite funcionalidades com timeout infinito que possa deixar sua aplicação travada ou aguardando algum evento.
 - Não manter a antena do Mifare ligada, apenas ligar quando for ser utilizada.
 - Uso consciente e controlado do consumo de dados via redes móveis (Chip Stone).
 - 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.
 - 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.
- 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.
 
 - Uso consciente do consumo de memória e CPU.
 - Uso consciente e controlado de bateria, seguindo os padrões já estabelecidos para Android
 - 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!
- É expressamente proibido "WebApps", "WebView" e "WebSockets" devido a medidas de segurança. Desenvolvimentos com tecnologias baseadas em Webview, são proibidas. Exemplo:Ionic, Cordova.
 - É 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.
 - 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.
 - 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
 - Acesso a recursos externos impróprios (USB, Google Play...). Terminais de produção têm tais recursos bloqueados.
 - O Ícone, logo e Nome do aplicativo não podem estar vinculado às identificações visuais dos itens abaixo:
- Stone Co e seus produtos;
 - Concorrentes diretos ou indiretos da Stone Co.
 - 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ões | Descrição | 
|---|---|
| ACCESS_INSTANT_APPS | |
| BROADCAST_STICKY | Permite 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_STATE | Permite que os aplicativos alterem o estado de conectividade da rede. | 
| CHANGE_WIFI_STATE | Permite que os aplicativos alterem o estado da conectividade Wi-Fi. | 
| DELETE_PACKAGES | Permite que um aplicativo exclua pacotes. | 
| DOWNLOAD_WITHOUT_NOTIFICATION | |
| DUMP | Permite que um aplicativo recupere informações de despejo de estado dos serviços do sistema. | 
| INSTALL_PACKAGES | Permite que um aplicativo instale pacotes. | 
| INSTALL_SHORTCUT | Permite que um aplicativo instale um atalho no Launcher. | 
| INTERACT_ACROSS_USERS_FULL | Permite todas as interações possíveis entre os usuários. | 
| KILL_BACKGROUND_PROCESSES | Permite que um aplicativo chame ActivityManager.killBackgroundProcesses(String). | 
| MOUNT_UNMOUNT_FILESYSTEMS | Permite montar e desmontar sistemas de arquivos para armazenamento removível. | 
| REQUEST_INSTALL_PACKAGES | Permite 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_TIME | Permite que os aplicativos definam a hora do sistema diretamente. | 
| SET_TIME_ZONE | Permite que os aplicativos definam o fuso horário do sistema diretamente. | 
| SET_WALLPAPER | Permite que os aplicativos definam o papel de parede. | 
| SET_WALLPAPER_HINTS | Permite que os aplicativos definam as dicas do papel de parede. | 
| SYSTEM_ALERT_WINDOW | Permite 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_IO | Lista e abre periféricos. | 
| WAKE_LOCK | Permite o uso de PowerManager WakeLocks para evitar que o processador durma ou a tela escureça. | 
| WRITE_CALENDAR | Permite que um aplicativo grave os dados do calendário do usuário. | 
| WRITE_OWNER_DATA | |
| WRITE_SECURE_SETTINGS | Allows an application to read or write the secure system settings. | 
| WRITE_SETTINGS | Permite que um aplicativo leia ou grave as configurações do sistema. | 
| WRITE_APN_SETTINGS | Permite 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_LOGS | Permite que um aplicativo leia os arquivos de log do sistema de baixo nível. | 
| READ_USER_DICTIONARY | Permite 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_STATE | Permite 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_ACCOUNTS | Permite o acesso à lista de contas no Serviço de Contas. | 
| DEVICE_POWER | |
| GET_TASKS | Deprecated apartir da API 21 | 
| MODIFY_PHONE_STATE | Permite modificação de estado do telefone - Liga, Desliga, MMI, etc. | 
| REBOOT | Permite o reboot do aparelho. | 
| RECEIVE_BOOT_COMPLETED | Permite que um aplicativo receba o Intent.ACTION_BOOT_COMPLETED que é transmitido após a conclusão da inicialização do sistema. | 
| WRITE_EXTERNAL_STORAGE | Permite que um aplicativo grave em armazenamento externo. | 
Guia do Desenvolvedor SDK Android
Para maiores informações acessar o doc: Guia do Desenvolvedor SDK Android
