You can publish a Capacitor app on Huawei AppGallery with the same Android build you ship to Google Play. Register a free HUAWEI Developers account, check which plugins depend on Google Play services (missing on Huawei phones released since late 2019), hide or replace those features, then upload a signed APK in AppGallery Connect with a listing and wait for review. This guide covers each step, including a small native check you can drop into your app to detect Google Play services without extra dependencies.
AppGalleryに配信するべきアプリ
AppGalleryはHuawei端末とタブレットのデフォルトのストアです。ユーザーが含まれる場合に重要です。
- ヨーロッパ、中東、アフリカ、ラテンアメリカ、東南アジアでHuawei端末を使用する人々。
- 企業または政府の顧客がHuaweiハードウェアに標準化している場合。
HarmonyOSに関する注記: 中国大陸以外のHuawei端末はEMUIを実行し、APKをインストールします。中国大陸でHarmonyOS NEXT (HarmonyOS 5 以降) を実行している端末は、Android APK は到達しません。このガイドは、AndroidベースのAppGalleryについてです。
ステップ 1: Google Playサービス依存関係の検査
Capacitor自体は、AndroidXと自身のAndroidライブラリのみに依存しています。リスクは、Googleライブラリを引き付けるプラグインから来ています。依存関係を確認してください:
cd android
./gradlew :app:dependencies --configuration releaseRuntimeClasspath \
| grep -E "com.google.android.gms|com.google.firebase|com.google.android.play|billingclient" \
| sort -u
次に、Google Playサービスを必要とするものと、Google Playサービスを必要としないものに分類してください。
| 依存関係 | HuaweiでGMSが無い | 一般的なプラグイン |
|---|---|---|
| Firebase Cloud Messaging | 機能しない | @capacitor/push-notifications, Firebaseメッセージングプラグイン |
| Google Maps SDK | 機能しない | @capacitor/google-maps |
Googleサインイン (play-services-authID管理者 |
機能しません | Googleの提供元 @capgo/capacitor-social-login |
| Google Play Billing | 機能しません | @capgo/capacitor-native-purchases, AndroidでRevenueCat |
| アプリ内レビューをプレイ | 機能しません | @capgo/capacitor-in-app-review |
| インストール中のアップデートをプレイ | 機能しません | Playの更新ヘルパー @capgo/capacitor-updater |
| Play Integrity | 機能しません | Android用アプリ証明プラグイン |
Android用のFused位置情報(play-services-location) |
AndroidのLocationManagerに依存するプラグイン; 一部はAndroidのLocationManagerにフォールバック | @capacitor/geolocation, 背景位置情報プラグイン |
play-services-tasks, play-services-basement 単独 |
多くのプラグイン | Firestore、リアルタイムデータベース、ストレージ、リモート設定、クラッシュリポーティング、メール/パスワード認証 |
| 機能 | Work | __CAPGO_KEEP_0__ライブアップデート |
| Capgo ライブアップデート | Work | @capgo/capacitor-updater |
| AppleとFacebookログイン | 作業 | @capgo/capacitor-social-login Apple / Facebookプロバイダー |
「機能しない」というのは、呼び出しを投げたり、解決しなかったりすることを意味します。全体のアプリがクラッシュすることはまれですが、レビュアーはHuaweiのデバイスでテストし、死んだボタンや空白の画面はよく却下される理由です。
ステップ2:Google Playサービスを実行時で検出する
コンテキスト:Capgoのページ。役割:UIラベル。見られる場所:about.astroのページ。メッセージキー`about_how_step_label` (About How Step Label)。 com.google.android.gms Capacitorがインストールされています。 Capacitor Android プロジェクトに小さなローカル プラグインを追加してください。
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);
}
}
登録する MainActivity.java ステップ 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);
}
}
前 <queries> ブロックを android/app/src/main/AndroidManifest.xml, inside <manifest>:
<queries>
<package android:name="com.google.android.gms" />
<package android:name="com.huawei.hwid" />
</queries>
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();
}
パッケージの存在は妥当なプロキシです。Google Playサービスが最新か有効かを判断するには、必要な場合は com.google.android.gms:play-services-base と使用 GoogleApiAvailability.isGooglePlayServicesAvailable()ステップ3: 予備の機能を使用してください
結果を使用して機能をオン/オフ切り替えてください:
実用的なフォールバック:
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();
}
}
}
サインイン:
- Sign-inを使用して、表示するプロバイダーだけを初期化します。
@capgo/capacitor-social-login決済: - PaymentsPackage 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
- PushHuawei Push Kitを使用してHMSデバイスにアプリを配布します。公式のCapacitorプラグインはありません; HuaweiはCordovaプラグインを公開しています。
@hmscore/*Capacitorで動作するものや、Push Kit SDKの周りで小さなネイティブプラグインを書くこともできます。 - MapsMaps
- : WebView 内で Web マップ (Leaflet、MapLibre GL JS) を使用すると、すべてのデバイスで動作します。 Huawei Map Kit も使用できます。Huaweiで、AppGalleryのページへのリンクを表示するのではなく、PlayレビューのAPIを表示します。
- アプリストアへのリンクStore links
appmarket://details?id=com.example.app: “アプリを更新” ボタンは AppGallery (
) で Huawei デバイスで開きます。Play Store ではありません。
ステップ 4: HUAWEI Developers アカウントの登録
- Huawei ID を作成してください developer.huawei.com.
- 完了 個人または企業の身分確認を完了してください。 個人はID証明書と銀行カード情報を提供し、企業は事業登録書類を提供します。 確認は通常1~2日で完了します。 アカウントの種類と国/地域を慎重に選択してください。 Huaweiでは個人アカウントを企業アカウントに変換することはできず、確認済みの国/地域は後で変更できません。
- 無料です。
ステップ 5: AppGallery Connect でアプリを作成してください
ステップ 5: AppGallery Connect でアプリを作成
- 開く AppGallery Connect > My apps > New app.
- プラットフォーム: Androidデバイス: モバイル電話 (タブレットもカバーします).
- アプリ名、デフォルト言語、パッケージ名。パッケージ名は
appIdincapacitor.config.tsアプリのカテゴリを選択してください。 - ステップ 6: リリース パッケージをビルドして署名する
Step 6: Capgoでリリースパッケージをビルドして署名する
AppGallery は APK と AAB を受け付けます。APK ルートはシンプルです: 自分のキーで署名し、Huawei は署名キーを保持する必要がありません。
bun run build
bunx cap sync android
cd android
./gradlew assembleRelease
署名を設定する android/app/build.gradle (環境変数からパスワードを読み込むか keystore.properties、コミットしない):
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は android/app/build/outputs/apk/release/が必要な場合は、 Androidのキーストア生成ツール を使用してキーストアを作成します。安全に保管してください: すべてのアップデートは同じキーで署名する必要があります。
AABをアップロードする場合は、AppGalleryはApp Signingサービスを必要とし、Huaweiは最終的な署名キーを生成し、保管します。これはPlay App Signingと同じモデルです。
アップロードする前に確認する必要があるいくつかの事項があります。
versionCodeバージョン番号は- アップロードごとに増加する必要があります。
- APK内のアプリ名は、AppGalleryのリスト名と一致する必要があります。
- 中国大陸以外で配布する場合は、リストに英語(米国)を追加してください。
2026年9月30日以降、Androidの開発者認証はブラジル、インドネシア、シンガポール、タイでインストールされた認定機器に適用されます。GoogleサービスのないHuawei機器はGoogle認定機器ではありませんが、Google Play以外からインストールされる場合、Android Developer Consoleにパッケージ名を登録する必要があります。
ステップ7: リストの準備
| フィールド | 要件 |
|---|---|
| アイコン | 216 x 216 の PNG (512 x 512 も可)、角を丸めない |
| スクリーンショット | 3 から 8、450 x 800 または 800 x 450 px (または比例的に大きい)、同じ方向 |
| 簡単な紹介 | 80 文字以内 |
| 紹介 | 8,000 文字以内 |
| プライバシーポリシー URL | アプリが個人情報を収集する場合にのみ必要 |
| 年齢制限 | AppGallery Connect内のアンケート |
| テストアカウント | ログイン機能がある場合に必要 |
| 配信先の国/地域 | 配信先の国/地域を明示的に選択 |
Google Playロゴ、他のメーカーがブランドしたAndroidデバイスフレーム、または「Google Playでゲット」バッジを表示するスクリーンショットを再利用しないでください。Huaweiは他のストアを参照するリストを拒否します。残りのアセットについては、他のストア用に作成したものを再利用してください。 App StoreとGoogle Playのリストガイド それらをカバーしています。
8. アップロード、提出、レビュー
- In バージョン情報 > ドラフト, APKをアップロードしてください。 ソフトウェアバージョン.
- ソフトウェアバージョン
- リスト、評価、プライバシー、国を入力してください。
- 承認後すぐまたは予定時刻にリリース日を設定します。
レビューは通常数日間で完了します。却下はメールで届き、ガイドラインの参照が含まれます。Capacitor アプリの一般的な理由です:
- Google Play サービスなしで機能しない機能 (ログインボタンが何もしない、地図画面が空白)。
- アプリの重複: AppGallery から別の開発者が作成したアプリと同じパッケージ名のアプリがすでに存在している、またはGoogle PlayからHuaweiがアプリをコピーした場合に発生します。アプリの所有権を証明するものと共に、Huaweiの開発者サポートに連絡してください。
- 他のストアの参照 スクリーンショットやテキストに含まれていません。
- Englishが欠けている 国際配布用に
- プライバシーポリシー アプリ内からアクセスできない、または存在しない
AppGallery Connectには、最初のバージョンが公開されたらCIから自動でアップロードできるPublishing APIもあるので、CIからアップロードを自動化できます。
ステップ9:更新を速く
コンテキスト:Capgoのページ。役割:UIラベル。見られる場所:about.astroのページ。メッセージキー`about_how_step_label` (About How Step Label)。 Capgo ライブアップデート Capgoライブアップデート
bunx @capgo/cli@latest bundle upload --channel huawei
Huaweiビルドのデフォルトチャンネルをビルド時に入れ、またはアプリからデバイスをチャンネルに割り当てることができます。 Capgo updater docs __CAPGO_KEEP_0__アップデータドキュメント
チェックリスト
- 依存関係のアウディットが完了し、GMSのみの機能がリストされました
- 実機Huaweiデバイスで実行されたRuntimeサービスチェックが追加されテストされました
- Googleのみの機能が非表示または置き換えられました(プッシュ、サインイン、請求、地図、レビュー)
- HUAWEI Developersアカウントが確認されました
- 同じパッケージ名でアプリを作成しました
capacitor.config.ts - バックアップされたキーストアで署名されたリリースAPK
versionCodeバージョンアップ - アイコン、3から8のスクリーンショット、簡単な説明と詳細な説明、プライバシーポリシー
- リストアセットにGoogle Playの参照がない
- レビュアー用のテストアカウントが必要なら
- 提出済み、レビュー用のメールを監視中
Google Playも準備している場合は、 AppleとGoogle Playの開発者アカウントの作成方法 を読んでください。