はじめに

モバイルアプリ(スマホアプリ)の強制アップデート(アップデートのお知らせ)に関して調べたり、検討したりしたので簡易的なメモを残しておく


強制アップデート(アップデートのお知らせ)とは、↓のようなアプリ起動時に「最新版があるよ」と通知するようなやつ。


iOSアプリのアップデートをお知らせする | スーパーソフトウエア東京 より引用

TL;DR

  • 案1: 自サーバ内でバージョン情報を管理
  • 案2: Firebase Remote Config
  • 案3: アプリ内で App Store, Google Play にアクセス(スクレイピング)
  • 案4: 案3’ と 案1(もしくは案2) との組合せ
  • 案5: ライブラリを利用して実装
  • NativeScript のみ: NativeScript AppSync
この記事が参考になった方
ここここからチャージや購入してくれると嬉しいです(ブログ主へのプレゼントではなく、ご自身へのチャージ)
欲しいもの / Wish list

目次

  1. はじめに
  2. TL;DR
  3. 詳細
    1. 前置き
    2. 結論(自分の考えた方法)
      1. 案1: 独自にサーバで管理して API などでバージョン情報を返却
      2. 案2: Firebase Remote Config を使う
      3. 案3: アプリ内で App Store, Google Play にアクセス(スクレイピング)
      4. 案4: 案3’ と 案1(もしくは案2) との組合せ
      5. 案5: ライブラリを利用して実装
    3. ボツ案: 公式 API を使う
      1. Android
      2. iOS
    4. 共通的に気を付けた方が良いこと
      1. アップデート有無の 確認/表示 の頻度
    5. NativeScript 限定案: NativeScript AppSync を使う
  4. まとめ
  5. その他・メモ
  6. 参考文献

詳細

前置き

  • あくまで 調査/検討 段階でのメモ書き。実装はできてないので、上手くいかない案などあるかも
  • 参考ページの情報が古く、2020/07/11 現在でも使える方法でない可能性あり
  • Swift, Kotlin(Objective-C, Java) での Native App 作成経験はないので、変なことを書いてる可能性あり

結論(自分の考えた方法)

ざっくりレベルで各案について記載。

案1: 独自にサーバで管理して API などでバージョン情報を返却

サーバ内で DB なりファイルなりで、最新バージョン情報を手動で管理。

上記の情報をアプリ起動時などに取得し、アプリが保持しているバージョン情報と比較して、古ければダイアログを表示する。


  • サーバが必要
  • バージョン情報を手動管理、ってのがモヤッとする
  • とは言えシンプルでわかりやすくはある

案2: Firebase Remote Config を使う

Firebase Remote Config でバージョン情報を管理。

あとは取得先が異なるだけで、基本的な流れは 案1 と同じ。


  • サーバ不要
  • バージョン情報は手動更新 (※REST API もある。後述)
  • これもシンプル

実例もあり、以下あたりが参考になるはず(試してはいない

案3: アプリ内で App Store, Google Play にアクセス(スクレイピング)

アプリ内から App Store や Google Play にアクセスして、最新のバージョン情報を取得。

ダイアログ表示まわりに関しては他案と同じ。


  • サーバ不要
  • 手動での最新バージョン情報管理が不要
  • アプリ内にスクレイピング処理の実装が必要
  • App Store, Google Play の HTML 構造が変わると機能しなくなるかも

参考: iOSアプリのアップデートをお知らせする | スーパーソフトウエア東京

iOS は https://itunes.apple.com/jp/lookup?id=<trackId> へのアクセスで情報が取得できる。

Google アプリ (https://apps.apple.com/jp/app/id284815942) の場合は、284815942<trackId> なので、https://itunes.apple.com/jp/lookup?id=284815942 にアクセスすると各種情報が取得できる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"resultCount": 1,
"results": [{
...,
"trackId": 284815942,
"trackName": "Google アプリ",
"minimumOsVersion": "12.0",
"releaseDate": "2019-02-12T08:00:00Z",
...,
"bundleId": "com.google.GoogleMobile",
"version": "114.0",
...,
}]
}

bundleId を使って http://itunes.apple.com/lookup?bundleId=com.google.GoogleMobile とかでも OK。


その他スクレイピングに関するページ。

案4: 案3’ と 案1(もしくは案2) との組合せ

アプリから App Store や Google Play へのアクセスは行わずに、サーバ上で各サイトから最新バージョン情報を取得。

自サーバで管理する情報、あるいは Firebase Remote Config で管理する情報を更新。

あとはこれまでと同じ。


  • サーバが必要
  • 手動での最新バージョン情報管理が不要
  • アプリ内でスクレイピングしないので、Android/iOS それぞれでの実装が不要
  • App Store, Google Play の HTML 構造が変わってもアプリのアップデートは不要(サーバ側の処理を変えれば良いので)

Remote Config の値の置き換えも↓の方法で更新できる(はずな)ので、管理を自動化できる。

ステップ 5: Remote Config のデータに置き換わる JSON データを公開する

※例によって試してないので注意

案5: ライブラリを利用して実装

Android

参考: アプリ内アップデートをサポートする | Android デベロッパー | Android Developers

公式手段が用意されている模様。

アップデートの有無の確認 で情報を取得して、ダイアログを表示するなり、アップデートを開始するなり、とすれば良さそう。

以下の実例も参考になるはず。

iOS
Siren

ArtSabintsev/Siren を使うと簡単に実装できるっぽい。

以下の実例も参考になるはず。

Updates

rwbutler/Updates というのもある。

以下の実例も参考になるはず。

ボツ案: 公式 API を使う

公式に API が用意されてるのでは、と思い調べたがダメそう。

Android

Google Play Developer API | Android デベロッパー | Android Developers

ざっと見たけど、それらしい API 自体が無さそう。(自分が見つけられてないだけかもなので、気になる人は探してみて)

iOS

App Store Connect API | Apple Developer Documentation

使えそうな API 自体はあるんだけど、認証が必要なのでアプリ側に認証情報込みで組み込むのは、ちょっと微妙かなという印象。

たぶんバージョン情報取れるんじゃないかなとは思うが、ちゃんと見てない。

共通的に気を付けた方が良いこと

アップデート有無の 確認/表示 の頻度

アプリでスクレイピングする頻度 or サーバ(or Firebase)にバージョン情報を取得しにいく頻度、最新バージョンがあった場合のダイアログ表示頻度、はちゃんと検討した方が良い。

何も考えずに「起動するたびにダイアログ表示」とかにすると、ユーザーからウザがられる(UX 低下する)と思うので、一度確認や表示したら一定期間は空けるようにした方が良さそう。

「起動するたびにバージョン情報確認」も正直無駄なので、同じように一定期間は空けるようにすべきと思う。

NativeScript 限定案: NativeScript AppSync を使う

NativeScript/nativescript-app-sync

v1.0.0 が 2019/06/19 リリースなので、割と新しめのプラグイン。

最新バージョンは 2019/12/11 リリースの v2.0.0

※GitHub 冒頭に NOTE: NativeScript AppSync is currently in beta ...(略) と書かれている通り β版なので利用の際は注意。


自分もさらっと見ただけ(試してない)が、App Store や Google Play を介さずに更新パッケージをアプリに適用できるプラグインの模様。


NativeScript/nativescript-app-sync より引用

詳細は以下記事や GitHub を参照。

Enable Live Updates of Your iOS and Android Apps Using NativeScript AppSync

※試したら記事書くと思う

まとめ

  • 案1: 自サーバ内でバージョン情報を管理
  • 案2: Firebase Remote Config
  • 案3: アプリ内で App Store, Google Play にアクセス(スクレイピング)
  • 案4: 案3’ と 案1(もしくは案2) との組合せ
  • 案5: ライブラリを利用して実装
  • NativeScript のみ: NativeScript AppSync

その他・メモ

某有名アプリの挙動を確認したところ、自サーバから API で最新バージョン情報、アップデート通知に利用するメッセージ内容を返却していた。

なので、案1, 案4 も的はずれなことを言っているわけではなく、割と現実的な手法であることは確認できている。

参考文献

記事中に記載のものたち

関連記事

この記事が参考になった方
ここここからチャージや購入してくれると嬉しいです(ブログ主へのプレゼントではなく、ご自身へのチャージ)
欲しいもの / Wish list