序文
When you start to enjoy the update system of Capgo, like me for my apps, you will start to get the feeling “What if I want more?”
私も同じように思ったのですが、自分がCapgoの開発者であるため、システムの内部を調べることができました。
すべてがオープンソースであるため、同じことがあなたにもできるのです。
Capacitorアプリ配布プロセスの次の痛みは、他のチームメンバーがアップデートをテストすることです。
テストフライトを使うと、問題は簡単です。チームに人が入って、それを理解させるのは時間がかかります。
アップルに送るたびに、BOTによるランダムレビュープロセスがあります。5分か5時間かかってもわかりません。
これは私のプレゼンテーションを何度も遅らせました…。
そしてGoogleでは、さらに悪いことです。私の生涯の謎です。リリースするプロダクションバージョンは2時間以下で、クローズベータバージョンは1–2日かかります。
解決策
この問題を解決するために、Capgoでチャンネルシステムを作りました。
npx @capgo/cli@latest bundle upload -c production すべてのユーザーにアップデートを送信します (プロダクションチャンネルがデフォルトに設定されている場合)
あなたが npx @capgo/cli@latest bundle upload -c development すると、バージョンは異なるチャンネルに到着します。このことが__CAPGO_KEEP_0__アクションで自動化できます。 GitHub action.
__CAPGO_KEEP_0__アクション
スーパーアトム化された方法
この方法は、チャンネルセット用に独自のバックエンドを作成しなくても便利です。この実装は速いです。
その場合、チャンネルを 1 つだけ許可する必要があります。

Capgo の code に追加してください。
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.setChannel({ channel: 'beta' })
Capgo の __CAPGO_KEEP_0__ に追加してください。
This can be useful for your internal team, this is fast to implement. Allow users to copy their deviceID from your app and send it to you manually, this code will help you to get it:
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
この方法は、内部チーム向けに便利です。この実装は速いです。
ユーザーがデバイス ID をコピーして、手動で送信することを許可することで、ユーザーがデバイス ID を取得する __CAPGO_KEEP_0__ を使用できます。 admin ボタンをアプリ内に隠しておきます。あるいは、特定のロールを持つユーザーだけにボタンを表示することもできます。
Capgo の Capgo にアクセスして、App Admin としてログインし、アプリを選択し、デバイスの一覧を表示します。
検索バーにデバイス ID を入力し、検索結果からデバイス ID を選択し、チャンネルリンクをクリックします。 developmentチャンネルリンクをクリックし、チャンネルを選択し、チームメンバーにアプリを開いて 30 秒待って、再度アプリを開いて閉じるように指示します。
彼はあなたのバージョンを受け取るはずです。
自動的な方法
この方法は、ベータテスター用に便利ですが、実装には時間がかかります。
この方法は、手動の方法と同じですが、デバイスIDを取得する必要があります。
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
この回数は、自動的にバックエンドに送信する必要があります。実装方法はあなた次第です。
データベースに保存することをお勧めします。後で役に立つでしょう。
バックエンドでは、Capgo バックエンドにも送信する必要があります。以下の2つのcode例があります。
Node.js
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)
}
ボディにデバイスIDを含めて、URLにPOSTで送信し、追加と削除のメソッドを使用してください。
この設定が完了したら、アプリにオプトインボタンを追加し、Webアプリで設定が有効かどうかを確認してください。
デバイスIDを送信することもできます。 null overrideを削除する
デバイスに設定されているoverrideをプログラムで確認する必要がある場合は、同じ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())
How to send specific update to one user or a groupの続きから進みます
Capgoを使用している場合 How to send specific update to one user or a group チャネルルーティングとステージドロールアウトを計画するには、Channelsと接続します チャネル チャネル チャネル チャネル チャネル チャネル ベータテスト ソリューション ベータテスト ソリューションにおける製品ワークフローについて、 バージョン ターゲット ソリューション バージョン ターゲット ソリューションにおける製品ワークフローについて。