目次
はじめに
よくある、アプリを立ち上げると「ストアから最新版をダウンロードしましょう」と促すやつ。あれを実装したくて、バージョン(1.1や1.0.2など)の比較方法を調べたところ、既に「Version」という便利なクラスがあったので、こちらを活用したサンプルコードの紹介です。ゼロから作らずに済んでよかった。。。
Version クラス (System)
アセンブリ、オペレーティング システム、または共通言語ランタイムのバージョン番号を表します。 このクラスは継承できません。
サンプルコード
using System;//追加
public static class CompareVersionUtil
{
public static int GetResult(string client, string server)
{
var a = new Version(client);
var b = new Version(server);
return a.CompareTo(b);
}
}
「using System」を追加しています。MonoBehaviourを継承しないStaticクラスなのでシーンに配置する必要はありません。端末側のバージョンとサーバー側のバージョンを「GetResult」メソッドに渡します。「System」の「Version」クラスでそれぞれ変換して、「a.CompareTo(b)」で比較した数値を戻しています。
- 戻り値は3パターンです。
- (a == b) の場合は「 0 」
- (a > b) の場合は「 1 」
- (a < b) の場合は「-1 」
使い方
CompareVersionUtil.GetResult()で「0」「1」「-1」のいずれかを返すので、それぞれに応じた処理を行ってください。
例として端末のバージョンとサーバー側のバージョンを適当に作って比較してみます。
using UnityEngine;
public class Temp : MonoBehaviour
{
void Start()
{
//クライアント側とサーバー側が同じ
string clientA = "1.0.0";
string serverA = "1.0.0";
Check(clientA,serverA);
//クライアント側が新しい(開発版など)
string clientB = "1.3.45";
string serverB = "1.2.34";
Check(clientB,serverB);
//クライアント側が古い
string clientC = "1.78.9";
string serverC = "2.0.00";
Check(clientC,serverC);
}
void Check(string client, string server)
{
var value = CompareVersionUtil.GetResult(client,server);
switch(value)
{
case 0:
Debug.Log($"(a == b): アプリは最新版です");
break;
case 1:
Debug.Log($"(a > b): アプリはβ版です");
break;
case -1:
Debug.Log($"(a < b): ストアから最新版をダウンロードしましょう");
break;
}
}
}
上のコードをシーン内に配置して実行した結果です。
まとめ
実際にはアプリのクライアント側のバージョンは「Application.version」で取得できます。また、サーバー側のバージョンはPlayFabやFirebaseまたはUnityのRemoteConfigなどで管理すると良いと思います。
「Version」クラスのおかげで、わずか数行でアプリのバージョン比較が実装できました。