Anda bisa publish app Capacitor di Huawei AppGallery menggunakan Android build yang sama dengan yang Anda kirim ke Google Play. Daftar akun HUAWEI Developers secara gratis, cek plugin mana yang bergantung pada Google Play services (tidak ada di HP Huawei rilis akhir 2019), sembunyikan atau ganti fitur tersebut, lalu upload APK yang sudah di-sign ke AppGallery Connect lengkap dengan listing dan tunggu proses review. Panduan ini membahas setiap langkahnya, termasuk pengecekan native sederhana yang bisa Anda masukkan ke app untuk mendeteksi Google Play services tanpa dependensi tambahan.
Siapa yang harus rilis di AppGallery
AppGallery adalah store default di ponsel dan tablet Huawei. Ini penting jika pengguna Anda mencakup:
- Orang di Eropa, Timur Tengah, Afrika, Amerika Latin, dan Asia Tenggara yang memakai perangkat Huawei yang dirilis setelah pembatasan dagang AS 2019, yang dikirim tanpa Google Play services dan tanpa Play Store.
- Pelanggan enterprise atau pemerintah yang menggunakan hardware Huawei sebagai standar.
Catatan tentang HarmonyOS: Ponsel Huawei yang dijual di luar China daratan menggunakan EMUI, yang berbasis Android dan bisa install APK. Perangkat di China daratan yang menjalankan HarmonyOS NEXT (HarmonyOS 5 ke atas) hanya menjalankan aplikasi native HarmonyOS, sehingga APK Android tidak menjangkau perangkat tersebut. Panduan ini membahas AppGallery yang berbasis Android.
Langkah 1: Audit dependensi Google Play services
Capacitor sendiri hanya bergantung pada AndroidX dan library Android miliknya. Risikonya berasal dari plugin yang ikut membawa library Google. Periksa dependensi Anda:
cd android
./gradlew :app:dependencies --configuration releaseRuntimeClasspath \
| grep -E "com.google.android.gms|com.google.firebase|com.google.android.play|billingclient" \
| sort -u
Lalu kelompokkan menjadi “berjalan tanpa Google Play services” dan “butuh Google Play services”.
| Dependensi | Di Huawei tanpa GMS | Plugin umum |
|---|---|---|
| Firebase Cloud Messaging | Tidak berfungsi | @capacitor/push-notifications, plugin Firebase messaging |
| Google Maps SDK | Tidak berfungsi | @capacitor/google-maps |
Google Sign-In (play-services-auth, Credential Manager Google ID) |
Tidak berfungsi | provider Google untuk @capgo/capacitor-social-login |
| Google Play Billing | Tidak berfungsi | @capgo/capacitor-native-purchases, RevenueCat di Android |
| Mainkan In-App Review | Tidak berfungsi | @capgo/capacitor-in-app-review |
| Jalankan In-App Updates | Tidak berfungsi | Jalankan helper update di @capgo/capacitor-updater |
| Play Integrity | Tidak berfungsi | Plugin attestation aplikasi di Android |
Fused location ("play-services-location) |
Tergantung plugin; beberapa menggunakan fallback Android LocationManager | @capacitor/geolocation, plugin background geolocation |
play-services-tasks, play-services-basement saja |
Fine (library biasa) | Banyak plugin |
| Firestore, Realtime Database, Storage, Remote Config, Crashlytics, Auth email/password | Kerja | Plugin Firebase |
| Capgo live updates | Kerja | @capgo/capacitor-updater |
| Login Apple dan Facebook | Kerja | @capgo/capacitor-social-login Provider Apple / Facebook |
“Does not work” biasanya berarti panggilannya melempar error atau tidak pernah resolve. Jarang sampai bikin seluruh app crash, tapi reviewer menguji di perangkat Huawei dan tombol mati atau layar kosong adalah alasan penolakan yang umum.
Langkah 2: Deteksi Google Play services saat runtime
Anda bisa mengecek Google Play services tanpa menambah dependency Google apa pun dengan menanyakan ke package manager Android apakah com.google.android.gms sudah terinstal. Tambahkan plugin lokal kecil ke proyek Android Capacitor Anda.
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);
}
}
Daftarkan di MainActivity.java sebelum 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);
}
}
Sejak Android 11, aplikasi hanya bisa melihat paket lain yang dideklarasikan. Tambahkan <queries> blok ke android/app/src/main/AndroidManifest.xml, di dalam <manifest>:
<queries>
<package android:name="com.google.android.gms" />
<package android:name="com.huawei.hwid" />
</queries>
Panggil dari 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();
}
Keberadaan paket adalah proxy yang masuk akal. Ini tidak memberi tahu apakah Google Play services sudah diperbarui atau aktif; jika Anda juga membutuhkannya, tambahkan com.google.android.gms:play-services-base dan gunakan GoogleApiAvailability.isGooglePlayServicesAvailable(), yang tetap berfungsi di perangkat tanpa GMS.
Langkah 3: Degrade secara graceful
Gunakan hasilnya untuk mengaktifkan atau menonaktifkan fitur:
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();
}
}
}
Fallback praktis:
- Masuk: sembunyikan tombol Google dan tampilkan login email, Apple, atau Facebook sebagai gantinya. Dengan
@capgo/capacitor-social-loginAnda hanya perlu menginisialisasi provider yang ditampilkan. - Pembayaran: Google Play Billing tidak tersedia. AppGallery punya Huawei IAP sendiri. Jika pembelian digital adalah fitur utama aplikasi Anda, integrasikan Huawei IAP atau rilis build AppGallery tanpa fitur pembelian dan jelaskan di deskripsi.
- Push: gunakan Huawei Push Kit untuk perangkat HMS. Belum ada plugin Capacitor resmi; Huawei merilis plugin Cordova di bawah
@hmscore/*yang berjalan di Capacitor, atau Anda bisa membuat plugin native kecil di sekitar SDK Push Kit. - Maps: gunakan web map (Leaflet, MapLibre GL JS) di dalam WebView agar bisa jalan di semua perangkat, atau Huawei Map Kit.
- Rating aplikasi: di Huawei, arahkan ke halaman AppGallery Anda alih-alih memanggil API review Play Store.
- Link toko: Tombol “Update the app” harus membuka AppGallery (
appmarket://details?id=com.example.app) pada perangkat Huawei, bukan Play Store.
Uji coba pada perangkat Huawei asli atau layanan cloud debugging Huawei. Emulator dengan Google APIs akan menyembunyikan semua masalah ini.
Langkah 4: Daftar akun HUAWEI Developers
- Buat HUAWEI ID di developer.huawei.com.
- Selesaikan verifikasi identitas sebagai individu atau perusahaan. Individu biasanya menyertakan dokumen ID dan detail kartu bank; perusahaan menyertakan dokumen registrasi bisnis. Peninjauan biasanya memakan waktu satu hingga dua hari kerja.
- Pilih tipe akun dan negara dengan teliti. Huawei tidak mengizinkan konversi akun individu ke akun perusahaan, dan negara atau wilayah yang sudah diverifikasi tidak dapat diubah nanti.
Registrasi gratis.
Langkah 5: Buat aplikasi di AppGallery Connect
- Buka AppGallery Connect > My apps > New app.
- Platform: Android. Perangkat: Mobile phone (termasuk tablet juga).
- Nama aplikasi, bahasa default, dan package name. Package name harus sesuai
appIddicapacitor.config.tsdan tidak bisa diubah setelah upload pertama. - Pilih kategori aplikasi.
Langkah 6: Build dan sign paket rilis
AppGallery menerima APK dan AAB. Jalur APK lebih simpel: Anda menandatanganinya dengan key sendiri, dan Huawei tidak perlu menyimpan signing key Anda.
bun run build
bunx cap sync android
cd android
./gradlew assembleRelease
Konfigurasi signing di android/app/build.gradle (muat password dari environment variables atau keystore.properties, jangan pernah commit):
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
}
}
}
APK ada di android/app/build/outputs/apk/release/. Jika Anda butuh keystore, gunakan Generator Android keystore untuk membuatnya. Simpan dengan aman: setiap update AppGallery di masa mendatang harus di-sign dengan key yang sama.
Jika Anda mengunggah AAB, AppGallery mewajibkan layanan App Signing mereka, yang berarti Huawei membuat dan menyimpan final signing key, model yang sama dengan Play App Signing.
Beberapa hal yang perlu dicek sebelum upload:
versionCodeharus bertambah di setiap upload.- Nama aplikasi di APK harus sesuai dengan nama listing di AppGallery.
- Jika Anda mendistribusikannya di luar China daratan, gunakan bahasa Inggris (US) pada listing.
- Mulai 30 September 2026, verifikasi developer Android berlaku untuk aplikasi yang diinstal di perangkat bersertifikat di Brasil, Indonesia, Singapura, dan Thailand. Perangkat Huawei tanpa layanan Google tidak bersertifikat Google, namun jika package yang sama juga diinstal dari luar Google Play di perangkat bersertifikat, daftarkan package name tersebut di Android Developer Console.
Langkah 7: Siapkan listing
Listing AppGallery memiliki spesifikasi tersendiri, berbeda dari Apple dan Google:
| Field | Persyaratan |
|---|---|
| Icon | 216 x 216 PNG (512 x 512 juga diterima), tanpa sudut membulat buatan sendiri |
| Screenshots | 3 sampai 8, 450 x 800 atau 800 x 450 px (atau lebih besar secara proporsional), orientasi sama |
| Pengenalan singkat | Maksimal 80 karakter |
| Pendahuluan | Maksimal 8.000 karakter |
| URL kebijakan privasi | Wajib jika aplikasi mengumpulkan data pribadi |
| Rating usia | Kuesioner di AppGallery Connect |
| Akun uji coba | Wajib jika aplikasi memiliki fitur login |
| Negara / wilayah | Pilih negara distribusi secara eksplisit |
Jangan gunakan ulang screenshot yang menampilkan logo Google Play, frame perangkat Android merek lain, atau badge “Get it on Google Play”. Huawei menolak listing yang merujuk ke store lain. Untuk aset lainnya, gunakan kembali apa yang sudah Anda buat untuk store lain; Panduan listing App Store dan Google Play mencakup semuanya.
Langkah 8: Upload, submit, dan review
- Di Informasi versi > Draft, upload APK di bawah Versi software.
- Isi detail listing, rating, privasi, dan negara.
- Atur waktu rilis (segera setelah disetujui atau dijadwalkan).
- Submit untuk review.
Review biasanya memakan waktu beberapa hari kerja. Penolakan akan dikirim via email beserta referensi panduannya. Penyebab umum untuk aplikasi Capacitor:
- Fitur yang tidak berfungsi tanpa Google Play services (tombol login tidak berfungsi, layar peta kosong).
- Duplikasi aplikasi: aplikasi dengan nama package yang sama sudah ada di AppGallery dari developer lain, atau Huawei sebelumnya menyalin aplikasi Anda dari Google Play. Hubungi dukungan developer Huawei dengan bukti kepemilikan.
- Referensi store lain di screenshot atau teks.
- Bahasa Inggris tidak tersedia untuk distribusi internasional.
- Kebijakan privasi hilang atau tidak bisa diakses dari dalam aplikasi.
AppGallery Connect juga memiliki API untuk Publishing, jadi Anda bisa mengotomatiskan upload dari CI setelah versi pertama rilis.
Langkah 9: Update tetap cepat
Setiap perubahan native harus melewati review Huawei lagi, sama seperti store lainnya. Untuk perubahan JavaScript, HTML, dan CSS, Capgo live updates kirim bundle baru langsung ke aplikasi yang terinstal di perangkat Huawei, Google, dan Apple hanya dengan satu kali upload, karena updater mengambil bundle dari endpoint Capgo Anda dan tidak menggunakan Google Play services. Gunakan channel khusus jika build Huawei Anda memiliki fitur yang berbeda:
bunx @capgo/cli@latest bundle upload --channel huawei
Atur channel default untuk build Huawei saat build time, atau tugaskan perangkat ke channel tertentu dari aplikasi Anda. dokumentasi updater Capgo menjelaskan tentang channel dan konfigurasi.
Checklist
- Audit dependensi selesai, fitur khusus GMS sudah didaftar
- Cek runtime services sudah ditambahkan dan dites di perangkat Huawei asli
- Fitur khusus Google disembunyikan atau diganti (push, sign-in, billing, maps, review)
- Akun HUAWEI Developers sudah terverifikasi
- App dibuat dengan package name yang sama dengan
capacitor.config.ts - Release APK sudah ditandatangani dengan keystore yang di-backup,
versionCodediperbarui - Ikon, 3-8 screenshot, deskripsi singkat & lengkap, kebijakan privasi
- Jangan sertakan referensi Google Play di aset listing
- Akun testing untuk reviewer jika diperlukan
- Terkirim, pantau email review
Jika Anda juga menyiapkan Google Play, baca cara membuat akun developer Apple dan Google Play untuk aturan 12-tester yang hanya berlaku di sana.