# Device Groups

import DocButton from '~/components/webkit/DocButton.vue';

**Device Groups** é uma capacidade de **Applications** que permite identificar os dispositivos que enviam requisições à sua aplicação e categorizá-los em grupos. Você pode usar Device Groups para definir comportamentos personalizados e definir políticas de cache com base nos grupos que você criar.

Usuários que acessam aplicações criadas com o [Azion Console](https://console.azion.com) enviam dados para a Azion através de HTTP *request headers*, ou cabeçalhos de requisição. O cabeçalho `User-Agent` guarda informações sobre o navegador do usuário, sistema operacional, versão e fabricante. O cabeçalho possui a seguinte sintaxe:

```yaml
User-Agent: <product>/<product-version> <comment>
```

Onde:

- `product`: identificador de produto.
- `product-version`: versão do produto.
- `comment`: informação sobre o sistema, plataformas e extensões.

Por exemplo, o seguinte cabeçalho `User-Agent` aponta para um acesso de um sistema operacional Windows usando o navegador Mozilla Firefox:

```yaml
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
```

O Device Groups funciona fazendo a correspondência do conteúdo do cabeçalho `User-Agent` com a expressão regular que você definiu para o grupo de dispositivos.

Por exemplo, você pode criar um grupo chamado *Mobile* cuja expressão regular deve corresponder ao conteúdo dentro do cabeçalho `User-Agent` que identifica dispositivos móveis. A seguinte expressão pode ser utilizada para identificar a maioria dos dispositivos móveis existentes:

```
(Mobile|iP(hone|od)|BlackBerry|IEMobile)
```

## Implementação

| Escopo | Recurso |
| --- | --- |
| Primeiros passos de Applications | [Primeiros passos](/pt-br/documentacao/produtos/build/applications/primeiros-passos/) |
| Sobre Rules Engine | [Rules Engine](/pt-br/documentacao/produtos/build/applications/rules-engine/) |
| Sobre Adaptive Delivery | [Adaptive Delivery](/pt-br/documentacao/produtos/build/applications/cache-settings/#adaptive-delivery) |

---

## Rules Engine

Quando você cria uma regra, você pode utilizar a variável `${device_group}` no **Rules Engine** para definir quais comportamentos sua aplicação deve executar para os grupos que você criou. Para fazer referência a um grupo de dispositivos, você pode adicionar seu nome à seção de argumentos depois de selecionar o operador de comparação desejado.

> Para usar esta variável, você deve habilitar [Application Accelerator](/pt-br/documentacao/produtos/build/applications/application-accelerator/).

O seguinte critério identifica se a requisição do usuário vem de um dispositivo que corresponda a um grupo de dispositivos chamado *Mobile*:

|  | Variável | Operador de comparação | Argumento |
| --- | --- | --- | --- |
| If | `${device_group}` | is equal to | Mobile |

O **Rules Engine** também pode ser usado para identificar dispositivos utilizando a variável `${http_user_agent}` diretamente, adicionando uma *string* ou expressão regular como argumento. Dessa forma, você pode identificar dispositivos específicos sem ter que dedicar um grupo de dispositivos a eles.

Os seguintes critérios identificam se a requisição do usuário vem de um dispositivo *iPhone*:

|  | Variável | Operador de comparação | Argumento |
| --- | --- | --- | --- |
| If | `${http_user_agent}` | matches | `(?i)iPhone` |

Saiba mais sobre o [Rules Engine](/pt-br/documentacao/produtos/build/applications/rules-engine/).

---

## Adaptive Delivery

Você pode referenciar um grupo de dispositivos existente para **Adaptive Delivery**. Você pode escolher um ou mais grupos para aplicar as mesmas políticas de Adaptive Delivery.

<DocButton href="/pt-br/documentacao/produtos/build/applications/cache-settings/#adaptive-delivery" label="Saiba mais sobre Adaptive Delivery" size="medium" />

---

## Priorização

**Device Groups** priorizam combinações em sequência, independentemente da ordem dentro do cabeçalho `User-Agent` da requisição. Dada a seguinte lista de grupos:

| Device Group | Expressão regular |
| --- | --- |
| Mobile | `(Mobile|Android)` |
| Tablet | `(iPad|Android)` |
| Desktop | `(Chrome|Mozilla)` |

Se a requisição for feita por um dispositivo que contenha `Android Tablet Mobile (Mozilla Firefox)` em seu cabeçalho, as palavras `Android` e `Mobile` corresponderão ao grupo *Mobile*.

Para uma requisição de um dispositivo `iPad Apple Webkit Mobile`, ele também será identificado como *Mobile* devido à presença de `Mobile` dentro da requisição, apesar do `iPad` corresponder ao grupo de dispositivos *Tablet*.

Ao estabelecer suas regras, lembre-se que cabeçalhos `User-Agent` para dispositivos diferentes podem conter as mesmas palavras. Por exemplo: `Google Chrome Android` provavelmente identifica um dispositivo móvel enquanto `Google Chrome Symbian` é um cabeçalho que identifica um computador; ambos utilizaram a mesma aplicação Google Chrome para acessar a aplicação. Certifique-se de ser preciso ao criar grupos de dispositivos.



---