> ## Documentation Index
> Fetch the complete documentation index at: https://auth0.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Client réseau personnalisé Auth0.Android

> Apprenez à fournir un client réseau personnalisé afin d’adapter les requêtes effectuées par le SDK Auth0 Android.

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****MASQUÉ*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

export const codeExample1 = `val netClient = DefaultClient.Builder()
    .connectTimeout(30)
    .readTimeout(30)
    .writeTimeout(30)
    .callTimeout(120)
    .build()

val account = Auth0.getInstance("{yourClientId}", "{yourDomain}")
account.networkingClient = netClient`;

export const codeExample2 = `val netClient = DefaultClient.Builder()
    .enableLogging(true)
    .build()

val account = Auth0.getInstance("{yourClientId}", "{yourDomain}")
account.networkingClient = netClient`;

export const codeExample3 = `val netClient = DefaultClient.Builder()
    .defaultHeaders(mapOf("YOUR_HEADER_NAME" to "YOUR_HEADER_VALUE"))
    .build()

val account = Auth0.getInstance("{yourClientId}", "{yourDomain}")
account.networkingClient = netClient`;

export const codeExample5 = `val netClient = DefaultClient.Builder()
    .enableLogging(true)
    .logger(HttpLoggingInterceptor.Logger { message -> Log.d("Auth0Http", message) })
    .build()`;

export const codeExample4 = `class CustomNetClient : NetworkingClient {
    override fun load(url: String, options: RequestOptions): ServerResponse {
        // Créer et exécuter la requête vers l’URL spécifiée avec les options fournies
        val response = // ...

        // Retourner un ServerResponse à partir des données de réponse reçues
        return ServerResponse(responseCode, responseBody, responseHeaders)
    }
}

val account = Auth0.getInstance("{yourClientId}", "{yourDomain}")
account.networkingClient = netClient`;

Vous pouvez configurer la classe Auth0 avec un `NetworkingClient` afin de personnaliser la façon dont le SDK effectue ses requêtes. Le client par défaut prend en charge des valeurs de délai d’expiration personnalisées, des en-têtes envoyés sur toutes les requêtes ainsi que la journalisation des requêtes et des réponses pour le débogage hors production. Pour des cas d’utilisation plus avancés, vous pouvez fournir votre propre implémentation de `NetworkingClient`.

<h2 id="configure-timeouts">
  Configurer les délais d’expiration
</h2>

<AuthCodeBlock children={codeExample1} language="kotlin" />

<h2 id="configure-logging">
  Configurer la journalisation
</h2>

<AuthCodeBlock children={codeExample2} language="kotlin" />

Vous pouvez également fournir un logger personnalisé pour contrôler l'endroit où les logs sont écrits.

<AuthCodeBlock children={codeExample5} language="kotlin" />

<h2 id="set-additional-headers-for-all-requests">
  Définir des en-têtes supplémentaires pour toutes les requêtes
</h2>

<AuthCodeBlock children={codeExample3} language="kotlin" />

<h2 id="configure-advanced-networking">
  Configurer le réseau avancé
</h2>

Pour une configuration réseau avancée, fournissez une implémentation personnalisée de `NetworkingClient`. Cela est utile si vous souhaitez réutiliser votre propre client réseau, configurer un proxy, etc.

<AuthCodeBlock children={codeExample4} language="kotlin" />
