はじめに
私自身のアプリのように Capgo のアップデートシステムを活用し始めると、「もっと細かく制御できたら?」と感じる瞬間がやってきます。
私も同じように感じましたが、Capgo の開発者なので、その仕組みを直接確認することができました!
すべてがオープンソースなので、あなたもその力を手に入れることができます :)
Capacitor のアプリ配信プロセスで次に直面した課題は、他のチームメンバーにアップデートをテストしてもらうことでした。
TestFlight の場合、問題は単純です。チームに人を招いて、入手方法を理解してもらうのに時間がかかります!
もちろん、Apple に送信するたびにボットによる審査が入ります。5 分で終わるか 5 時間かかるかは運次第で、まったく予測できません。
このせいでプレゼンが遅れたことが何度もあります…。
Google はさらにひどく、僕の人生最大の謎です。本番バージョンのリリースは 2 時間もかからないのに、クローズドベータのリリースには 1〜2 日かかります。
ソリューション
これを解決するために、Capgo に Channel システムを作りました。
npx @capgo/cli@latest bundle upload -c production すべてのユーザーにアップデートされます(production Channel がデフォルトに設定されている場合)
もしそうすれば npx @capgo/cli@latest bundle upload -c development そのバージョンは別の Channel に配信されます。これは次の方法で自動化できます: GitHub アクション.
Channel 経由でユーザーにアップデートを届ける方法は 2 つあります。
超自動化の方法
チャンネル設定用のバックエンドを自前で構築したくない場合に便利で、実装も速いです。
この方法では、チャンネルの1つを「self」に設定できるように許可するだけで済みます。

次に、Ionic アプリの code にこれを追加します。より良い体験のために、ユーザーが「ベータ版に登録」のようなボタンをクリックした後に使うのがおすすめです。
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.setChannel({ channel: 'beta' })
手動で行う方法
社内チーム向けにも便利で、実装も速いです。 ユーザーがアプリから deviceID をコピーして手動で送信できるようにする場合、この code が取得に役立ちます:
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
アプリ内のどこかにボタンを隠すか、接続済みユーザーにだけボタンを表示します。条件は admin 例えばロールです。
次に、Web アプリまたはネイティブアプリの Capgo に移動し、アプリ管理者としてログインして、対象のアプリを選択し、デバイスリストをクリックします。
検索バーに deviceID を入力して該当するものをクリックし、Channel リンクをクリックして、目的の developmentを選択します。その後、チームメンバーにアプリをもう一度開いてもらい、30秒待ってから開いて閉じてもらってください。
彼にあなたのバージョンが届くはずです。
自動で行う方法
ベータテスターには便利ですが、実装には時間がかかります。
手動で行う方法と同様に、deviceIDを取得する必要があります。
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
ただし、今回はそれをバックエンドへ自動で送信する必要があります。実装方法は自由です。
後々楽になるので、データベースに保存しておくことをおすすめします。
その後、バックエンド側から Capgo のバックエンドへも送信する必要があります。以下に code の例を2つ示します:
NodeJS
import axios from 'axios'
await axios.post('https://api.capgo.app/device', {
app_id: 'YOUR_APP_ID',
device_id: 'DEVICE_ID',
channel: 'CHANNEL_NAME', // The name of the channel, or undefined if version_id provided
version_id: 'VERSION_NAME' // this is optional, if provide it will override the channel, that useful when you want to debug only one user.
}, {
headers: {
authorization: 'YOUR_API_KEY' // choose a key with 'write' or 'all' rights
}
})
Cloudflare
addEventListener('fetch', (event) => {
event.respondWith(
handleRequest(event.request).catch(
err => new Response(err.stack, { status: 500 })
)
)
})
async function handleRequest(request) {
const { pathname, method } = new URL(request.url)
const body = await request.json()
const newBody = JSON.stringify({
app_id: 'YOUR_APP_ID',
device_id: body.device_id,
channel: 'alpha'
})
const newUrl = new URL('https://api.capgo.app/device')
const options = {
headers: {
authorization: 'YOUR_API_KEY',
},
method: 'POST',
body: newBody
}
if (request.method === 'DELETE') {
// DELETE the channel link
options.method = 'DELETE'
return fetch(newUrl.toString(), options)
}
return fetch(newUrl.toString(), options)
}
追加はPOST、削除はDELETEメソッドで、デプロイ済みURLへdevice_idをbodyに入れて送信するだけです。
設定が済んだら、アプリにチャンネルへのオプトインボタンを追加し、Webアプリで設定されているか確認してください。
以下を送信することもできます。 null オーバーライドを解除するには
デバイスに設定されているオーバーライドをプログラムで確認する必要がある場合は、同じURLから取得できます
import axios from 'axios'
const res = await axios.get('https://api.capgo.app/device?app_id=YOUR_APP_ID&device_id=DEVICE_ID', {
headers: {
authorization: 'YOUR_API_KEY' // choose a key with 'write' or 'all' rights
}
})
console.log('data', res.json())
「特定のユーザーまたはグループに特定のアップデートを送信する方法」の続きはこちら
使用している場合 特定のアップデートを1人のユーザーまたはグループに送信する方法 チャンネルルーティングと段階的ロールアウトを計画するには、次と組み合わせてください: チャンネル Channelsの実装の詳細については、 チャンネル Channelsの実装の詳細については、 チャンネル Channelsの実装の詳細については、 ベータテストソリューション ベータテストソリューションのプロダクトワークフロー向け、および バージョンターゲティングソリューション バージョンターゲティングソリューションのプロダクトワークフロー向け。