Huawei Celia commande de la nourriture ? Comment les App Links acheminent le contexte

opoinstall
2026-09-23
5 min read

Huawei Celia commande de la nourriture ? Huawei a confirmé l'intégration en production de l'agent Taobao Instant Commerce directement dans l'assistant système Celia le 22 septembre 2026. Propulsé par le déploiement architectural d'HarmonyOS 7, ce dispositif permet aux utilisateurs d'exécuter des flux de livraison complets — de la découverte de marchands locaux et du filtrage des menus jusqu'à la constitution automatisée du panier et la validation du paiement — entièrement par le biais de commandes en langage naturel. Lorsque Huawei Celia commande de la nourriture via des services de plateforme en arrière-plan, cela met en évidence une transition structurelle profonde dans l'informatique mobile : la découverte de services contourne les lanceurs d'applications traditionnels au profit d'un routage d'intentions au niveau du système. Pour les architectes logiciels et les équipes d'ingénierie mobile, ce réalignement architectural démontre pourquoi un routage système vérifié, des transferts d'état de session résilients et des mécanismes de routage par liens profonds (deep links) vérifiés sont essentiels pour préserver le contexte transactionnel à travers des environnements clients hétérogènes.

Évolution chronologique et jalons d'un écosystème intelligent

La disponibilité opérationnelle de la commande de repas automatisée au sein de Celia reflète un changement de paradigme plus large et pluriannuel dans le paysage de l'informatique mobile. Tout au long de l'ère des smartphones, l'interaction numérique du consommateur s'est strictement conformée à une topologie centré sur les applications. Les utilisateurs déverrouillaient des terminaux physiques, identifiaient manuellement des icônes d'applications de marques, parcouraient des menus visuels en répertoire, confirmaient des variables de ligne d'article et concluaient les paiements au sein de bacs à sable logiciels isolés. Bien que fonctionnel, ce modèle historique imposait une charge cognitive et opérationnelle considérable aux utilisateurs naviguant dans des flux multi-applications fragmentés.

En un coup d'œil

  • Exécution de commandes par la voix : L'intégration commerciale entre l'assistant Celia d'HarmonyOS 7 et l'agent Taobao Instant Commerce d'Alibaba permet de commander de la nourriture de bout en bout via des commandes vocales naturelles, sans navigation manuelle dans des vitrines d'applications autonomes.
  • Échelle de l'écosystème HarmonyOS : Les données de l'écosystème Huawei pour 2026 montrent que les appareils actifs exécutant HarmonyOS 6 et HarmonyOS 7 ont dépassé les 85 millions, tandis que les mises à jour précédentes de la plateforme ont confirmé plus de 11 millions de développeurs enregistrés et plus de 400 000 applications et services disponibles ; la couverture des conférences de l'industrie a en outre fait état de plus de 200 millions de téléchargements d'applications par jour.
  • Infrastructure d'agents unifiée : Le déploiement s'inscrit dans le cadre plus large de l'écosystème d'agents d'HarmonyOS 7, bâti autour de l'HarmonyOS Agent Framework 2.0, utilisant une planification hybride sur l'appareil et dans le cloud pour coordonner les intentions du système à travers 2 100 fonctionnalités de la plateforme, 500 compétences (Skills) partenaires et plus de 2 000 agents spécialisés par domaine.

L'introduction d'agents conversationnels unifiés a commencé à résoudre cette friction en interceptant l'intention à la racine du système d'exploitation. Comme le documente la présentation officielle de la plateforme HarmonyOS, Huawei a positionné son assistant au niveau du système non seulement comme un écouteur vocal passif, mais comme une couche de coordination pilotée par l'intention. Tout au long de 2026, Huawei a détaillé la façon dont la plateforme a évolué au-delà de la simple compatibilité binaire vers une co-création architecturale collaborative. Fonctionnant sur une empreinte active dépassant 85 millions d'appareils HarmonyOS 6 et HarmonyOS 7, la fondation distribuée de la plateforme héberge désormais plus de 400 000 applications et services de plateforme disponibles.

Un dirigeant de Huawei présentant la feuille de route architecturale d'HarmonyOS 7 lors de Huawei Connect 2026 à Shanghai

La manifestation concrète de cette infrastructure est apparue à travers la sortie grand public de l'agent Taobao Instant Commerce. Plutôt que d'exiger des utilisateurs qu'ils lancent manuellement un logiciel de livraison de nourriture dédié, Celia orchestre dynamiquement l'interaction. Un utilisateur formulant une demande ambiguë — telle que demander des plats épicés de haute qualité ou commander un double expresso glacé avec un supplément de café et peu de glace — déclenche la résolution autonome des entités. Le cadre des agents analyse la géolocalisation contextuelle, récupère les métriques de disponibilité des marchands, applique les préférences alimentaires spécifiques de l'utilisateur, associe automatiquement les bons de réduction éligibles et affiche une carte de paiement interactive à l'écran.

Interface de l'assistant Celia sur HarmonyOS affichant des cartes marchandes contextuelles et des recommandations alimentaires localisées

Dans les versions de production actuelles, la recherche de nourriture, la sélection des plats, la confirmation de l'adresse et la validation du paiement final s'exécutent entièrement au sein des cartes conversationnelles de Celia. Cependant, dans des flux d'écosystème plus larges, des limites opérationnelles finissent inévitablement par émerger. Si un flux partenaire doit ensuite transférer l'utilisateur vers un client natif pour une interaction non prise en charge à l'intérieur de la surface de l'assistant — telle qu'une résolution avancée de litiges, des interactions de fidélité marchande personnalisées ou des modifications de commande complexes — l'application réceptrice doit restaurer le contexte pertinent en toute sécurité. L'intégrité technique de cette transition détermine le succès ultime du parcours utilisateur.

Interface du hub d'agents intelligents Celia sur HarmonyOS 7 montrant des compétences marchandes intégrées et des catégories de services

Analyse technique approfondie et complexité des transferts de contexte

Au-delà de la présentation conversationnelle, le transfert d'état structuré entre un assistant de système d'exploitation et un client natif tiers présente des obstacles architecturaux complexes. Les assistants au niveau du système fonctionnent comme des environnements d'exécution coordonnés, évaluant l'intention de l'utilisateur et distribuant des charges utiles structurées. À l'inverse, les logiciels clients commerciaux reposent sur des architectures pilotées par l'interface utilisateur et gérées par des cycles de vie de composants distincts.

+-----------------------------------------------------------------------------------------+
|                  SÉQUENCE DE TRANSFERT DE L'ASSISTANT SYSTÈNE VERS L'APPLICATION NATIVE  |
+-----------------------------------------------------------------------------------------+
|                                                                                         |
|  [ Entrée vocale utilisateur ] ---> "Commander un double expresso glacé avec peu de glace"|
|                                                                                         |
|  [ Assistant OS (Celia) ]                                                               |
|         |                                                                               |
|         +---> HarmonyOS Agent Framework 2.0 (Résolution d'intention)                    |
|         |                                                                               |
|         +---> Liaison géolocalisation & préférences enregistrées (Sélection du marchand)|
|         |                                                                               |
|         v                                                                               |
|  [ Agent Partenaire (Taobao Instant Commerce) ]                                         |
|         |                                                                               |
|         +---> Génère un pointeur éphémère opaque : { handoff_id: "hnd_9921_alpha" }      |
|         |     (État canonique conservé de manière sécurisée sur les serveurs backend)   |
|         |                                                                               |
|         v                                                                               |
|  [ Limite conditionnelle : Exécution complexe ou passage au mode natif requis ]          |
|         |                                                                               |
|         +---------------------------------------+---------------------------------------+
|         |                                       |                                       |
|         v                                       v                                       |
|  ( Schéma URI personnalisé )           ( Protocole App Link vérifié )                   |
|         |                                       |                                       |
|  * Aucune vérification de domaine      * Propriété du domaine vérifiée via Asset Links|
|  * Risque élevé de collision de schémas* Risque de collision sensiblement atténué       |
|  * Peut afficher un sélecteur de choix * Redirige directement vers Activity / UIAbility |
|         |                                       |                                       |
|         v                                       v                                       |
|  [ Cycle de vie de l'application réceptrice : Restauration de la scène cible ]          |
|  * L'application extrait le handoff_id opaque de l'URI HTTPS validée                    |
|  * Transmet le jeton de manière asynchrone au service de validation backend autorisé     |
|  * Le backend vérifie l'expiration, le nonce à usage unique et la liaison de compte   |
|  * Le serveur renvoie le marchand canonique, le SKU et l'état de routage cible          |
|  * Le client restitue en toute sécurité l'interface de destination sans état de confiance|
|                                                                                         |
+-----------------------------------------------------------------------------------------+

Sérialisation des intentions et échange de jetons sécurisés

Lorsqu'un assistant coordonne une commande, il traite les requêtes de haut niveau en paramètres structurés. Si un flux d'interaction nécessite la transition vers une application native autonome, ce contexte doit être transféré en toute sécurité. Les schémas d'URI personnalisés (Custom URI Schemes) et les App Links vérifiés peuvent tous deux transporter des paramètres de chemin et de requête ; toutefois, leurs garanties de sécurité diffèrent fondamentalement.

Les schémas d'URI personnalisés manquent de vérification de la propriété du domaine. Toute application installée sur le système d'exploitation peut déclarer un schéma identique, créant des risques de collision où des applications non fiables interceptent les requêtes de navigation. À l'inverse, les App Links vérifiés établissent la propriété du domaine grâce à des manifestes de vérification hébergés sur le serveur.

Du point de vue de l'architecture défensive, les informations d'identification sensibles ne doivent jamais être placées dans les URL. Bien que les identifiants publics courants, tels que les articles de catalogue ou les noms de marchands, apparaissent fréquemment dans les liens Web, les applications clientes doivent traiter tous les paramètres commerciaux fournis par les URL comme des indices de transport non fiables plutôt que comme un état de transaction faisant autorité. Permettre aux clients natifs de faire aveuglément confiance aux valeurs de requête des URI expose les tunnels de réalisation à des falsifications de paramètres et à des attaques par relecture. Les conceptions de sécurité modernes privilégient la transmission d'une référence opaque de courte durée (telle qu'un handoff_id éphémère). Lors du lancement, le client natif échange ce jeton opaque avec son service backend sécurisé sur un canal authentifié. Le serveur valide l'expiration, l'identité de l'appelant et l'idempotence à usage unique avant de renvoyer l'état de transaction canonique, empêchant toute modification non autorisée côté client.

Appareil mobile affichant l'activation de l'assistant vocal et la carte d'analyse d'intention dynamique

Inadéquations du cycle de vie d'exécution

La transition d'un assistant au niveau du système vers un client natif doit s'intégrer au cycle de vie sous-jacent de l'application mobile. Dans les environnements Android, ce processus est centré sur le cycle de vie des Activity ; dans HarmonyOS, il implique l'architecture UIAbility. Lorsqu'une intention système déclenche une instance d'application déjà en cours d'exécution, la plateforme hôte n'invoque pas les méthodes d'initialisation standard à partir de zéro. Elle achemine plutôt la requête entrante vers des gestionnaires d'événements spécifiques de l'arrière-plan vers le premier plan.

Si une équipe d'ingénierie implémente la logique de routage exclusivement dans les hooks du cycle de vie d'entrée (tels que onCreate), toute invocation se produisant alors que l'application réside dans un état de mémoire suspendu contournera les routines d'initialisation. Le système d'exploitation met l'application au premier plan, mais l'intention de navigation entrante est abandonnée. En conséquence, l'utilisateur se retrouve sur le tableau de bord d'accueil générique plutôt que sur la vue marchande souhaitée, entraînant une perte de contexte ou la nécessité d'une reconstruction manuelle.

+-----------------------------------------------------------------------------------------+
|                 COMPARAISON DES MÉCANISMES DE ROUTAGE SELON LES LIMITES D'EXÉCUTION       |
+-----------------------+------------------------------+----------------------------------+
| Métrique architecturale| Schéma URI personnalisé      | App Link vérifié                 |
+-----------------------+------------------------------+----------------------------------+
| Vérification domaine  | Aucune                       | Vérifiée via digital asset links |
| Invite de choix       | Peut afficher le sélecteur   | Redirige généralement directement|
| Support des paramètres| Chemins et requêtes complets | Chemins et requêtes complets     |
| Risque de collision   | Élevé (nommage non restreint)| Faible (lié au domaine vérifié)  |
| Restauration contexte | Doit être implémentée par l'app| Doit être implémentée par l'app  |
| Gestion cycle de vie  | Doit être implémentée par l'app| Doit être implémentée par l'app  |
+-----------------------+------------------------------+----------------------------------+

Ruptures de contexte au-delà de la frontière d'installation de l'application

Le défi structurel s'accentue lorsque le consommateur n'a pas l'application partenaire native installée sur son matériel physique. Alors que les assistants système comme Celia exécutent les fonctionnalités partenaires via des cartes rendues dans le cloud, les boucles de conversion secondaires — telles que l'échange de récompenses de fidélité, le suivi détaillé des commandes ou la gestion des litiges du service client — encouragent souvent l'installation d'une application locale.

Une transition générique du Web vers la boutique d'applications ne transmet pas automatiquement l'état d'URL défini arbitrairement par l'application lors de son premier lancement natif. Des mécanismes spécifiques à la plateforme sont requis lorsque ce contexte doit survivre à l'installation. Sur Android, l'API Google Play Install Referrer fournit un mécanisme pour transmettre des paramètres de campagne et de parrainage aux applications nouvellement installées. Au sein de l'écosystème Huawei, AppGallery Connect App Linking offre des fonctionnalités natives différées, acheminant les utilisateurs vers AppGallery lorsqu'ils ne sont pas installés et restaurant les paramètres de destination in-app dès le premier lancement. Lors d'opérations menées sur des canaux de distribution Web et multi-boutiques hétérogènes, les équipes s'appuient sur une infrastructure de routage différé pour réconcilier l'état pré-installation avec les lancements d'applications à froid.

Bonnes pratiques et normes d'implémentation de référence

Pour éliminer la perte de contexte lors d'une exécution inter-surfaces, les équipes d'ingénierie mobile doivent mettre en œuvre des architectures de routage standardisées et cryptographiquement vérifiées. En ancrant la logique de navigation à des domaines de plateformes vérifiables et en structurant les gestionnaires du cycle de vie des clients, les applications peuvent ingérer de manière fiable des paramètres externes et restaurer l'état d'exécution.

+-----------------------------------------------------------------------------------------+
|                  ARCHITECTURE DE VÉRIFICATION CRYPTOGRAPHIQUE DE DOMAINE                |
+-----------------------------------------------------------------------------------------+
|                                                                                         |
|  [ Hôte Web Développeur : https://order.example.com ]                                   |
|         |                                                                               |
|         +---> Héberge : /.well-known/assetlinks.json (Android Digital Asset Links)      |
|               - namespace: "android_app"                                                |
|               - package_name: "com.example.storeapp"                                    |
|               - sha256_cert_fingerprints: [ "14:6D:E9:DE:..." ]                         |
|                                                                                         |
|  [ Pipeline de vérification du système Android ]                                        |
|         |                                                                               |
|         +---> Manifeste client : <intent-filter android:autoVerify="true">            |
|         +---> Le système interroge /.well-known/assetlinks.json via HTTPS               |
|         +---> Vérifie que l'empreinte du certificat correspond à la clé de signature    |
|         +---> Achemine directement les URL https://order.example.com vers le client natif|
|                                                                                         |
|  [ Pipeline d'App Linking Natif HarmonyOS ]                                             |
|         |                                                                               |
|         +---> Le module client module.json5 configure les compétences avec domainVerify: true|
|         +---> Déclare les actions : ["ohos.want.action.viewData"], entités : ["browsable"]|
|         +---> Invoqué par programmation via UIAbilityContext.openLink()                  |
|                                                                                         |
+-----------------------------------------------------------------------------------------+

Vérification cryptographique de domaine via des App Links standardisés

Les environnements mobiles modernes reposent sur une confiance bidirectionnelle vérifiable entre un domaine Internet et un binaire d'application pour garantir un routage sécurisé. Android y parvient grâce aux App Links pris en charge par les déclarations Digital Asset Links, tandis qu'iOS utilise les Universal Links ancrés aux fichiers Apple App Site Association.

Lors de l'installation du paquet ou des cycles de mise à jour sur Android, le système d'exploitation examine les associations de domaines déclarées. S'il est configuré avec android:autoVerify="true", le système d'exploitation mobile interroge le domaine cible via une connexion HTTPS sécurisée :

[https://order.example.com/.well-known/assetlinks.json](https://order.example.com/.well-known/assetlinks.json)

Lorsque l'empreinte SHA-256 déclarée dans l'instruction Digital Asset Links distante correspond au certificat de signature du paquet d'application installé, le système d'exploitation enregistre le domaine. Les invocations de liens ultérieures s'acheminent normalement directement vers le client natif sans boîtes de dialogue de désambiguïsation, sous réserve des paramètres de liens système de l'utilisateur.

Dans l'ingénierie des applications natives HarmonyOS, les développeurs configurent la vérification de domaine à l'intérieur du fichier de configuration module.json5 en déclarant la propriété domainVerify dans le bloc de compétences de l'UIAbility, gérant les déclencheurs de navigation via les API openLink().

<!-- AndroidManifest.xml: Déclaration des App Links vérifiés -->
<activity
    android:name=".routing.ContextRoutingActivity"
    android:exported="true"
    android:launchMode="singleTask">
    
    <!-- Filtre d'intention pour la vérification de domaine cryptographique -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        
        <!-- Points de terminaison de domaine autorisés appartenant au développeur -->
        <data android:scheme="https" />
        <data android:host="order.example.com" />
        <data android:pathPrefix="/checkout/handoff" />
    </intent-filter>
</activity>

Gestion des hooks de cycle de vie avec état dans les clients natifs

Une fois l'identité cryptographique établie, l'application doit capturer, désérialiser et acheminer les paramètres contextuels à travers tous les états d'exécution. Pour garantir que les paramètres survivent aux transitions de l'arrière-plan vers le premier plan, les développeurs doivent lier la logique de routage à la fois aux gestionnaires de lancement principaux et aux rappels d'intentions réactifs.

Dans les architectures Android, cela nécessite le traitement des intentions à la fois dans onCreate() et onNewIntent(). Dans les architectures HarmonyOS utilisant le modèle Stage, les ingénieurs implémentent la gestion correspondante dans les hooks onCreate() et onNewWant() de la UIAbility désignée.

Pour assurer une défense en profondeur, les URI entrants doivent subir une validation stricte du schéma, de l'hôte, du chemin et des paramètres. Le client doit appliquer une liste blanche (allowlist) d'hôtes et de chemins de confiance, rejeter les clés de requête inattendues et valider les contraintes de format. De manière cruciale, le client ne doit jamais traiter les entités commerciales à l'intérieur d'une URL comme une vérité authentifiée ; au lieu de cela, l'application transmet uniquement l'identifiant de référence opaque validé à son service backend, attendant l'autorisation cryptographique et la résolution de l'état canonique avant d'exécuter la navigation vers la destination.

package com.example.storeapp.routing;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.regex.Pattern;

public class ContextRoutingActivity extends AppCompatActivity {

    private static final String ALLOWED_SCHEME = "https";
    private static final String ALLOWED_HOST = "order.example.com";
    private static final String EXACT_PATH = "/checkout/handoff";
    private static final String PATH_PREFIX = "/checkout/handoff/";

    // Expression régulière littérale non échappée : trait d'union placé à la fin de la classe sans échappement par contre-oblique
    private static final Pattern SAFE_ID_PATTERN = Pattern.compile("^[a-zA-Z0-9_-]{1,64}$");

    private final ExecutorService backgroundExecutor = Executors.newSingleThreadExecutor();
    private final Handler mainThreadHandler = new Handler(Looper.getMainLooper());
    private ProgressBar loadingIndicator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setupLoadingInterface();
        handleIncomingRoutingIntent(getIntent());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        handleIncomingRoutingIntent(intent);
    }

    private void setupLoadingInterface() {
        loadingIndicator = new ProgressBar(this);
        loadingIndicator.setIndeterminate(true);
        setContentView(loadingIndicator);
    }

    private void handleIncomingRoutingIntent(Intent intent) {
        if (intent == null || !Intent.ACTION_VIEW.equals(intent.getAction())) {
            navigateToDefaultDashboard();
            return;
        }

        Uri uri = intent.getData();
        if (!isUriValidAndSafe(uri)) {
            navigateToDefaultDashboard();
            return;
        }

        // Extraire exclusivement l'identifiant de référence de transfert opaque
        String handoffId = uri.getQueryParameter("handoff_id");
        if (handoffId != null) {
            loadingIndicator.setVisibility(View.VISIBLE);
            initiateSecureHandoffExchange(handoffId);
        } else {
            navigateToDefaultDashboard();
        }
    }

    private boolean isUriValidAndSafe(Uri uri) {
        if (uri == null || !uri.isHierarchical()) {
            return false;
        }

        // Valider le schéma, l'hôte et le chemin par rapport à une liste blanche stricte
        if (!ALLOWED_SCHEME.equalsIgnoreCase(uri.getScheme())) {
            return false;
        }
        if (!ALLOWED_HOST.equalsIgnoreCase(uri.getHost())) {
            return false;
        }
        String path = uri.getPath();
        if (path == null || (!path.equals(EXACT_PATH) && !path.startsWith(PATH_PREFIX))) {
            return false;
        }

        // Appliquer une liste blanche stricte des clés de requête : seul handoff_id est autorisé
        Set<String> parameterNames = uri.getQueryParameterNames();
        if (parameterNames == null || parameterNames.size() != 1 || !parameterNames.contains("handoff_id")) {
            return false;
        }

        String handoffId = uri.getQueryParameter("handoff_id");
        return handoffId != null && SAFE_ID_PATTERN.matcher(handoffId).matches();
    }

    private void initiateSecureHandoffExchange(@NonNull String handoffId) {
        backgroundExecutor.execute(() -> {
            try {
                // Modèle d'autorisation à échec fermé (fail-closed) : le client transmet le jeton opaque au backend
                // La navigation s'exécute exclusivement sur un état de serveur authentifié et non nul
                CanonicalHandoffState canonicalState = queryBackendHandoffService(handoffId);

                mainThreadHandler.post(() -> {
                    if (!isFinishing() && !isDestroyed()) {
                        if (canonicalState != null && canonicalState.isValid()) {
                            dispatchToVerifiedCheckout(canonicalState);
                        } else {
                            handleValidationFailure("Session expirée ou état de transaction invalide");
                        }
                    }
                });
            } catch (Exception e) {
                mainThreadHandler.post(() -> {
                    if (!isFinishing() && !isDestroyed()) {
                        handleValidationFailure("Échec de la communication réseau lors de l'autorisation");
                    }
                });
            }
        });
    }

    @WorkerThread
    private CanonicalHandoffState queryBackendHandoffService(String handoffId) throws IOException {
        // Contrat de production : envoi d'une requête TLS authentifiée via la pile réseau du client
        // (par ex., OkHttp / Retrofit) pour échanger handoffId contre les détails du marchand et du SKU canoniques.
        // L'implémentation d'exemple échoue par défaut (fermé) tant qu'elle n'est pas connectée au service API de production.
        throw new UnsupportedOperationException("L'implémentation en production nécessite un point de terminaison d'échange backend authentifié");
    }

    private void dispatchToVerifiedCheckout(CanonicalHandoffState state) {
        Intent checkoutIntent = new Intent(this, CheckoutActivity.class);
        checkoutIntent.putExtra("EXTRA_CANONICAL_MERCHANT_ID", state.merchantId);
        checkoutIntent.putExtra("EXTRA_CANONICAL_SKU", state.sku);
        startActivity(checkoutIntent);
        finish();
    }

    private void handleValidationFailure(String message) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
        navigateToDefaultDashboard();
    }

    private void navigateToDefaultDashboard() {
        Intent homeIntent = new Intent(this, MainActivity.class);
        startActivity(homeIntent);
        finish();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        backgroundExecutor.shutdown();
    }

    // Structure de données canonique immuable contenant l'état commercial vérifié par le serveur
    public static class CanonicalHandoffState {
        public final String merchantId;
        public final String sku;
        public final boolean authorized;

        public CanonicalHandoffState(String merchantId, String sku, boolean authorized) {
            this.merchantId = merchantId;
            this.sku = sku;
            this.authorized = authorized;
        }

        public boolean isValid() {
            return authorized && merchantId != null && sku != null;
        }
    }
}

En abstrayant l'analyse syntaxique des URI et la validation asynchrone dans un délégué de routage découplé, l'application isole la validation de sécurité du rendu visuel des vues. Le contrôleur de navigation résout la référence de transfert opaque auprès du backend authentifié, valide l'état canonique renvoyé et ne procède au routage vers la vue de réalisation qu'à ce moment-là.

Résolution des ruptures de contexte au-delà de la frontière d'installation

Lorsque la découverte d'un service prend naissance au sein d'un assistant IA et conduit au téléchargement d'une application, la préservation de l'intention de l'utilisateur à travers la barrière de l'installation nécessite une restauration des paramètres différée. Les liens traditionnels échouent ici car les répertoires d'applications publics agissent comme des passerelles sans état.

+-----------------------------------------------------------------------------------------+
|               ARCHITECTURE DE LIENS DIFFÉRÉS & CYCLE DE VIE DE RÉcupération             |
+-----------------------------------------------------------------------------------------+
|                                                                                         |
|  1. Enregistrement du point de contact pré-installation                                 |
|     * L'utilisateur interagit avec le lien de parrainage de l'assistant ou la carte H5  |
|     * Le point de terminaison Web enregistre le contexte de pré-installation éligible   |
|                                                                                         |
|  2. Transition vers la boutique de la plateforme                                        |
|     * Redirection vers le marché officiel (Google Play / Huawei AppGallery)             |
|     * Préserve le contexte via les services de la plateforme (Install Referrer / Linking) |
|                                                                                         |
|  3. Réconciliation du contexte au premier lancement                                     |
|     * L'application s'initialise pour la première fois sur le terminal physique         |
|     * Résout le contexte via les API de la plateforme ou les mécanismes de réconciliation|
|                                                                                         |
|  4. Restauration de la destination dans l'application                                   |
|     * Paramètres cibles renvoyés directement au contrôleur principal de l'application   |
|     * L'application navigue automatiquement vers le marchand ou l'écran de panier désigné|
|                                                                                         |
+-----------------------------------------------------------------------------------------+

Les organisations d'ingénierie évaluent la gestion du routage à travers ce cycle de vie selon deux approches distinctes :

  • Architecture interne sur mesure : La construction d'une infrastructure personnalisée donne aux organisations un contrôle total sur la résidence des données, les définitions de protocole et les politiques de sécurité. Cependant, cela oblige les équipes d'ingénierie à assumer des responsabilités de maintenance importantes, notamment la gestion de bases de données de paramètres à forte concurrence, la prise en charge des API de référencement spécifiques aux boutiques, la maintenance des points de terminaison iOS AASA et Android Asset Link, et la mise à jour des bibliothèques de routage client à mesure que les règles de confidentialité des systèmes d'exploitation changent.
  • Plateformes de routage clés en main : Les plateformes de routage gérées fournissent des abstractions standardisées pour les App Links Android, les Universal Links iOS, les API de référencement des boutiques et les solutions de repli Web, accélérant l'intégration sur divers canaux de distribution. Cependant, les équipes doivent peser ces avantages par rapport aux dépendances logicielles tierces, aux coûts d'infrastructure récurrents et aux considérations de conformité concernant la manière dont les SDK externes collectent et traitent les métadonnées des appareils. Un exemple d'outil spécialisé conçu pour gérer la restauration des paramètres différés et les transferts de liens profonds est Opoinstall.
+-----------------------------------------------------------------------------------------+
|                    CHECK-LIST INGÉNIERIE : ROUTAGE & INTÉGRATION DU CONTEXTE            |
+-----------------------------------------------------------------------------------------+
| [ ] Héberger un fichier assetlinks.json valide contenant les empreintes SHA-256 de prod  |
| [ ] Déclarer les points de terminaison web du développeur avec android:autoVerify="true" |
| [ ] Implémenter l'analyse d'intentions dans onCreate(), onNewIntent() et onNewWant()    |
| [ ] Appliquer une validation URI stricte (schéma, hôte, pathPrefix et clés de requête)  |
| [ ] Transmettre des identifiants opaques de courte durée au lieu de jetons en clair     |
| [ ] Vérifier que le point de terminaison backend applique authentification et expiration  |
| [ ] Implémenter un routage de secours pour les utilisateurs non installés (referrer)   |
| [ ] Valider le comportement des liens profonds à froid, en arrière-plan et après arrêt   |
+-----------------------------------------------------------------------------------------+

Foire aux questions (FAQ)

Comment Celia déclenche-t-elle des commandes alimentaires Taobao sans ouvrir l'application complète ?
Celia coordonne les flux de commande de nourriture en exécutant les fonctionnalités partenaires via l'HarmonyOS Agent Framework 2.0. Au lieu de lancer l'application graphique autonome, le système utilise le traitement du langage naturel pour traduire l'entrée utilisateur en commandes structurées. Ces commandes sont traitées par l'agent cloud de Taobao Instant Commerce, qui récupère les inventaires des restaurants locaux et élabore la charge utile de la commande. L'état résultant est présenté nativement via des cartes d'interface utilisateur système interactives, permettant à l'utilisateur de sélectionner des articles et d'autoriser le paiement sans ouvrir l'ensemble du conteneur logiciel tiers.
Pourquoi les schémas d'URL personnalisés ne parviennent-ils pas à fournir une vérification de domaine sécurisée ?
Les schémas d'URL personnalisés manquent d'un mécanisme de vérification faisant autorité pour prouver la propriété du domaine. Toute application installée sur un appareil mobile peut déclarer la prise en charge d'un schéma personnalisé identique, rendant les flux vulnérables au détournement d'intentions et à l'interception non autorisée de paramètres. De plus, si plusieurs applications enregistrent le même schéma, le système d'exploitation peut afficher des boîtes de dialogue de désambiguïsation aux utilisateurs. Les App Links vérifiés et les Universal Links établissent tous deux des associations vérifiées entre l'application et le domaine, mais leurs mécanismes de plateforme diffèrent : Android utilise les Digital Asset Links et les empreintes de certificats de signature d'application, tandis qu'Apple utilise l'habilitation Associated Domains ainsi que le fichier apple-app-site-association.
Comment les applications peuvent-elles préserver le contexte lorsque l'utilisateur doit d'abord installer l'application ?
Les App Links et Universal Links standard ne dirigent vers l'application que si elle est déjà installée ; sinon, ils se replient sur une page Web ou une boutique d'applications, où les paramètres de requête d'URL arbitraires sont généralement perdus. Pour préserver le contexte lors de l'installation, les développeurs utilisent des mécanismes de routage spécifiques à la plateforme ou différés. Sur Android, l'API Google Play Install Referrer permet de récupérer les paramètres transmis lors de la redirection vers la boutique. Dans l'écosystème Huawei, AppGallery Connect App Linking fait le pont de manière native avec la frontière d'installation. Les flux multicanaux utilisent souvent des services de routage différé gérés pour réconcilier les métadonnées de clic pré-installation lors du premier lancement de l'application.

Implications pratiques et perspectives d'avenir

L'intégration profonde de l'agent Taobao Instant Commerce dans l'assistant Celia de Huawei marque une étape évolutive dans l'architecture logicielle mobile. À mesure que les modèles d'intelligence artificielle mûrissent, passant d'outils conversationnels passifs à des couches d'exécution proactives, le modèle de longue date de la navigation mobile fragmentée et centrée sur les icônes entre dans une phase de transition. Les appareils mobiles s'orientent vers une coordination pilotée par l'intention, où les assistants système interprètent les objectifs de l'utilisateur de haut niveau et assemblent dynamiquement les capacités de service sous-jacentes.

Pour les équipes d'ingénierie et d'architecture logicielle cliente, ce changement d'écosystème nécessite une réévaluation fondamentale de la conception des applications. Les applications ne peuvent plus être conçues uniquement comme des destinations graphiques autonomes ; elles doivent exposer des interfaces modulaires et lisibles par machine, capables d'une communication bidirectionnelle avec les systèmes d'exploitation hôtes. Veiller à ce que le contexte utilisateur, les états d'authentification et l'historique des transactions circulent de manière fluide entre les agents conversationnels au niveau du système et les interfaces natives propriétaires représente une exigence essentielle pour la fourniture de services numériques modernes.

À l'avenir, la pérennité des architectures de commerce d'entreprise dépendra de la stabilité de leurs mécanismes de transport sous-jacents. Les organisations qui investissent dans des associations de domaines validées par cryptographie, dans la gestion résiliente des cycles de vie Activity et UIAbility, et dans une infrastructure de routage différé robuste combleront avec succès le fossé entre la découverte conversationnelle et la réalisation native. En maîtrisant le routage contextuel inter-surfaces, les développeurs peuvent s'assurer que, peu importe qu'une transaction provienne d'un appui tactile, d'un geste sur l'écran ou d'une simple phrase prononcée, l'intégrité opérationnelle du parcours utilisateur reste intacte.

Share this article