# 配信チャネルと段階的リリース

チャネルをネイティブビルドに設定し、ネイティブバージョンごとの配信対象と割合を管理して安全にリリースします。

## セットアップを選択してください {#before}

1 つのディストリビューションの場合、チャネルを未設定のままにして、`default` を使用します。ストアまたは内部テスターが個別の更新を必要とする場合は、追加のチャネルを構成します。

このガイドでは、Android `huawei` チャネルを作成し、それをアプリに書き込み、結果のビルドを登録し、更新を公開します。

## チャンネルとは {#what-is-a-channel}

1 つのアプリケーションは、対象となる Huawei デバイスの 10% と対象となる Xiaomi デバイスの 100% に個別にリリースできます。

|フィールド |例 |どこに設定するか |
| --- | --- | --- |
|表示名 |ファーウェイストア |コンソール |
|チャンネルコード | `huawei` |コンソールとネイティブアプリ。値は一致する必要があります |
|ネイティブバージョン | `1.0.0` | Android バージョン名 / iOS アプリ バージョン |

## 1. チャネルを作成する {#manage}

1. サインインし、**アプリケーション**を開き、アプリケーションを入力します。
2. **チャンネル**を開き、**チャンネルの作成**を選択します。
3. コードとして `huawei` を入力し、読み取り可能なチャンネル名を入力します。
4. ホット アップデートを有効にし、タイムスタンプ/フィンガープリント チェックを無視するオプションを無効のままにします。ネイティブ ダウンロード URL は空のままにすることができます。
5. 保存してチャンネルが表示されることを確認します。

コードには、1 ～ 64 個の小文字、数字、ドット、アンダースコア、またはハイフンが含まれます。作成後に編集することはできません。別の `default` チャネルを作成しないでください。

または、アプリを選択した後:

```bash
pakta createChannel --name huawei --code huawei
pakta channels --platform android
```

## 2. ネイティブアプリを構成する {#identity}

以下のプラットフォームに従ってください。 **チャンネルは、インストールされたネイティブ ビルドに属します。 `new Pakta()` もアップロード フラグもこれを変更しません。編集後に再構築してインストールします。**

### アンドロイド {#android}

`android/app/src/main/AndroidManifest.xml` で、これを既存の `<application>` 内に追加します。他の属性とアクティビティはそのままにしておきます。

```xml title="android/app/src/main/AndroidManifest.xml · inside application"
<meta-data android:name="channel" android:value="huawei" />
```

`android` ディレクトリからビルドします。

```powershell title="Windows"
.\gradlew.bat assembleRelease
```

```bash title="macOS / Linux"
./gradlew assembleRelease
```

プロダクト フレーバーがない場合、出力は通常 `android/app/build/outputs/apk/release/app-release.apk` になります。正確な APK をインストールして保管してください。

既存のフレーバーの場合は、マニフェスト値として `${PAKTA_CHANNEL}` を使用し、`android/app/build.gradle` の関連フレーバー内に `manifestPlaceholders = [PAKTA_CHANNEL: "huawei"]` を設定します。すべてのフレーバーに値を指定し、そのリリース ビルド タスクを実行します。

### iOS {#ios}

これらのエントリを **アプリ ターゲット** `ios/YourApp/Info.plist` のルート `<dict>` に追加します。

```xml title="Info.plist · inside dict"
<key>channel</key>
<string>appstore</string>
```

自動的に生成された plist の場合、アプリ ターゲットの **[情報] → [カスタム iOS ターゲット プロパティ]** の下に、`channel` という名前の文字列プロパティ (値は `appstore`) を追加します。ポッドの plist は編集しないでください。

コンソールで `appstore` を作成します。再度アーカイブし、IPA をエクスポートして保持し、対応するビルドをインストールします。

### HarmonyOS {#harmonyos}

[ネイティブ統合](/docs/getting-started#harmonyos) の後、`channel` を `harmony/entry/src/main/resources/rawfile/meta.json` に追加します。

```json title="harmony/entry/src/main/resources/rawfile/meta.json"
{
  "channel": "huawei"
}
```

既存のフィールドを保持します。 SDK Hvigor プラグインはチャネルを保持し、ビルド時間とバージョンを書き込みます。 DevEco Studio で `.app` に署名し、再構築します。インストールして保管してください。

### Expo {#expo}

手動でメンテナンスされる `android` / `ios` ディレクトリの場合は、上記のネイティブの手順に従ってください。 Expo `prebuild` または EAS では、次のエントリを `expo.plugins` に追加します。

```json title="app.json · expo.plugins"
{
  "expo": {
    "plugins": [
      ["rn-update", { "channel": "huawei" }]
    ]
  }
}
```

`channel` はAndroidのマニフェストメタデータとiOSの `Info.plist` に記録します。プラットフォームごとにビルド設定を分けてください。`default` チャネルではプラグイン設定は不要です。詳しくは[Expoガイド](/docs/expo#channel)を参照してください。

## 3. ビルドを確認してアップロードする {#verify}

アプリケーションのルートから:

```bash
pakta selectApp --platform android
pakta parseApk ./android/app/build/outputs/apk/release/app-release.apk
pakta uploadApk ./android/app/build/outputs/apk/release/app-release.apk --channel huawei
```

アップロードする前に、解析されたチャネルとネイティブ バージョンを確認してください。 `--channel` は値のチェックのみを行います。一致しない場合は、ネイティブ構成を修正して再構築します。

|フォーマット |検査 |アップロード |
| --- | --- | --- |
| APK | `parseApk PATH` | `uploadApk PATH --channel huawei` |
| ＡＡＢ | `parseAab PATH` | `uploadAab PATH --channel huawei` |
| IPA | `parseIpa PATH` | `uploadIpa PATH --channel appstore` |
|ハーモニーアプリ | `parseApp PATH` | `uploadApp PATH --channel huawei` |

コンソールで **ネイティブ ビルド**を更新します。チャネルとバージョンは、リリース ターゲットとして選択する前に表示される必要があります。

## 4. チャネルに公開する {#targets}

[`.ppk`](/docs/publish#bundle) をビルドして、次を実行します。

```bash
pakta publish .pakta/output/android.ppk --platform android --name fix-001 --channel huawei --packageVersion 1.0.0 --rollout 10 --no-interactive
```

`1.0.0` をアップロード済みのネイティブバージョンに置き換えます。独立したテストアプリでは 100% を指定し、本番配信は小さな割合から段階的に始めてください。ブラウザーでの操作は[コンソールからの配信](/docs/console#publish)を参照してください。

複数のチャネルにリリースするには、アプリのルートに次のファイルを作成します。

```json title="targets.json"
[
  { "channel": "huawei", "packageVersion": "1.0.0", "rollout": 10 },
  { "channel": "xiaomi", "packageVersion": "1.0.0", "rollout": 100 }
]
```

```bash
pakta publish .pakta/output/android.ppk --platform android --name fix-001 --targets targets.json --no-interactive
```

どちらのターゲットにも登録済みのネイティブ ビルドが必要です。 Android、iOS、HarmonyOS 用に個別にビルドして公開します。

## 調整、停止、回復 {#lifecycle}

更新行でターゲットのチャネル/バージョン ラベルをクリックするか、**公開**を開いて複数のターゲットを編集します。すべての変更をプレビューして確認します。

- **リリースをキャンセル**して、1 つの配信先への配信を停止します。
- **[チャンネル] → [設定]** でチャンネル全体を停止し、ホット アップデートをオフにして保存します。
- **完全なロールアウトにロールバック**を使用して、安定した履歴パッケージを同じチャネルおよびネイティブ バージョンに復元します。

配信を停止または割合を下げても、インストール済みのアップデートは削除されません。復旧時には、デバイスによる更新の確認、ダウンロード、有効化が必要です。[ロールバック手順](/docs/console#rollback)を参照してください。

## 内部テスト {#practices}

`internal` を作成し、それをテスト ビルドに書き込み、そのビルドをテスターに配布します。まずそこに公開し、検証してから実稼働チャネルにリリースします。コンソール チャネルの名前を変更しても、インストールされているデバイスはチャネル間で移動されません。
