O provider ActiveApplicationProvider é responsável por ativar e desativar o StoneCode do lojista.

Ativando seu Stone Code:

// Esse método deve ser executado para inicializar o SDK
List<UserModel> userList = StoneStart.init(APPLICATION_CONTEXT);

// Quando é retornado null, o SDK ainda não foi ativado
// Também é importante checar se o StoneCode está presente na lista retornada para evitar uma ativação desnecessária
if (userList == null || !hasStoneCode(userList, STONE_CODE)) {
  ActiveApplicationProvider activeApplicationProvider = new ActiveApplicationProvider(CONTEXT);
  activeApplicationProvider.setDialogMessage("Ativando o Stone Code");
  activeApplicationProvider.setDialogTitle("Aguarde");
  activeApplicationProvider.useDefaultUI(true);
  activeApplicationProvider.setConnectionCallback(new StoneCallbackInterface() {

    public void onSuccess() {
       // SDK ativado com sucesso
     }

     public void onError() {
       // Ocorreu algum erro na ativação
     }
  });
  activeApplicationProvider.activate(STONE_CODE);
} else {
  // O SDK já foi ativado.
}

🚧

Compartilhamento de Dados com apps Stone

A partir da versão 3.6.0, a função StoneStart.init(APPLICATION_CONTEXT) irá retornar o UserModel ativo no POS Android, caso a app esteja sendo executada em um POS.

Portanto, não será mais mais necessário ativar o SDK caso o StoneCode a ser utilizado seja o mesmo ativo no POS.

Caso você utilize um StoneCode diferente do ativo no POS, como no caso de multiplos Stone Codes, o processo de ativação ainda é necessário!

👍

Caso você esteja utilizando um POS Android, com seu Stone Code ativado você já pode começar a transacionar através do SDK.

Caso você esteja utilizando um pinpad, você precisa conectar com um pinpad para poder transacionar. Leia seção Provedor de Conexão com Pinpad Bluetooth

Desativando um Stone Code:

ActiveApplicationProvider activeApplicationProvider = new ActiveApplicationProvider(CONTEXT);
  activeApplicationProvider.setDialogMessage("Desativando o Stone Code");
  activeApplicationProvider.setDialogTitle("Aguarde");
  activeApplicationProvider.useDefaultUI(true);
  activeApplicationProvider.setConnectionCallback(new StoneCallbackInterface() {

     public void onSuccess() {
       // Operação executada com sucesso
     }

     public void onError() {
       // Ocorreu algum erro na operação
     }
  });
  activeApplicationProvider.deactivate(STONE_CODE);

📘

Status do Provider

Todos os status que podem ser retornados por um provider estão disponíveis na seção Status do Provider.

❗️

Compartilhamento de Dados com apps Stone

É necessário tomar extremo cuidado ao desativar um StoneCode a partir da versão 3.6.0

Como as informações da Ativação são compartilhadas com o POS Android da Stone, desativar todos os StoneCodes ou desativar um StoneCode que não tenha sido explicitamente ativo pelo seu app pode gerar side-effects como, por exemplo, perda de todas as informações transacionais do POS.