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-logininicializa 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
- Crear una HUAWEI ID en developer.huawei.com.
- 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.
- 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.
- Abre AppGallery Connect > Mis aplicaciones > Nueva aplicación.
- Plataforma: Android. Dispositivo: Teléfono móvil (también cubre tabletas).
- Nombre de la aplicación, idioma predeterminado y nombre de paquete. El nombre de paquete debe coincidir
appIdencapacitor.config.tsy no puede cambiarse después de la primera subida. - 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:
versionCodedebe 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
- En Versión de información > BorradorSubir el APK bajo Versión del software.
- Rellene la lista, la calificación, la privacidad y los países.
- Establezca la hora de liberación (inmediatamente después de la aprobación o programada).
- 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,
versionCodeactualizado - 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í.