# Agent config

## Prérequis (auto-hébergé)

| Version GLPI | PHP minimum | Recommandé |
| ------------ | ----------- | ---------- |
| 10.0.x       | 8.1         | 8.2        |
| 11.0.x       | 8.2         | 8.4        |

{% hint style="info" %}
Une souscritpion [GLPI Network BASIC](https://services.glpi-network.com/#offers) (ou supérieur) est requis. Ce plugin est également disponible pour toutes les instances [Cloud de GLPI Network](https://glpi-network.cloud).
{% endhint %}

***

## Limitation connue

### Version concernée

Depuis Android 10 (niveau d'API 29)

### Limitation

Depuis Android 10 (niveau d'API 29), Google a renforcé les restrictions d'accès aux informations sensibles des appareils, telles que l'IMEI et le numéro de série, afin de protéger la vie privée des utilisateurs. Ces modifications s'inscrivent dans le cadre des efforts de Google pour limiter l'accès aux données sensibles et empêcher les abus d'autorisation par les applications.

Voici pourquoi nous ne pouvons plus récupérer directement ces informations :

#### **1. IMEI et restrictions d'autorisation**

* L'IMEI est considéré comme une information sensible et privée.
* Depuis Android 10, seules les applications disposant de l'autorisation spéciale **`READ_PRIVILEGED_PHONE_STATE`** peuvent accéder à l'IMEI. Cette autorisation est uniquement disponible pour les applications système ou celles préinstallées par le fabricant.
* Les applications tierces, même disposant de l'autorisation **`READ_PHONE_STATE`**, ne peuvent plus accéder à l'IMEI.

#### **2. Numéro de série**&#x20;

* L'accès au numéro de série est également restreint. Avant Android 8 (Oreo), les applications pouvaient récupérer le numéro de série via **`Build.SERIAL`**.
* Depuis Android 8, l'accès au numéro de série requiert l'autorisation **`READ_PHONE_STATE`**.
* À partir d'Android 10, seules les applications système peuvent accéder au numéro de série.

Une application système est installée directement dans la partition système d'un appareil Android. Elle fait partie intégrante du système d'exploitation (intégrée directement par le fabricant au firmware OEM) et bénéficie de privilèges spécifiques que les applications standard (installées par l'utilisateur) ne possèdent pas.

Il est techniquement possible d'installer une application en tant qu'application système. Cependant, cela implique des conditions et des compétences techniques particulières :

* **Accès root requis** :\
  L'appareil cible doit être "rooté" pour permettre l'accès et la modification de la partition système, où sont installées les applications système.
* **Utilisation d'ADB** :\
  Cette méthode requiert des connaissances de base de l'outil Android Debug Bridge (ADB) pour copier et configurer correctement le fichier APK dans le répertoire système de l'appareil.

Nous sommes pleinement conscients des limitations imposées par Android concernant l'accès aux informations sensibles (telles que l'IMEI ou le numéro de série) depuis l'agent d'inventaire.

Afin de pallier ces contraintes et de garantir la transmission correcte des données par l'agent, nous explorons actuellement plusieurs solutions alternatives, notamment :

* **Collaboration avec les fabricants (OEM)** :\
  Nous envisageons des partenariats avec les fabricants pour intégrer notre application directement dans le firmware en tant qu'application système, ce qui nous permettrait d'accéder aux API nécessaires.
* **Obtention des autorisations requises auprès de Google** :\
  Nous analysons les procédures permettant d'obtenir des autorisations spécifiques (telles que READ\_PRIVILEGED\_PHONE\_STATE) tout en respectant les politiques de confidentialité et de sécurité de Google.
* **Solutions techniques alternatives** :\
  Nous explorons également des solutions techniques telles que l'utilisation de profils d'administrateur via Android Enterprise ou l'utilisation d'identifiants non sensibles pouvant remplacer l'IMEI ou le numéro de série pour nos besoins spécifiques.

***

## Installer le plugin

* Allez sur la marketplace. Téléchargez et installez le plugin **Agent config**.

<div align="left"><figure><img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2FejZZ00nbuR4BFnwLleXM%2Finstall_plugin.png?alt=media&#x26;token=8049c159-b6d7-4ff0-975c-9efed61417c1" alt="images/install_plugin.png"><figcaption></figcaption></figure></div>

***

## Configuration du plugin

Dans **`Configuration`** > **`Générale`** > **`Configuration de l'agent GLPI`**, sélectionnez les options souhaitées :

* Par défaut, l'URL de l'inventaire est indiquée
* Pour sécuriser votre instance et limiter les retours de vos appareils mobiles, vous pouvez renseigner un **login** et un **mot de passe** pour chaque appareil mobile à inventorier
* Vous pouvez utiliser un **tag d'entité** (choisissez **Oui** et indiquez votre **tag** si besoin)
* Choisissez le **type d'asset** par défaut (ordinateurs ou téléphones, cette information indique le type d'appareil par défaut, mais peut être modifié individuellement depuis chaque appareil)
* Afficher le **QR Code** (sur la page centrale)
* Afficher le **Deeplink** (sur la page centrale)
* Gérer l'**inventaire automatique et la fréquence** pour android

<div align="left"><figure><img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-6f1a9d61cb58ba3209b5c2c1a59d73c5831bc9f8%2Fsetup_plugin.png?alt=media" alt="images/setup_plugin.png"><figcaption></figcaption></figure></div>

### Page centrale

* Sur **`Accueil`** > **`Configuration de l'agent GLPI`**, utilisez le Deep link ou le QR Code pour préconfigurer l'agent :

<div align="left"><figure><img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-1c597d02b0f5a93f0cedcc6f84f3e1991bb03e32%2Fasset.png?alt=media" alt="images/asset.png"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Lors d'une réinitialisation d'usine du téléphone, le numéro de série généré automatiquement par l'agent change. Vous pouvez utiliser le **Deep Link** / **QR Code** pour configurer l'agent avec le numéro de série précédemment généré et inventorié dans GLPI.
{% endhint %}

***

## Configuration de l'appareil mobile

* Téléchargez l'**Agent GLPI** sur le Google Store

<div align="left"><figure><img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-2ba1cb275e8220f17c4ca641f7fc53ebd0372857%2Finstall_agent.png?alt=media" alt="images/install_agent.png"><figcaption></figcaption></figure></div>

### Avec Deep Link

* Allez sur GLPI avec le navigateur web de votre appareil
* Cliquez sur le DeepLink

<div align="left"><figure><img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-b929d42bd41bbb2a6d00254ee78315fa82a9ab4b%2Fdeeplink.png?alt=media" alt="images/deeplink.png" width="374"><figcaption></figcaption></figure></div>

* L'application s'ouvrira et pré-remplira les champs pour ajouter un serveur
* Cliquez ensuite sur **Ajouter un serveur**

<div align="left"><figure><img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-e1da0e24a85849317ebfa4eaad449c69a256aca4%2FlistserversFilledField.png?alt=media" alt="images/listserversFilledField2.png" width="374"><figcaption></figcaption></figure></div>

### Avec QR Code

* Ouvrez **GLPI Agent** sur votre appareil
* Allez dans **`Paramètres avancés`** > **`Ouvrir la liste des serveurs`** > **`Ajouter des serveurs`**
* Cliquez sur le bouton **QR Code**
* Scannez le QR Code

<div align="left"><figure><img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-2ceb9b0cab2b56087557a6f77537f8155c3f0d9d%2Flistservers.png?alt=media" alt="images/listservers.png" width="374"><figcaption></figcaption></figure></div>

* L'application pré-remplira les champs pour ajouter un serveur
* Ajoutez ensuite le serveur.

<div align="left"><figure><img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-e1da0e24a85849317ebfa4eaad449c69a256aca4%2FlistserversFilledField.png?alt=media" alt="images/listserversFilledField2.png" width="374"><figcaption></figcaption></figure></div>

### Catégorie Globale

* Dans l'appareil mobile, **`Menu`** > **`Paramètres avancés`** > **`Catégorie globale`**, sélectionnez/désélectionnez les informations que vous souhaitez inventorier

<div align="left"><figure><img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-0e935eb53228a27f7aaa7a2b12febea8347c80ca%2Fglobal_category.png?alt=media" alt="images/global_category.png" width="281"><figcaption></figcaption></figure></div>

***

## Résolution de l'inventaire automatique (Android)

### 1. Problématique

**Symptôme :** L'inventaire manuel fonctionne correctement, mais l'inventaire automatique (en fonction de la fréquence paramétrée) ne se déclenche pas toujours. L'appareil ne remonte pas d'informations dans GLPI après la première synchronisation manuelle.

**Cause :** Sur les versions récentes d'Android (12 à 16), le système d'exploitation applique une gestion stricte de l'énergie. Par défaut, Android place les applications en mode "Optimisé", ce qui restreint ou coupe les processus d'arrière-plan pour économiser la batterie. GLPI Android Inventory agent est alors empêché de réveiller l'appareil pour envoyer ses données.

### 2. Solution : Configuration des autorisations

Pour garantir la remontée automatique des inventaires, il peut-être nécessaire de lever les restrictions logicielles liées à l'économie d'énergie pour GLPI Android Inventory agent.

**Procédure de résolution :**

1. Sur le téléphone, rendez-vous dans les **Paramètres**.
2. Allez dans la section **Applications** (ou Gestion des applications).
3. Sélectionnez l'application **GLPI Android Inventory agent**.
4. Cliquez sur l'onglet **Batterie** (ou Utilisation de la batterie).
5. Modifiez le réglage par défaut pour sélectionner l'option **"Non restreinte"** (Unrestricted).

### 3. Informations complémentaires

* **Versions concernées :** Android 12, 13, 14, 15 et 16.
* **Note sur le déploiement :** Pour une flotte importante, il est recommandé de pousser ce paramètre via votre solution de MDM (Mobile Device Management) si celle-ci le permet, afin d'éviter une configuration manuelle sur chaque poste.

***

## Contribution

* Ouvrez un ticket pour chaque bug/fonctionnalité afin qu'il puisse être discuté
* Suivez les [directives de développement](http://glpi-developer-documentation.readthedocs.io/en/latest/plugins/index.html)
* Référez-vous au processus [GitFlow](http://git-flow.readthedocs.io/) pour le branching
* Travaillez sur une nouvelle branche sur votre propre fork
* Ouvrez une PR qui sera revue par un développeur
