47
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ExpoのOTAアップデートとrelease-channelについてまとめてみた。

Last updated at Posted at 2019-03-18

alt
expoには、OTAアップデートというものがある。

$ expo publish

と打つと、開発者のパソコンの中のコードを使い、ユーザーのスマホの中のアプリを書き換えると言う技術だ。
つまり、アプリのアップデートを審査を通さずに行える。
さらに、アップデートの反映までなんと0分。
夢の技術が標準でついている。

(通常は、アプリのアップデートは審査で3日待たされたりするからね。)

また、デフォルトでついてくる、release-channelと言う機能を使うと、channnel毎に、アップデートが出来るので、staginig環境、本番環境を、サードパーティライブラリなしに実現できる。

release-channelの使い方

$ expo publish --release-channel <環境名>
$ expo build:android --release-channel <環境名>

のように、release-channelの後ろに、任意の文字列を渡すだけ、

$ expo publish --release-channel 'staging'
$ expo build:android --release-channel 'production'

渡した、任意の文字列は、コードの中で、以下のように参照できる。

import { Constants } from 'expo'
const env = Constants.manifest.releaseChannel
console.log(env) // => 'staging' など、

環境変数を作りたいときは、

const appName = env === production ? '本番アプリ' : 'ステージングアプリ'

のように、するといい。

OTAアップデートでは注意するべき点がある

ユーザーがアプリをインストールして初めて開いた時、expo publishしたバージョンではなくgoogle playにアップしたバージョンがユーザーに表示される!!
一見 expo publishが失敗したように見える。
しかしユーザーが、アプリを一度閉じて次に開くと、OTAアップデートが反映されたアプリが表示される。

なぜこのようなことが起きるかは、以下の例を見ていただくと分かる。

つまり、OTAアップデートの数だけ、ユーザーはアプリを再起動する必要がある。

例えば、version 1 を

$ expo build:android --release-channel production

とし、google play consoleに、apkをアップデートする。
次に、デザインに修正を加えたversion2を

$ expo publish --release-channel production

とし、アップデートする。
次に、致命的なバグを直す、version3を

$ expo publish --release-channel production

として、アップデートする。

この時、google play storeから初めてアプリをインストールしたユーザーの挙動は以下のようになる。
〜初めてアプリを開く〜
version1が表示される。
〜2回目にアプリを開く〜
version2が表示される。
〜3回目にアプリを開く〜
version3が表示される。

つまり、ユーザは、最新のバージョンのアプリを開くためには、アプリをインストールした後、OTAアップデートの回数、アプリを再起動しなければならない!!!

大きな機能の変更は、google play consoleにapkファイルを上げ、軽微な変更はOTAアップデートを使うというよういに使い分けるのがベスト

OTAアップデートで出来ないこと

アイコンの変更
アプリの名前の変更
アプリのスプラッシュスクリーンの差し替え
expo sdkのバージョンアップ
など、、、

結論

・OTAアップデートは便利だが、大きな機能を追加するときは、きちんとAPKファイルなどをgoogle play storeに提出しないと痛い目を見ることになる。

・Expo.updates.reload()と言うメソッドが用意されているので、それを利用することで、OTAアップデートのタイミングを制御出来る。

・apkを更新したいなら、OTAアップデートではなく、素直に

expo update:android

を使用した方がいいようだ。
ただ、上のコマンドは、かなり色々セットアップが必要になる。

expo updateのやり方(公式ドキュメント)

おまけ

このヘンテコなexpo publishの挙動は、expo公式も問題視していて、twitterでこの仕様の改善した方が良いかアンケートをとっていた。
近い将来にこの仕様はひょっとすると変わるかもしれない。

47
35
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?