wootan's diary

iOSアプリ開発を中心としたエンジニアブログ

Firebase Remote Configを利用して強制アップデートをおこなう

この記事は Relux Advent Calendar 2017 2日目の記事です。
Firebase Remote Config を利用して強制アップデートをおこなう方法について書きます。
qiita.com

強制アップデートとは?

f:id:wootan1102:20171127111504j:plain:w320

上記画像のようにアラートでアップデートを促すものです。
アラートを閉じるボタンは存在せず、更新ボタンを押すと強制的にAppStoreへ遷移します。
ReluxではAPIのレスポンスが大幅に変更なった場合や
致命的な不具合を含んだバージョンからアップデートさせたい場合に利用しています。

ライブラリ

こちらのライブラリを利用することで強制アップデートを簡単に実装することができます。

github.com
github.com

Reluxでもこちらで強制アップデートをおこなっていたのですが、現在は Firebase Remote Config でおこなうようにしています。

なぜライブラリを使用しないのか?

ライブラリは端末にインストールされているバージョンとAppStoreのバージョンとを比較し、事前に指定したルールで強制アップデートを表示する仕組みになっています。
例えばメジャーバージョンの変更があった場合にのみアラートを表示する といったことが可能です。
この方法では運用上でいくつか問題が発生しました。

  • 強制アップデートを実施したバージョンで不具合が発生した場合に、強制アップデートを取り消すことができない。
  • 事前に指定したルール以外で強制アップデートすることができない。
  • エンジニア以外でも強制アップデートの開始・停止をできるようにしたい。
  • 一部のユーザのみ強制アップデートさせ、段階的に強制アップデートをおこないたい。

上記を考慮してエンジニア以外でも簡単に操作することができる Firease Remote Config を採用しました。

どうやってやるのか?

1. パラメータの追加

Firebase Remote Config で強制アップデートに使用するパラメータを追加します。
キー名は「force_update_for_ios_app」とし、値は「3.11.0」としました。
ここで指定したバージョンよりも古い場合のみ強制アップデートを表示するようにします。

f:id:wootan1102:20171127153934p:plain

パラメータの取得に関しては公式ドキュメントを参照
Firebase Remote Config を iOS で使用する  |  Firebase

2. バージョンの判定

バージョンの判定は以下のように行います。
trueの場合に強制アップデートのアラートを表示します。

NSString *targetVersion = self.firRemoteConfig[@"force_update_for_ios_app"].stringValue;
if ([installedVersion compare:targetVersion options:NSNumericSearch] == NSOrderedAscending) {
    return true;
}
return false;

3. アラートの表示

アラートは通常のものと同様に UIAlertController を使用します。
更新ボタンを押したときの遷移先はAppStore(
https://itunes.apple.com/app/id843104033
)にします。

NSURL *iTunesURL = [NSURL URLWithString:@"https://itunes.apple.com/app/id843104033"];
dispatch_async(dispatch_get_main_queue(), ^{
    [[UIApplication sharedApplication] openURL:iTunesURL];
});

これで実装は完了です。

4. 強制アップデートの実施

強制アップデートは 1. で設定したバージョンを変更するだけでおこなうことができます。
逆に停止する場合はもとの値に戻すだけで問題ありません。

AppStoreの反映は最大で24時間かかると公式サイトには書かれていますが、反映に1週間近くかかることがありました。
強制アップデートを実施する場合は余裕があればリリース直後ではなく、しばらく経ってからおこなうのが良さそうです。
developer.apple.com


今後やっていきたいこと

現在はバージョンのみを指定して強制アップデートのアラートを表示していますが、
今後はアラートに表示する文言なども、Remote Config で設定できるようにしたいと考えています!
本来はA/Bテストなどをおこなうためのツールですが、他のものにも色々と応用できそうでした。