あなたは、テストフライトまたはGoogle Playから新しいビルドをダウンロードしてインストールすることなく、特定のユーザーに直接変更を送信し、即時レビューとフィードバックを受け取ることができるようにしたいと思ったことはありませんか?
私は、改善を実装することができましたが、結果をユーザーに提供するためにアップデートをすべてのユーザーに送信するリスクを伴うことや、クライアントに一時的なビルドを作成することの手間を避けるために、クライアントに一時的なビルドを作成することを求められました。
開発者は、非技術的なステークホルダー、QA、または適切な場合のユーザー全体に異なるアップデートを提供できるようにしたいと思っていました。
生産ビルドは、ワークインプロセス版に切り替え、フィードバックを収集し、再び生産に戻ることができませんでした。
それは チャンネルサーフィング を可能にします。ユーザーのデバイスにインストールされたアプリは、実行時でアップデートチャンネルを切り替えることができ、生産アプリをレビューと反復のための柔軟なスペースに変えることができます。特に、非技術的なステークホルダーが生産アプリを使用して変更をテストし、フィードバックを直接提供できるため、非常に便利です。
アップデートチャンネルの理解
アップデートチャンネルは、Capgoが特定のビルドにアップデートを送信する方法です。各ビルドはチャンネルと関連付けられており、そのチャンネルはどのアップデートを受け取るかを決定します。
たとえば、ユーザーに影響を与えないようにして、 preview チャンネル production. 以前は、チャンネルを切り替えるには、別のネイティブビルドをインストールするか、ダッシュボードを通じてデバイスの割り当てを手動で変更する必要がありました。
Channels in Capgo allow you to:
- 特定のユーザーグループに異なる機能を対象にする
- A/Bテストを行うためにユーザーを異なるチャンネルに割り当てる
- 新機能を段階的にロールアウトする
- ベータテストプログラムを作成する
- 個々のユーザーを通じて生産環境の問題をデバッグする
アップデートチャンネルについては、 Capgo channels documentation 詳しくはこちら。
チャンネルサーフィングとは?
チャンネルサーフィングは、インストール済みのアプリが、再インストールせずに異なるアップデートストリームからデータを取得できる機能です。インストール済みのアプリは、実行時にはアップデートチャンネルを切り替えることができ、切り替えたチャンネルからアップデートを受け続けることができます。
製品オーナーまたはQAがチャンネルを切り替えることができる production build to, for example, a preview channelを試すには、最新の変更を試す。テストが完了したら、戻る。 production また、再インストールや別のプレビュー ビルドが必要ありません。
アプリの下部では、チャンネルサーフィングは、アプリがアップデートクライアントに使用するチャンネルを指定することで機能します。 その選択は実行時で変更でき、クリアまたは置き換えされるまでそのまま残ります。
チャンネル・サーフィングの実装方法
プロジェクトをチャンネルサーフィングで試す前に、まずCapgo Live Updatesをプロジェクトに設定する必要があります。その設定方法はこちらです。 Capgo クイックスタートガイド.
The only setup required for channel surfing is enabling “Allow devices to self associate” on each channel you want to switch to in the Capgo dashboard. Capgoでは、codeの変更や設定の変更は必要ありません。
チャンネル間の切り替えは、単一の API 呼び出しによって推進されています。
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({ channel: 'your-channel' });
Capgoは、Capgoからアップデートを検索する際に使用するチャンネルを設定します。 APIを詳しく知る.
即時チャネル切り替え (v5.34.0+)
プラグインバージョン 5.34.0、6.34.0、7.34.0、または 8.0.0 (あなたのメジャーバージョンに応じて) から (依存する) setChannel() 機能が異なり、速くなりました:
- バックエンド検証 (読み取り専用): Capgo バックエンドにリクエストが送信され、チャネルが許可されているかどうか検証されます
- ローカルストレージの更新: 検証が成功すると、デバイスのローカルストレージにチャネルが保存されます
- 即時効果: 次の更新チェックでは、新しいチャネルが即座に使用されます
以前は setChannel() 保存されたチャンネルオーバーライドはバックエンドデータベースに保存されます (Dashboard または API の変更と同様)。デバイスは、バックエンドの再複製 (最大 2 分) が完了するまで、新しいチャンネルの認識を待つ必要があります。新しい動作は、バックエンドからのみ読み取り (検証用) して、ローカルに保存するため、チャンネル切り替えは即時になります。
完全なチャンネル切り替えフロー
より良いユーザー体験を提供するために、チャンネルを切り替えてアプリを再起動するだけではありません。一般的なアプローチは、すぐにアップデートを確認し、利用可能であればダウンロードし、アプリを再読み込みして、ユーザーが選択したチャンネルのアップデートに直接到達するようにすることです。
一般的なフローは次のようになります:
- チャンネルを変更する
setChannel) - アップデートを確認する
getLatest) - アップデートを取得して適用する
download,setまたはnext) - アプリを再読み込みする (必要に応じて)
reload)
ここでは、完全な例を示します:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
async function switchChannel(selectedChannel: string) {
try {
// 1. Set the updates channel (with optional auto-update trigger)
await CapacitorUpdater.setChannel({
channel: selectedChannel,
triggerAutoUpdate: true // Immediately check for updates
});
console.log(`Switched to channel: ${selectedChannel}`);
// If you want more control, handle the update manually:
// const latest = await CapacitorUpdater.getLatest();
// if (latest.url) {
// const bundle = await CapacitorUpdater.download({
// url: latest.url,
// version: latest.version
// });
// await CapacitorUpdater.set({ id: bundle.id });
// }
} catch (error) {
console.error('Failed to switch channel:', error);
}
}
// Switch to the beta channel
switchChannel('beta');
このフローの構造はあなた次第です。ステップを複数のインタラクションに分割したり、すべてを一度に実行したりすることができます。どのように構造化するかはあなた次第ですが、失敗を考慮することを忘れないでください。ネットワークの問題や無効なチャンネルはすべて、アップデートの適用を防ぐことができます。
唯一の要件: 自動割り当てを有効にする
このようにするだけです。 アプリがチャンネルを切り替えるために使用する前に setChannel()、チャンネルを切り替えるには、Capgo ダッシュボードでそのチャンネルに自己割り当てを有効にする必要があります。
- ダッシュボードの チャンネル section in your Capgo dashboard
- チャンネル名をクリックしてください
- 許可 “Allow devices to self associate”
- 変更を保存

それだけです。アプリの設定変更は必要ありません。 defaultChannel 設定が必要です。チャンネルをユーザーが切り替えることができるように、チャンネルごとに自我割り当てを有効にします。
この設定が無効になっている場合、チャンネルを呼び出すと失敗し、イベントが発生します。 setChannel() このチャンネルを呼び出すと失敗し、イベントが発生します。 channelPrivate イベントが発生します。
利用可能なチャンネルのリスト
自我割り当てが有効になっているチャンネルのみを返します。
const { channels } = await CapacitorUpdater.listChannels();
console.log('Available channels:', channels.map(c => c.name));
// Use this to build a channel selector UI
現在のチャンネルを取得
デバイスが現在割り当てられているチャンネルを確認します。
デフォルトのチャンネルに戻す
const { channel } = await CapacitorUpdater.getChannel();
console.log('Current channel:', channel);
チャンネルオーバーライドを削除し、デフォルトに戻します。
デバイスを特定のチャンネルから解除し、デフォルトのチャンネルに戻します。
await CapacitorUpdater.unsetChannel({});
デバイスを特定のチャンネルから解除し、デフォルトのチャンネルに戻します。 defaultChannel config またはクラウドのデフォルトを確認してください。
チャンネルサーフィングのテスト方法
チャンネルサーフィングを実際に確認するには、リリースビルドが必要です - __CAPGO_KEEP_0__ はリリースビルド用に設計されています。デバッグビルドの場合、アプリは通常開発サーバーから JavaScript を読み込むのではなく、通常の更新フローを回避します。 @capgo/capacitor-updater API is designed for release builds. In debug builds, the app typically loads JavaScript from a development server instead, which bypasses the normal update flow.
チャンネルサーフィングの唯一の要件は、各チャンネルで "デバイスが自ら関連付けを許可する" を有効にすることです。アプリの設定変更は必要ありません。
テストビルドの作成 通常のビルドを実行します: 次に、Xcode または Android Studio を使用してネイティブビルドを作成するか、CI/CD パイプラインを使用します。アプリは、__CAPGO_KEEP_0__ ダッシュボードで設定されているクラウドのデフォルトチャンネルから始まります。
異なるチャンネルへの更新の公開
__CAPGO_KEEP_0__
bun run build && npx cap sync
Capgo
__CAPGO_KEEP_0__
アプリがインストールされたら、異なるチャンネルにアップデートを公開します:
# Publish to preview channel
npx @capgo/cli@latest bundle upload --channel preview
# Publish to production channel
npx @capgo/cli@latest bundle upload --channel production
その後、アプリ内でチャンネルを切り替えるUIに移動し、チャンネル切り替えをトリガーします。アプリは選択したチャンネルからアップデートを取得し、新しいアップデートにリロードします。
チャンネル切り替えUIを作成する
チャンネルサーフィングは、通常、すべてのユーザーに公開したくない機能です。たとえば、ユーザーが認証された従業員のみに、プレビュー チャンネルにアプリを切り替えるボタンを提供することができます。
チャンネル切り替えUIの例
import { useState, useEffect } from 'react';
import { CapacitorUpdater } from '@capgo/capacitor-updater';
export function ChannelSwitcher() {
const [currentChannel, setCurrentChannel] = useState<string>('');
const [availableChannels, setAvailableChannels] = useState<string[]>([]);
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
loadChannelInfo();
}, []);
async function loadChannelInfo() {
const { channel } = await CapacitorUpdater.getChannel();
setCurrentChannel(channel || 'default');
const { channels } = await CapacitorUpdater.listChannels();
setAvailableChannels(channels.map(c => c.name));
}
async function handleChannelSwitch(channel: string) {
setIsLoading(true);
try {
await CapacitorUpdater.setChannel({
channel,
triggerAutoUpdate: true
});
setCurrentChannel(channel);
// App will update in background or on next restart
} catch (error) {
console.error('Failed to switch channel:', error);
} finally {
setIsLoading(false);
}
}
return (
<div>
<p>Current channel: {currentChannel}</p>
<div>
{availableChannels.map(channel => (
<button
key={channel}
onClick={() => handleChannelSwitch(channel)}
disabled={isLoading || channel === currentChannel}
>
Switch to {channel}
</button>
))}
</div>
</div>
);
}
OTAアップデートの注意点
これらはすべてチャンネルサーフィングに特有のものではありませんが、実行時チャンネル切り替えを開始すると、すぐに現れます。
実行時バージョン不一致
アップデートはCapgoに紐付けられています。インストール済みのアプリのネイティブバージョンと一致しないネイティブバージョンのアップデートはダウンロードされず、適用されません。チャンネルサーフィングの場合、通常、アプリはチャンネルを切り替えますが、更新が適用されないことがあります。チャンネルにアップデートが存在しているにもかかわらず。
この場合、通常、アップデートは異なるネイティブバージョンのアプリから公開されました。チャンネルのバンドルが、デバイスにインストールされているネイティブバージョンと互換性があることを確認してください。
アップデートの削除または取り消し
アプリがすでにチャンネルにアップデートをダウンロードしている場合、Capgo ダッシュボードからアップデートを削除しても、すでにアップデートをダウンロードしているデバイスからアップデートを削除することはできません。削除はアップデートのダウンロードを停止するだけです。 将来 ダウンロード。
不正のアップデートを解消する最も信頼できる方法は、同じチャンネルに知られている良いアップデートを公開することです。この方法で、チャンネルの履歴の先頭に新しいアップデートが作成され、クライアントはこれを最新のバージョンとして適用します。
Capgoは、クライアントに前の安定したアップデートを再適用するか、ビルドに組み込まれたアップデートに戻るように指示するロールバックメカニズムも提供します。
データ移行に関する考慮事項
チャンネルを切り替えることは、アプリが実行するJavaScriptバンドルを変更します。アプリがチャンネル間で互換性のないマイグレーションやデータの形状に依存している場合、前後逆に切り替えることで問題が生じる可能性があります。
例えば、ベータアップデートがデータベースのマイグレーションを適用した場合、プロダクションバージョンは新しいスキーマを理解できない可能性があります。開発者は、更新がチャンネル間で安全に切り替えられるようにするか、必要に応じて切り替えを一方向に制限する必要があります。
チャンネルサーフィングは、プロダクション環境で変更を迅速にレビューする必要がある場合に特に役立ちます。
迅速な検証
急いで修正するバグが検証される必要がある場合、チャンネルサーフィングを使用すると、変更が小規模なユーザーに限定され、検証される前にプロダクションに広く展開されるのを防ぐことができます。
ステークホルダーによるレビュー
Stakeholder Review
A product owner or QA can switch their installed production build to another update channel, verify the fix or feature, and then switch back again once they’re done.
Streamlined Testing
Capgoのソリューションでは、非技術的なステークホルダーをレビューと決定に参加させることができます。ワークフローはスムーズに保たれます。1つのプロダクションビルドは、テスト、フィードバック、検証のための柔軟なツールになります。
Use Cases
- QA Testing: QAチームは機能ブランチ間で切り替えることができます。
- Beta Programs: ユーザーは早期アクセスを目的としてベータチャンネルに参加することができます。
- Stakeholder Review: プロダクトオーナーはリリース前に変更をプレビューすることができます。
- A/B Testing: ユーザーを異なるチャンネルに割り当てることで実験を行うことができます。
- デバッグ: 特定のユーザーをデバッグチャネルに切り替えて問題を診断する
比較: チャネル変更方法
| 方法 | 効果時間 | 保存先 | __CAPGO_KEEP_0__ |
|---|---|---|---|
setChannel() from プラグイン |
即時 | デバイスのみ (ローカル) | アプリ内でユーザーが行うチャネル切り替え |
| デバイスオーバーライド | 最大 2 分 | バックエンド データベース | 特定のデバイスに対する管理者による変更 |
| API チャンネル割り当て | 最大 2 分 | バックエンド データベース | 自動バックエンド統合 |
チャンネル切り替え UI を構築する際の最良のユーザー エクスペリエンスを確保するには、常にプラグインの setChannel() ベスト プラクティス
アクセス制限
- : 通常、チャンネルサーフィングは内部使用用 - すべてのユーザーに公開しないでくださいmethod
- エラーを処理する: チャネル切り替え時には、エラーを優雅に処理する
- 互換性を検証する: インストール済みのネイティブバージョンと異なるチャネルでのアップデートは互換性があることを確認する
- チャネルを記録する: 各チャネルが何のために使用されているかを明確に記録する
- 使用状況を監視する: デバッグ用に、どのデバイスがどのチャネルに接続されているかを追跡する
リソース
まとめ
チャンネルサーフィングは、Capacitor アプリの開発を変える。生産用ビルドは、テスト、検証、迅速な開発のための柔軟なツールになります。
最近のプラグインバージョンで導入された即時チャンネル切り替えにより、体験はすでにシームレスです - ユーザーはチャンネルを切り替えると、待ち時間なしで新しいチャンネルからの更新を受け取ることができます。
バグ修正の検証やベータプログラムの実行、または特定のユーザーで問題をデバッグするなど、チャンネルサーフィングは、正しいアップデートを正しいユーザーに正しいタイミングで配信できるようにするための柔軟性を提供します。
Channel Surfing for Capgo の続き: Capgo を実行時間でアップデートチャンネルを切り替える方法
Channel Surfing for __CAPGO_KEEP_0__: How to Switch Update Channels at Runtime Channel Surfing for Capgo: How to Switch Update Channels at Runtime Channel Surfing for __CAPGO_KEEP_0__: How to Switch Update Channels at Runtime Channel Surfing for __CAPGO_KEEP_0__: How to Switch Update Channels at Runtime Channel Surfing for __CAPGO_KEEP_0__: How to Switch Update Channels at Runtime Channel Surfing for __CAPGO_KEEP_0__: How to Switch Update Channels at Runtime Capgoチャンネル切り替えの実装詳細については チャンネル Capgoリリースチャンネル機能名 Capgoソリューションマーケティングページ 短いUIラベルまたはナビゲーションアイテム ページソリューション/ホワイトラベル.astro メッセージキー`solutions_white_label_visual_cell2_value` (ソリューション ホワイトラベル ビジュアル セル2 値)