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

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

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

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

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

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

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

```json
{ "hoge.fuga.app": 
     {
          "minVersionName": "1.5.0",
          "minVersionCode": "150000", 
          "enable": true
          "force": true
     }
}
```
基本的にVersionNameかVersionCodeがあれば良い。
ただ、オプションとしてリモートでバージョンチェック機能を切り替えられるenableと更新が毎回強制になるforceを持たせることも可能です。

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

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

###標準ダイアログ版

```kotlin
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`がイベントを受け取ります。
その際に、標準のメッセージも受けることができます。

```kotlin
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でも呼び出すのが良さげです。

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


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

#参考
https://github.com/eggheadgames/Siren