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-loginVous 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
- Créez un ID Huawei sur developer.huawei.com.
- 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.
- 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
- Ouvrir AppGallery Connect > Mes applications > Nouvelle application.
- Plateforme : AndroidDispositif : Téléphone portable (couvre également les tablettes).
- Nom d'application, langue par défaut et nom de package. Le nom de package doit correspondre
appIdàcapacitor.config.tsne peut pas être modifié après la première mise en ligne. - 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 :
versionCodedoit 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
- In Informations de version > BrouillonInformations sur la version > Brouillon téléversez l'APK sous.
- Remplissez les champs de la liste, de la note, de la vie privée et des pays.
- Remplissez le listing, la note, la confidentialité et les pays.
- 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.
versionCodebumpé - 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à.