Saltar al contenido principal
Android Capacitor Tutorial

Cómo publicar una aplicación Capacitor en Huawei AppGallery

Publica una aplicación Capacitor en Huawei AppGallery: registro de desarrolladores, auditoría de servicios de Google Play, alternativas de HMS, firma de APK, activos de lista y consejos de revisión.

Cómo publicar una aplicación Capacitor en Huawei AppGallery

Puedes publicar una aplicación Capacitor en Huawei AppGallery con la misma compilación de Android que envías a Google Play. Registra una cuenta de desarrollador gratuita de HUAWEI, verifica qué plugins dependen de los servicios de Google Play (faltantes en los teléfonos Huawei lanzados desde finales de 2019), oculta o reemplaza esas características, luego sube una APK firmada en AppGallery Connect con una lista y espera a que la revisen. Este guía cubre cada paso, incluyendo un pequeño chequeo nativo que puedes agregar a tu aplicación para detectar los servicios de Google Play sin dependencias adicionales.

¿Quién debe enviar a AppGallery

AppGallery es la tienda predeterminada en los teléfonos y tabletas de Huawei. Importa si tus usuarios incluyen:

  • People en Europa, Oriente Medio, África, América Latina y Asia Sudoriental que utilizan dispositivos Huawei lanzados después de las restricciones comerciales estadounidenses de 2019, que envían sin servicios de Google Play y sin la Tienda de aplicaciones.
  • Los clientes empresariales o gubernamentales que se han estandarizado en hardware Huawei.

Nota sobre HarmonyOS: Los teléfonos Huawei vendidos fuera de China continental corren EMUI, que es Android y instala APKs. Los dispositivos en China continental que ejecutan HarmonyOS NEXT (HarmonyOS 5 y posterior) solo ejecutan aplicaciones nativas de HarmonyOS, por lo que un APK de Android no llega a ellos. Este guía es sobre la Tienda de aplicaciones basada en Android.

Step 1: Auditoría de dependencias de servicios de Google Play

Capacitor solo depende de AndroidX y su propia biblioteca de Android. El riesgo proviene de plugins que extraen bibliotecas de Google. Mire sus dependencias:

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

Luego ordene sus dependencias en “funciona sin servicios de Google Play” y “necesita servicios de Google Play”.

Dependencia En Huawei sin GMS Plugins típicos
Mensaje de Nube de Firebase No funciona @capacitor/push-notifications, plugins de mensajería de Firebase
Google Maps SDK No funciona @capacitor/google-maps
Google Sign-In (play-services-auth, Administrador de credenciales de Google ID) No funciona proveedor de Google @capgo/capacitor-social-login
Google Play Billing No funciona @capgo/capacitor-native-purchases, RevenueCat en Android
Revisión en-aplicación de Google Play No funciona @capgo/capacitor-in-app-review
Actualizaciones en-aplicación de Google Play No funciona Ayuda de actualización en ejecución en @capgo/capacitor-updater
Integridad de Play No funciona Plugins de verificación de aplicación en Android
Ubicación fusionada (play-services-location) Depende del plugin; algunos recurren a LocationManager de Android @capacitor/geolocation, plugins de geolocalización de fondo
play-services-tasks, play-services-basement alone Librerías puro (sin dependencias) Muchos plugins
Depends on plugin; some fall back to Android’s LocationManager Trabajo Plugins de Firebase
Capgo actualizaciones en vivo Trabajo @capgo/capacitor-updater
iniciación de sesión de Apple y Facebook Trabajo @capgo/capacitor-social-login proveedores de Apple / Facebook

“Does not work” usually means the call throws or never resolves. It rarely crashes the whole app, but reviewers test on Huawei devices and a dead button or a blank screen is a common rejection reason.

Paso 2: Detectar servicios de Google Play en tiempo de ejecución

Puede verificar la disponibilidad de servicios de Google Play sin agregar ninguna dependencia de Google preguntando al administrador de paquetes de Android com.google.android.gms Se ha instalado. Agregue un plugin local pequeño a su proyecto de 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);
    }
}

Regístralo MainActivity.java antes 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);
    }
}

Desde Android 11, las aplicaciones solo pueden ver otros paquetes que declaran. Agregar un <queries> dentro android/app/src/main/AndroidManifest.xml, inside <manifest>:

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

Llámalo desde 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 y usar GoogleApiAvailability.isGooglePlayServicesAvailable(), que funciona incluso en dispositivos sin GMS.

Paso 3: Deteriorar con gracia

Utilice el resultado para activar y desactivar características:

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();
    }
  }
}

Iniciar sesión

  • Sign-inMuestre el botón de correo electrónico, Apple o Facebook en lugar del de Google. @capgo/capacitor-social-login inicializa solo los proveedores que muestras.
  • PagosGoogle Play Billing no está disponible. AppGallery tiene su propio Huawei IAP. Si las compras digitales son fundamentales para tu aplicación, integra Huawei IAP o envía la versión de AppGallery sin compras y explica eso en la lista.
  • PushUtilice el kit de notificaciones de Huawei para dispositivos HMS. No existe un plugin oficial Capacitor; Huawei publica plugins de Cordova. @hmscore/* que funcionan en Capacitor, o puedes escribir un pequeño plugin nativo alrededor del kit de Push SDK.
  • Mapasusa un mapa web (Leaflet, MapLibre GL JS) dentro del WebView, que funciona en todos los dispositivos, o Huawei Map Kit.
  • Califica la aplicaciónen Huawei, enlaza a tu página de AppGallery en lugar de llamar a la revisión de Play API.
  • Enlaces de tienda: Los botones “Actualizar la aplicación” deberían abrir AppGallery (appmarket://details?id=com.example.app) en dispositivos Huawei, no la tienda de Play.

Pruebe en un dispositivo Huawei real o en el servicio de depuración en la nube de Huawei. Un emulador con APIs de Google ocultará todos estos problemas.

Step 4: Registre una cuenta de desarrollador de HUAWEI

  1. Crear una HUAWEI ID en developer.huawei.com.
  2. Complete verificación de identidad Elija cuidadosamente el tipo de cuenta y el país. Huawei no permite convertir una cuenta individual en una cuenta de empresa, y el país o región verificado no puede cambiarse más tarde.
  3. Pick the account type and country carefully. Huawei does not let you convert an individual account to an enterprise account, and the verified country or region cannot be changed later.

La inscripción es gratuita.

Crear una cuenta de desarrollador de HUAWEI es gratuito.

  1. Abre AppGallery Connect > Mis aplicaciones > Nueva aplicación.
  2. Plataforma: Android. Dispositivo: Teléfono móvil (también cubre tabletas).
  3. Nombre de la aplicación, idioma predeterminado y nombre de paquete. El nombre de paquete debe coincidir appId en capacitor.config.ts y no puede cambiarse después de la primera subida.
  4. Elige la categoría de la aplicación.

Paso 6: Construye y firma el paquete de lanzamiento

AppGallery acepta APK y AAB. La ruta APK es más sencilla: la firmas con tu propia clave, y Huawei no necesita tener tu clave de firma.

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

Configura la firma en android/app/build.gradle Carga contraseñas desde variables de entorno o keystore.propertiesnunca las comitas):

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
        }
    }
}

El APK está en android/app/build/outputs/apk/release/Si necesitas un keystore, el generador de keystore de Android crea uno. Manténlo seguro: cada actualización futura de AppGallery debe ser firmada con la misma clave.

Si subes un AAB en su lugar, AppGallery requiere su servicio de firma de aplicaciones, lo que significa que Huawei genera y almacena la clave de firma final, el mismo modelo que la firma de aplicaciones de Play.

Un par de cosas para verificar antes de subir:

  • versionCode debe aumentar con cada subida.
  • El nombre de la aplicación en el APK debe coincidir con el nombre de la lista de AppGallery.
  • If distribuye fuera de la China continental, proporcione inglés (EE. UU.) como idioma en la lista.
  • Desde el 30 de septiembre de 2026, la verificación de desarrolladores de Android se aplica a las aplicaciones instaladas en dispositivos certificados en Brasil, Indonesia, Singapur y Tailandia. Los dispositivos Huawei sin servicios de Google no están certificados por Google, pero si el mismo paquete también se instala desde fuera de Google Play en dispositivos certificados, regístre el nombre del paquete en el Console de Desarrolladores de Android.

Paso 7: Preparar la lista

La lista de AppGallery tiene sus propias especificaciones, diferentes de Apple y Google:

Campo Requisito
Icono 216 x 216 PNG (512 x 512 también aceptado), sin esquinas redondeadas agregadas por usted
Screenshots 3 a 8, 450 x 800 o 800 x 450 px (o proporcionalmente más grande), con la misma orientación
Introducción breve Hasta 80 caracteres
Introducción Hasta 8,000 caracteres
URL de la política de privacidad Requerido si la aplicación recopila datos personales
Age rating Preguntas en AppGallery Connect
Cuenta de prueba Requerido si la aplicación tiene inicio de sesión
Paises / regiones Seleccione países de distribución explícitamente

No reutilice capturas de pantalla que muestren el logo de Google Play, marcos de dispositivos Android con marcas de otros fabricantes o 'Obténlo en Google Play' . Huawei rechaza listados que hagan referencia a otras tiendas. Para el resto de los activos, reutilice lo que haya hecho para las otras tiendas; nuestra Guía de listado de App Store y Google Play los cubre.

Step 8: Subir, enviar y revisar

  1. En Versión de información &gt; BorradorSubir el APK bajo Versión del software.
  2. Rellene la lista, la calificación, la privacidad y los países.
  3. Establezca la hora de liberación (inmediatamente después de la aprobación o programada).
  4. Enviar para revisión.

La revisión generalmente tarda unos días hábiles. Las rechazadas llegan por correo electrónico con la referencia del guideline. Las comunes para aplicaciones Capacitor

  • Características que no funcionan sin servicios de Google Play (botón de inicio de sesión que no hace nada, pantalla de mapa en blanco).
  • Aplicación duplicada: una aplicación con el mismo nombre de paquete ya existe en AppGallery desde otro desarrollador, o Huawei copió previamente tu aplicación desde Google Play. Contacta con el soporte de desarrolladores de Huawei con pruebas de propiedad.
  • Otros referentes de tiendas en capturas de pantalla o texto.
  • Falta de inglés para la distribución internacional.
  • Política de privacidad faltante o no accesible desde dentro de la aplicación.

AppGallery Connect también tiene un proceso de publicación API, por lo que puedes automatizar las subidas desde CI una vez que la primera versión esté en vivo.

Paso 9: Mantén las actualizaciones rápidas

Cada cambio nativo pasa por la revisión de Huawei nuevamente, igual que en las otras tiendas. Para JavaScript, HTML y CSS, Todos los cambios nativos pasan por la revisión de Huawei nuevamente, al igual que las otras tiendas. Para los cambios de JavaScript, HTML y CSS, Capgo actualizaciones en vivo, entregar el nuevo paquete directamente a las aplicaciones instaladas en dispositivos Huawei, Google y Apple con una sola carga, porque el actualizador obtiene paquetes de su Capgo punto de conexión y no utiliza servicios de Google Play. Utilice un canal dedicado si su compilación de Huawei tiene características diferentes:

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

Establezca el canal predeterminado para la compilación de Huawei en tiempo de compilación, o asigne dispositivos al canal desde su aplicación. El Capgo documentos del actualizador explican canales y configuración.

Checklist

  • Dependency audit done, GMS-only features listed
  • Servicios de tiempo de ejecución verificados y probados en un dispositivo Huawei real.
  • Características de Google ocultas o reemplazadas (push, inicio de sesión, facturación, mapas, reseña)
  • Cuenta de desarrollador HUAWEI verificada
  • Aplicación creada con el mismo nombre de paquete capacitor.config.ts
  • Relea el APK firmado con un keystore respaldado, versionCode actualizado
  • Icono, 3 a 8 capturas de pantalla, introducción breve y completa, política de privacidad
  • No referencias a Google Play en los activos de lista
  • Cuenta de prueba para revisores si es necesario
  • Submitted, review email monitored

Si también estás preparando Google Play, lee cómo crear cuentas de desarrolladores de Apple y Google Play para la regla de los 12 revisores que solo aplica allí.

Actualizaciones en vivo para aplicaciones Capacitor

Cuando un bug en la capa web está en vivo, envía la corrección a través de Capgo en lugar de esperar días para la aprobación de la tienda. Los usuarios reciben la actualización en segundo plano mientras los cambios nativos siguen en el camino de revisión normal.

Últimas noticias de nuestro Blog

Capgo te da las mejores perspectivas que necesitas para crear una aplicación móvil verdaderamente profesional.