で紹介したように、Google Playの新しい個人アカウントのルール下において、Live Updateは大きな存在感をみせるようになりました。また、それ以外でも、審査を受けることなくネットワーク経由にWebアセットを更新できるのは、不具合を見逃して配信してしまったアプリをすばやく修正するための方法であり、これによりユーザの離脱などを防ぐことができます。
ちなみに私は過去、課金アカウントでしかテストをしていなかったため、無料ユーザはメイン機能が使うことができない不具合をだしたままアプリをリリースしたことがあります。まじでユーザ離れました。
Live Updateはとても有用な手段ですが、アプリを配信する前にLive Updateの設定をアプリに仕込んでおく必要がある点が重要です。不具合をだしてからLive Updateを設定しようと思ったら、審査を受ける必要があり本末転倒なので、Live Updateは転ばぬ先の杖として 念のために まず設定することがおすすめです。
それでは、Live Updateを設定できるメジャーな3つの方法をみていきます。
1. Appflow
Ionicの公式サービスです。Live Updateの仕組みだけではなく、アプリストアへのデプロイや、デプロイ前のWebでのなど様々な機能が揃っています。
各種機能をみていると、CapacitorやCordova、React Nativeの開発を支えるプラットフォームという感じで、CI/CDだけではなく、これを利用することで開発者体験を一段向上を目指してるところがあります。ただ、様々な機能があるだけに、「Live Updateだけをみた時の金額」は少し高めに設定されています。
フリープラン | Communityプラン | Basicプラン | Enterpriseプラン |
---|---|---|---|
100ユーザ | 500ユーザ | 4,500ユーザ | Custom |
無料 | 月49ドル | 月499ドル | Custom |
ユーザ数は月毎なので、実際のところは月間アクティブユーザ相当になるかと思います。私は今のところ、これが手厚いのでフリープランで設定しておいて、大きなトラブルがあった時にいつでも上位プランにトラブルがあった当月だけ移行するようにしています。
2. Capgo
ロンドンのDigital Shift OU社が提供するCapacitorのLive Updateツールです。
AppFlowと比べてLive Updateの機能だけをもっているだけ比較的安価ですので、まずは通常サービスの利用を検討してみてはいかがでしょうか。プランは以下の通りです。
フリープラン | SOLOプラン | MAKERプラン | TEAMプラン |
---|---|---|---|
250回 | 2,500回 | 25,000回 | 150,000回 |
250ユーザ | 2,500ユーザ | 25,000ユーザ | 150,000ユーザ |
無料 | 月14ドル | 月39ドル | 月99ドル |
料金体系が違い、Live Updateの数か、アクティブユーザの数かの多い方が適用されます。
3. 自己ホストする
とは言っても、Live Updateは、アプリ起動時にzipファイルをみにいって、現在のバージョンと異なればそれを現在のWebアセットのフォルダと入れ替えるだけです。これらのサービスを使うと、以下を自分でハンドリングする必要がなくなりますが、自分で実装することも可能です。
- アップデートの有無の確認
- 自動復帰
- アップデートに失敗した時のメール警告
- チャンネルの設定
- 更新の統計
- ダウンロード失敗時の更新
例えば上記で紹介したCapgoは100%OSSを謳っており、すべてのコードが公開されています。サービスとして自動化されている部分を以下のように自分で設定することで自己ホストが可能です。
import { CapacitorUpdater } from '@capgo/capacitor-updater'
import { SplashScreen } from '@capacitor/splash-screen'
import { App } from '@capacitor/app'
let data = {version: ""}
CapacitorUpdater.notifyAppReady()
App.addListener('appStateChange', async(state) => {
if (state.isActive) {
// Do the download during user active app time to prevent failed download
data = await CapacitorUpdater.download({
version: '0.0.4',
url: 'https://github.com/Cap-go/demo-app/releases/download/0.0.4/dist.zip',
})
}
if (!state.isActive && data.version !== "") {
// Do the switch when user leave app
SplashScreen.show()
try {
await CapacitorUpdater.set(data)
} catch (err) {
console.log(err)
SplashScreen.hide() // in case the set fail, otherwise the new app will have to hide it
}
}
})
更新頻度による話にはなりますが、軽微でもいいので毎日のアプリ更新を目指しているようなところは、サービスを使うとコストパフォーマンスが見合わない可能性が高いので、こういったのを自作することを検討するといいかと思います。
それではまた。