web-dev-qa-db-ja.com

エキスポアプリを強制的に更新するには

Expoで書かれたアプリを持っていますが、新しいビルドをプッシュする方法がわかりません。エキスポサイトでQRコードからアプリを実行すると、アプリは正しいのですが、アプリストアのネイティブアプリが更新されません。

私が使用している手順は、1)expビルド:Android 2)exp publishです。

アプリを実際に更新するにはどうすればよいですか?

8
Joel Jackson

TL; DR:OTA更新はデフォルトで適用されます。 App Storeの更新は、起動時にアプリのバージョンを確認するコードを追加することで実施できます。新しいバージョンがある場合は、アプリのページでApp Storeを開きます。

スタンドアロンのExpoアプリを更新する方法は2つあります。

  1. expo-cli publishを使用したOTAの更新
  2. Google Play/App Storeの使用

これらの方法にはどちらも長所と短所があります。

OTAアップデート

これは、更新がExpoアプリに配信される通常の方法です。 OTAは expo CLIツール を介して行われ、package.json設定に基づいて新しいJavascriptコードを提供します。このオプションには、リリースチャネルを使用してコードを公開するオプションもあります。つまり、まずステージング環境に更新をプッシュし、更新を検証してから、次のようにCLIを介して生産:

expo-cli publish -release-channel staging # pushes and update to the staging channel
expo-cli publish -release-channel production # pushes an update to the production channel

公開しているのにスタンドアロンアプリが更新されない場合は、コードを間違ったリリースチャネルにプッシュしている可能性があります。リリースチャネルの詳細については、 ここ を参照してください。

OTAはデフォルトで適用されます。

デフォルトでは、Expoはアプリの起動時に更新を自動的に確認し、最新の公開バージョンを取得しようとします。新しいバンドルが利用できる場合、Expoはエクスペリエンスを起動する前にそれをダウンロードしようとします。

ただし、app.jsonでupdates.enabledfalseに設定してこの動作を無効にし、独自のロジックを実装する(またはまったくしない)ことができます。

try {
  const update = await Expo.Updates.checkForUpdateAsync();
  if (update.isAvailable) {
    await Expo.Updates.fetchUpdateAsync();
    // ... notify user of update ...
    Expo.Updates.reloadFromCache();
  }
} catch (e) {
  // handle or log error
}

このシステムは、新しいJSコードをユーザーにプッシュするのに非常に優れています。ユーザーと一緒にアプリをテストし、欠陥を見つけて修正し、すぐにダウンロードできる新しいコードを公開できるため、ライブテストに役立ちます。

ただし、この方法には制限があります。たとえば、この方法でExpo SDKのバージョンを更新することはできません。新しいスタンドアロンアプリをビルドし、アプリストア(または他の任意の方法)で配布する必要があります。

アプリストア

これは、.apkおよび.ipaファイルを配布する最も一般的な方法です。これらのファイルは、それぞれexpo-cli build:Androidおよびexpo-cli build:ios for AndroidおよびiOSの場合)を使用して作成できます。

Androidアプリがこの方法で更新されるようにテストするAPIがテストされているようです( SOスレッド記事 )が、私はまだ利用可能とは思わないでください。

この方法で更新を強制する1つの可能な解決策は、起動時にアプリのバージョンを確認し、ストアに新しいバージョンがある場合は、アプリのストアページを ディープリンク で開き、ユーザーがダウンロードできるようにしますそれ。以下の例は、私の意味を視覚化するのに役立ちます。

componentDidMount {
   const hasNewVersion = isStoreUpdateAvailable(); // Checks the store for a new app update
   if (hasNewVersion) {
     Linking.openURL("market://details?id=<>"); // Opens the app's store page so the user can download the update
   }
}

これが Google Playへのリンク に関するドキュメントです。

コメントを残さない場合は、この質問がすべての質問に回答することを願っています。

14
Bruno Eduardo