web-dev-qa-db-ja.com

Androidでアプリ内アップデートをテストするにはどうすればよいですか?

最近、GoogleはGoogle I/O 2019で「アプリ内アップデート」を導入しました。

だから私はそれを使おうとしています。

_val appUpdateManager = AppUpdateManagerFactory.create(this)
val appUpdateInfo = appUpdateManager.appUpdateInfo
appUpdateInfo.addOnCompleteListener {
    val result = it.result
    if (result.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
            && result.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {

        info("should show update")
        appUpdateManager.startUpdateFlowForResult(
                        result,
                        AppUpdateType.FLEXIBLE,
                        this,
                        1)
    } else {
        info("This is already latest version: ${result.updateAvailability()}")
    }
}
_

ただし、result.updateAvailability()は常に_UpdateAvailability.UPDATE_NOT_AVAILABLE_です。

これを行うために、以前のバージョンのコードで署名付きリリースAPKを作成しました。しかし、それは機能しません。

Developer Keynote(16:40〜) のデモによると

彼はエミュレータでそれをやっています。デバッグモードのようです。

どうすればこれと同じことができますか?

18
yoonhok

アプリ内アップデートをテストする正しい方法は、内部アプリ共有を使用することです(内部テストトラックと混同しないでください)。

  1. 最初に これらの手順 を使用して、内部アプリ共有をセットアップします。内部テストトラックとは異なり、内部アプリ共有ではアプリをすぐに利用できます。だから待ち時間はありません。
  2. Google Playによるアプリ署名にオプトインします。これにより、Google Playは、提供されたApp Bundleからデバイス用に生成されたAPKに署名できます。詳細 こちら
  3. App Bundleをビルドします。コマンドラインでは、単に./gradlew bundleReleaseまたは./gradlew bundle<variant>です。
  4. https://play.google.com/apps/publish/internalappsharing/ に移動し、生成されたaabファイルをapp/build/outputs/bundle/<variant>/の下にアップロードします。バージョンコードを含む適切な名前を付けます。
  5. これはコピーするためのリンクを提供します。これを使用して、このバンドルをデバイスにインストールします。
  6. アプリbuild.gradleにバージョンコードを追加し、別のバンドルをビルドします。
  7. 同様に、この新しいバンドルを内部アプリ共有にアップロードします。バージョンコードで名前を付けます。
  8. これは別のリンクを提供します。リンクを開くと、Google Playが開き、[更新]オプションが表示されます。 更新をクリックしないでください!
  9. アプリを開くと、アプリ内アップデートのプロンプトが表示されます。

プロンプトおよびが表示されない場合は、これらの手順を正確に実行した場合、おそらくコードに問題があります。ロギングを追加して、コードで何が起こっているかを確認します。

私たちのテストでは、以下はアプリ内アップデート(他の場所で提案されたもの)のテストに役立ちませんでした:

  • バージョンコードを増やすことなく同じバンドル/ apkを再アップロードする
  • バージョンコードを発行済みバージョンよりも低くする
12
rpattabi

私の場合、私は次のステップを実行しました:

  1. デバイスから元のアプリをアンインストールします。
  2. Google Playストアからアプリをインストールします(アプリは既にストアにありましたが、お持ちでない場合は、ストアで公開せずにアルファ版またはベータ版を作成できます)。
  3. アプリをアンインストールします。
  4. Google Playバージョンよりも低いバージョンコードで、新機能を使用して署名済みAPKを生成します
  5. このapkをインストールします。

起動すると、Google Playストアで新しいバージョンを確認し、アップデートするためのアシスタントを表示します。このソリューションがデバイスでは機能するが別のデバイスでは機能しない場合は、同じGoogleアカウントでログインして、このデバイスで5つの手順をもう一度試してください。その後、元のアカウントを再び使用できます。なんらかの奇妙な理由により、Google Playがバージョン管理を「アクティブ化」し、残りのデバイスでバージョンが再び利用可能になったように見えます。

正確な動作はわかりません...

5
fvaldivia

または、このクラスをアプリ内更新のシミュレーションのUNITテストとして使用できます

FakeAppUpdateManager

これにはいくつかの定義済みのメソッドがあります。

5
Dr. aNdRO

うーん...私は解決策を見つけました。 Google I/O 2019-デベロッパーキーノートのデモとは異なります。

署名済みリリースAPKを内部開発者バージョンに公開しました。そして、それはうまくいきます。

または、「Alpha/Betaクローズテストパブリッシュ」でパブリッシュできます。

4
yoonhok

この時点ですでにそれがダウンしているかどうかはわかりませんが、しばらくしてテストした後、versionNameを減らすことは、適切にテストするために必要なことであることがわかりました。 versionCodeを減らすことだけをテストしました... versionNameまたはversionCodeが古くなっているときはいつでもAPIで処理できるはずですが、そうではないようです。

3
Caio Melo

Google Play Consoleの内部テストトラックは、アプリ内アップデートをテストするときに使用する優れたツールです。

2
Gulzar Bhat

私にとっては、 docs のトラブルシューティングセクションの最後のステップでうまくいきました。

基本的に、アプリのバージョン(バージョン名とコード)を変更した後、次のようにします。

アカウントが対象であり、Google Playキャッシュが最新であることを確認します。これを行うには、テストデバイスでGoogle Playストアアカウントにログインして、次の手順に従います。
Google Playストアアプリを完全に閉じてください。
Google Playストアアプリを開き、[マイアプリ&ゲーム]タブに移動します。
テストしているアプリに利用可能なアップデートが表示されない場合は、テストトラックが適切に設定されていることを確認してください。

0
sorry_I_wont