Help us understand the problem. What is going on with this article?

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

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でこの仕様の改善した方が良いかアンケートをとっていた。
近い将来にこの仕様はひょっとすると変わるかもしれない。

kaba
React Native製アプリのヤミーを運営しています。Expo製なので、expoを実務で使う前にインストールしてみて下さい。https://play.google.com/store/apps/details?id=com.kabainc.yummy&hl=ja
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした