Passer à la navigation principale

Comment publier une application Capacitor sur Huawei AppGallery

Publiez une application Capacitor sur Huawei AppGallery : inscription des développeurs, audit des services Google Play, fallbacks HMS, signature APK, gestion des actifs et conseils de révision.

Crédits de l'article

Martin Donadieu

Auteur

Valeria

Réviseur

Jordan

Éditeur

Comment publier une application Capacitor sur Huawei AppGallery

Vous pouvez publier une application Capacitor sur Huawei AppGallery avec la même build Android que vous envoyez sur Google Play. Inscrivez-vous à un compte HUAWEI Developers gratuit, vérifiez les plugins qui dépendent des services Google Play (manquants sur les téléphones Huawei sortis depuis fin 2019), masquez ou remplacez ces fonctionnalités, puis téléchargez une APK signée dans AppGallery Connect avec une liste et attendez la révision. Cette guide couvre chaque étape, y compris une petite vérification native que vous pouvez insérer dans votre application pour détecter les services Google Play sans dépendances supplémentaires.

Qui devrait envoyer sur AppGallery

AppGallery est le magasin par défaut sur les téléphones et les tablettes Huawei. Cela compte si vos utilisateurs incluent :

  • Les personnes en Europe, au Moyen-Orient, en Afrique, en Amérique latine et en Asie du Sud-Est utilisant des appareils Huawei sortis après les restrictions commerciales américaines de 2019, qui ne sont pas livrés avec les services Google Play et sans Play Store.
  • Les clients entreprises ou gouvernementaux qui ont standardisé sur des matériels Huawei.

Remarque sur HarmonyOS : Les téléphones Huawei vendus à l'extérieur de la Chine continentale fonctionnent avec EMUI, qui est basé sur Android et installe des APK. Les appareils de la Chine continentale fonctionnant avec HarmonyOS NEXT (HarmonyOS 5 et ultérieur) ne fonctionnent qu'avec des applications natives HarmonyOS, donc un APK Android ne les atteint pas. Cette guide concerne l'AppGallery basée sur Android.

Étape 1 : Auditer les dépendances des services Google Play

Capacitor ne dépend que d'AndroidX et de sa propre bibliothèque Android. Le risque provient des plugins qui tirent sur les bibliothèques Google. Regardez vos dépendances :

cd android
./gradlew :app:dependencies --configuration releaseRuntimeClasspath \
  | grep -E "com.google.android.gms|com.google.firebase|com.google.android.play|billingclient" \
  | sort -u

Ensuite, classez-les en « fonctionne sans services Google Play » et « nécessite services Google Play ».

Dépendance Sans GMS sur Huawei Plugins typiques
Firebase Cloud Messaging Ne fonctionne pas @capacitor/push-notifications, les plugins de messagerie Firebase
Google Maps SDK Ne fonctionne pas @capacitor/google-maps
Google Sign-In (play-services-auth, Gestionnaire de jetons Google ID) Ne fonctionne pas Fournisseur de Google @capgo/capacitor-social-login
Google Play Billing Ne fonctionne pas @capgo/capacitor-native-purchases, RevenueCat sur Android
Avis de l'application Play Ne fonctionne pas @capgo/capacitor-in-app-review
Mises à jour de l'application Play Ne fonctionne pas Mise à jour de jeu @capgo/capacitor-updater
Intégrité de Play Ne fonctionne pas Plugins d'attestation d'application sur Android
Localisation fusionnée (play-services-location) Depend des plugins ; certains retournent à LocationManager d'Android @capacitor/geolocationplugins de géolocalisation de fond
play-services-tasks, play-services-basement alone Beaucoup de plugins Beaucoup de plugins
Firestore, Base de données en temps réel, Stockage, Configurateur distant, Crashlytics, Authentification par email/ mot de passe Travail Plugins Firebase
Mises à jour Capgo en direct Travail @capgo/capacitor-updater
Connexion Apple et Facebook Travail @capgo/capacitor-social-login Fournisseurs Apple / Facebook

"Ne fonctionne pas" signifie généralement que l'appel lance une erreur ou ne se résout jamais. Il ne se produit rarement une panne totale de l'application, mais les réviseurs testent sur des appareils Huawei et un bouton mort ou une page blanche est une raison de rejet courante.

Étape 2 : Détection des services Google Play en temps réel

Vous pouvez vérifier l'existence des services Google Play sans ajouter aucune dépendance Google en demandant au gestionnaire de packages d'Android si com.google.android.gms est installé. Ajoutez un petit plugin local à votre projet Android Capacitor.

android/app/src/main/java/com/example/app/ServicesCheckPlugin.java:

package com.example.app;

import android.content.pm.PackageManager;
import com.getcapacitor.JSObject;
import com.getcapacitor.Plugin;
import com.getcapacitor.PluginCall;
import com.getcapacitor.PluginMethod;
import com.getcapacitor.annotation.CapacitorPlugin;

@CapacitorPlugin(name = "ServicesCheck")
public class ServicesCheckPlugin extends Plugin {

    private boolean isInstalled(String packageName) {
        try {
            getContext().getPackageManager().getPackageInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }

    @PluginMethod
    public void getStatus(PluginCall call) {
        JSObject ret = new JSObject();
        ret.put("gms", isInstalled("com.google.android.gms"));
        ret.put("hms", isInstalled("com.huawei.hwid"));
        call.resolve(ret);
    }
}

Enregistrez-le dans MainActivity.java avant super.onCreate:

package com.example.app;

import android.os.Bundle;
import com.getcapacitor.BridgeActivity;

public class MainActivity extends BridgeActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        registerPlugin(ServicesCheckPlugin.class);
        super.onCreate(savedInstanceState);
    }
}

Depuis Android 11, les applications ne voient que les packages qu'elles déclarent. Ajoutez un <queries> dans android/app/src/main/AndroidManifest.xml, inside <manifest>:

<queries>
    <package android:name="com.google.android.gms" />
    <package android:name="com.huawei.hwid" />
</queries>

Appellez-le depuis TypeScript :

import { Capacitor, registerPlugin } from '@capacitor/core';

interface ServicesCheckPlugin {
  getStatus(): Promise<{ gms: boolean; hms: boolean }>;
}

const ServicesCheck = registerPlugin<ServicesCheckPlugin>('ServicesCheck');

export async function getMobileServices() {
  if (Capacitor.getPlatform() !== 'android') {
    return { gms: true, hms: false };
  }
  return ServicesCheck.getStatus();
}

Package presence is a reasonable proxy. It does not tell you whether Google Play services is up to date or enabled; if you also need that, add com.google.android.gms:play-services-base et utilisez GoogleApiAvailability.isGooglePlayServicesAvailable(), qui fonctionne même sur les appareils sans GMS.

Étape 3 : Degrader de manière progressive

Use the result to switch features on and off:

import { PushNotifications } from '@capacitor/push-notifications';
import { getMobileServices } from './services';

export const features = {
  push: true,
  googleSignIn: true,
  playBilling: true,
  inAppReview: true,
};

export async function initFeatures() {
  const { gms } = await getMobileServices();

  features.push = gms;
  features.googleSignIn = gms;
  features.playBilling = gms;
  features.inAppReview = gms;

  if (features.push) {
    const perm = await PushNotifications.requestPermissions();
    if (perm.receive === 'granted') {
      await PushNotifications.register();
    }
  }
}

Fonctions de rechange pratiques:

  • Sign-inMasquez le bouton Google et affichez l'inscription par email, Apple ou Facebook à la place. @capgo/capacitor-social-login Vous initialisez uniquement les fournisseurs que vous affichez.
  • Les PaiementsGoogle Play Billing n'est pas disponible. AppGallery dispose de son propre Huawei IAP. Si les achats numériques sont essentiels à votre application, vous devez soit intégrer Huawei IAP, soit envoyer la version AppGallery sans achats et indiquer cela dans la liste des applications.
  • PushUtilisez Huawei Push Kit pour les appareils HMS. Aucun plugin officiel Capacitor n'est disponible ; Huawei publie des plugins Cordova. @hmscore/* qui fonctionnent dans Capacitor, ou vous pouvez écrire un petit plugin natif autour du Kit de mise en réseau SDK.
  • Les CartesUtilisez une carte web (Leaflet, MapLibre GL JS) à l'intérieur de la vue WebView, qui fonctionne sur tous les appareils, ou Huawei Map Kit.
  • Notez l'applicationSur Huawei, reliez-vous à votre page AppGallery au lieu d'appeler la revue de la Play API.
  • Liens de magasin: boutons ‘Mettre à jour l’application’ devraient ouvrir l’AppGallery (appmarket://details?id=com.example.app) sur les appareils Huawei, et non la boutique Play.

Testez votre application sur un appareil Huawei réel ou sur le service de débogage cloud de Huawei. Un émulateur avec des API Google masquera tous ces problèmes.

Étape 4 : Inscrivez-vous sur le site des développeurs Huawei

  1. Créez un ID Huawei sur developer.huawei.com.
  2. Terminez la vérification de votre identité en tant qu'individu ou une entreprise. Les individus fournissent généralement un document d'identité et des informations sur leur carte bancaire ; les entreprises fournissent des documents de registration d'entreprise. La vérification prend généralement une à deux jours ouvrables.
  3. Choisissez soigneusement le type de compte et le pays. Huawei ne vous permet pas de convertir un compte individuel en compte d'entreprise, et le pays ou la région vérifié ne peut pas être modifié ultérieurement.

L'inscription est gratuite.

Étape 5 : Créez l'application dans AppGallery Connect

  1. Ouvrir AppGallery Connect > Mes applications > Nouvelle application.
  2. Plateforme : AndroidDispositif : Téléphone portable (couvre également les tablettes).
  3. Nom d'application, langue par défaut et nom de package. Le nom de package doit correspondre appId à capacitor.config.ts ne peut pas être modifié après la première mise en ligne.
  4. Choisissez la catégorie de l'application.

Étape 6 : Construire et signer le package de mise en production

AppGallery accepte les fichiers APK et AAB. La route APK est plus simple : vous signez avec votre propre clé, et Huawei n'a pas besoin de conserver votre clé de signature.

bun run build
bunx cap sync android
cd android
./gradlew assembleRelease

Configurez la signature dans android/app/build.gradle (load des mots de passe à partir de variables d'environnement ou) keystore.properties, ne les commitez jamais):

android {
    signingConfigs {
        release {
            storeFile file(System.getenv("ANDROID_KEYSTORE_PATH") ?: "upload-keystore.jks")
            storePassword System.getenv("ANDROID_KEYSTORE_PASSWORD")
            keyAlias System.getenv("ANDROID_KEY_ALIAS")
            keyPassword System.getenv("ANDROID_KEY_PASSWORD")
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

Le fichier APK se trouve dans android/app/build/outputs/apk/release/Si vous avez besoin d'un coffre-fort, le Générateur de clés de signature Android crée un. Gardez-l’en sécurité : chaque mise à jour future d'AppGallery doit être signée avec la même clé.

Si vous téléchargez un AAB au lieu de cela, AppGallery exige son service de signature d'applications, ce qui signifie que Huawei génère et conserve la clé de signature finale, le même modèle que Play App Signing.

Avant l'upload, quelques choses à vérifier :

  • versionCode doit augmenter à chaque téléchargement.
  • Le nom de l'application dans l'APK doit correspondre au nom de l'application dans l'AppGallery.
  • Si vous distribuez à l'extérieur de la Chine continentale, fournissez l'anglais (États-Unis) comme langue dans la liste.
  • Depuis le 30 septembre 2026, la vérification du développeur Android s'applique aux applications installées sur des appareils certifiés au Brésil, en Indonésie, en Singapour et en Thaïlande. Les appareils Huawei sans services Google ne sont pas certifiés par Google, mais si le même paquet installe également à partir de l'extérieur de Google Play sur des appareils certifiés, enregistrez le nom du paquet dans le console du développeur Android.

Étape 7 : Préparez la liste

La liste d'AppGallery a ses propres spécifications, différentes de celles d'Apple et de Google :

Champ Exigence
Icône 216 x 216 PNG (512 x 512 également accepté), sans coins arrondis ajoutés par vous
Captures d'écran 3 à 8, 450 x 800 ou 800 x 450 px (ou proportionnellement plus grand), même orientation
Introduction concise Jusqu'à 80 caractères
Introduction Jusqu'à 8 000 caractères
URL de la politique de confidentialité Obligatoire si l'application collecte des données personnelles
Classement d'âge Questionnaire dans AppGallery Connect
Compte de test Obligatoire si l'application a un système de connexion
Pays / régions Sélectionnez explicitement les pays de distribution

N'écrivez pas les captures d'écran qui montrent le logo Google Play, les cadres de dispositifs Android marqués par d'autres fabricants ou les badges "Téléchargez-le sur Google Play". Huawei rejette les listings qui référencent d'autres magasins. Pour le reste des actifs, réutilisez ce que vous avez fait pour les autres magasins ; notre Guide de mise en ligne de l'App Store et Google Play les couvrent.

Étape 8 : Téléchargez, soumettez et révisez

  1. In Informations de version > BrouillonInformations sur la version > Brouillon téléversez l'APK sous.
  2. Remplissez les champs de la liste, de la note, de la vie privée et des pays.
  3. Remplissez le listing, la note, la confidentialité et les pays.
  4. Soumettre à la revue.

La revue prend généralement quelques jours de travail. Les refus sont envoyés par email avec la référence du guide. Les plus courants pour les applications Capacitor.

  • Fonctionnalités qui ne fonctionnent pas sans les services Google Play Les fonctionnalités qui ne fonctionnent pas sans les services Google Play
  • Publiez une application: une application avec le même nom de package existe déjà sur AppGallery d'un autre développeur, ou Huawei a copié votre application à partir de Google Play. Contactez le support des développeurs Huawei avec une preuve de propriété.
  • Autres références de magasin dans les captures d'écran ou le texte.
  • Manque de texte en anglais pour une distribution internationale.
  • Politique de confidentialité manquante ou non accessible depuis l'intérieur de l'application.

AppGallery Connect also has a Publishing API, so you can automate uploads from CI once the first version is live.

Étape 9 : Gardez les mises à jour rapides

Toutes les modifications natives passent à nouveau par la revue Huawei, tout comme les autres magasins. Pour les modifications JavaScript, HTML et CSS, Toutes les modifications natives passent à nouveau par la revue Huawei, comme les autres magasins. Pour les modifications JavaScript, HTML et CSS, les mises à jour Capgo sont également disponibles. livrez le nouveau bundle directement aux applications installées sur les appareils Huawei, Google et Apple avec une seule mise à jour, car l'actualiseur récupère les bundles à partir de votre Capgo endpoint et ne utilise pas les services Google Play. Utilisez un canal dédié si votre build Huawei comporte des fonctionnalités différentes :

bunx @capgo/cli@latest bundle upload --channel huawei

Définissez le canal par défaut pour la construction Huawei à l'heure de la construction, ou affectez les appareils au canal depuis votre application. Le docs de l'actualiseur Capgo expliquent les canaux et la configuration.

Checklist

  • Dependency audit done, GMS-only features listed
  • Services de runtime vérifiés et testés sur un appareil Huawei réel.
  • Fonctionnalités Google-only masquées ou remplacées (push, connexion, facturation, cartes, examen)
  • Compte HUAWEI Developers vérifié
  • Application créée avec le même nom de package que capacitor.config.ts
  • Publiez l'APK signée avec un clé de signature sauvegardée. versionCode bumpé
  • Icon, 3 à 8 captures d'écran, introduction brève et complète, politique de confidentialité
  • Aucune référence à Google Play dans les actifs de la liste
  • Compte de test pour les réviseurs si nécessaire
  • Soumis, courriel de suivi de la revue

Si vous préparez également Google Play, lisez comment créer des comptes de développeur Apple et Google Play pour la règle des 12-testeurs qui ne s'applique que là.

Mises à jour instantanées pour les applications Capacitor

Lorsqu'un bug de la couche web est en direct, expédiez la correction par Capgo au lieu d'attendre des jours pour l'approbation de la boutique d'applications. Les utilisateurs reçoivent la mise à jour en arrière-plan tandis que les changements natifs restent dans la voie de révision normale.

Dernières actualités de notre Blog

Capgo vous donne les meilleures informations dont vous avez besoin pour créer une application mobile vraiment professionnelle.