3
1

More than 1 year has passed since last update.

[Android]かんたん強制バージョンアップ

Last updated at Posted at 2022-01-07

Sirenとは

簡単に強制バージョンアップが実装できるライブラリです。
Android,iOS共に存在しますが、今回はAndroidで試します。

設定

まずは、root直下のgradleファイルにて、jitpackリポジトリから取ってこれるようにします。

allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}

そして、appモジュールのgradleファイルに依存関係を追加。

dependencies {
    implementation 'com.github.eggheadgames:Siren:1.5.2'
}

Sirenは、jsonを購読して強制バージョンアップする必要があるか否かを判断します。

{ "hoge.fuga.app": 
     {
          "minVersionName": "1.5.0",
          "minVersionCode": "150000", 
          "enable": true
          "force": true
     }
}

基本的にVersionNameかVersionCodeがあれば良い。
ただ、オプションとしてリモートでバージョンチェック機能を切り替えられるenableと更新が毎回強制になるforceを持たせることも可能です。

使い方

バージョン管理はセマンティックを採用しています。
そのため、メジャー・マイナー・パッチごとに更新タイプを設定します。
バージョンコード購読時の設定も可能です。

他にも言語設定や更新チェックの頻度も設定可能です。

標準ダイアログ版

override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)

     val siren = Siren.getInstance(getApplicationContext())
     siren.setMajorUpdateAlertType(SirenAlertType.FORCE)
     siren.setMinorUpdateAlertType(SirenAlertType.FORCE)
     siren.setPatchUpdateAlertType(SirenAlertType.OPTION)
     siren.setRevisionUpdateAlertType(SirenAlertType.NONE)
     siren.setVersionCodeUpdateAlertType(SirenAlertType.FORCE)
     siren.checkVersion(this, SirenVersionCheckType.IMMEDIATELY, SIREN_JSON_DOCUMENT_URL); // 第三引数は、購読するJSONのURL
}

カスタムダイアログ版

アラートタイプをNONEに設定することで、ライブラリ側の標準ダイアログが表示されなくなります。
代わりにリスナーのonDetectNewVersionWithoutAlertがイベントを受け取ります。
その際に、標準のメッセージも受けることができます。

override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
     val siren = Siren.getInstance(getApplicationContext())
     siren.setMajorUpdateAlertType(SirenAlertType.NONE)
     siren.setMinorUpdateAlertType(SirenAlertType.NONE)
     siren.setPatchUpdateAlertType(SirenAlertType.NONE)
     siren.setRevisionUpdateAlertType(SirenAlertType.NONE)
     siren.setVersionCodeUpdateAlertType(SirenAlertType.NONE)
     siren.checkVersion(this, SirenVersionCheckType.IMMEDIATELY, SIREN_JSON_DOCUMENT_URL); 
}

ISirenListener sirenListener = new ISirenListener() {
    @Override
    public void onShowUpdateDialog() {
        Log.d(TAG, "onShowUpdateDialog");
    }

    @Override
    public void onLaunchGooglePlay() {
        Log.d(TAG, "onLaunchGooglePlay");
    }

    @Override
    public void onSkipVersion() {
        Log.d(TAG, "onSkipVersion");
    }

    @Override
    public void onCancel() {
        Log.d(TAG, "onCancel");
    }

    @Override
    public void onDetectNewVersionWithoutAlert(String message) {
        // ここでカスタムダイアログの発火
        Log.d(TAG, "onDetectNewVersionWithoutAlert: " + message);
    }

    @Override
    public void onError(Exception e) {
        Log.d(TAG, "onError");
        e.printStackTrace();
    }
};

注意点

ダイアログの更新ボタンをタップするとGoogle Play Storeへの遷移処理が始まります。
しかし、ここでアプリの更新を行わなかった場合アプリに戻るとバージョンアップしていないにも関わらず、引き続きアプリが使えてしまいます。

先ほどの例では、onCreate時にだけバージョンチェックを行っていました・・・、。
そこで、バージョンチェック諸々の処理は関数に切り分け、onResumeでも呼び出すのが良さげです。

override fun onResume() {
     super.onResume()
     checkUpdate()
}

終わり

ほとんどREADMEの和訳になりました。
新年の景気付けとして書きました。
今年も学びの多い一年になりますように。

参考

3
1
0

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
3
1