はじめに
GS2-Version はアプリやアセット、利用規約のバージョン管理や、メンテナンスモードの切り替えなどを行えるマイクロサービスです。
機能追加の背景
バージョン更新や、メンテナンスは予定を持って実行されることが一般的です。
しかし、これまで GS2-Version には予定時刻に要求バージョンを切り替える仕組みがありませんでしたので、バージョン更新やメンテナンスの進行に合わせてマスターデータを切り替える必要がありました。
追加された機能の詳細
そこで、VersionModel に type フィールドが追加され、従来のバージョンチェックを行える simple と、新しく schedule を選択できるようになりました。
schedule を選択すると、scheduleVersions: List[ScheduleVersion] を指定する必要があります。
ScheduleVersion は 《現在のバージョン》《警告をだすバージョン閾値》《エラーとするバージョン閾値》《GS2-Schedule のイベントGRN》 のフィールドを持ち、配列の先頭から順番に評価し《GS2-Schedule のイベントGRN》が開催状態もしくは未指定の ScheduleVersion の値を使用してバージョンチェックを行います。
マスターデータの例
{ "version": "2019-10-09", "versionModels": [ { "name": "[string]バージョンモデル名", "metadata": "[string?]メタデータ", "scope": "[string]判定に使用するバージョン値の種類(passive/active)", // ここから追加 "type": "[string]バージョンチェックモード(simple/schedule)", "scheduleVersions": [ { "currentVersion": { "major": "[int]メジャーバージョン", "minor": "[int]マイナーバージョン", "micro": "[int]マイクロバージョン" }, "warningVersion": { "major": "[int]メジャーバージョン", "minor": "[int]マイナーバージョン", "micro": "[int]マイクロバージョン" }, "errorVersion": { "major": "[int]メジャーバージョン", "minor": "[int]マイナーバージョン", "micro": "[int]マイクロバージョン" }, "scheduleEventId": "[string?]バージョンチェックを有効化する期間を設定した GS2-Schedule のイベント" } ], // ここまで追加 "needSignature": "[bool]判定するバージョン値に署名検証を必要とするか", "signatureKeyId": "[string]暗号鍵GRN", "currentVersion": { "major": "[int]メジャーバージョン", "minor": "[int]マイナーバージョン", "micro": "[int]マイクロバージョン" }, "warningVersion": { "major": "[int]メジャーバージョン", "minor": "[int]マイナーバージョン", "micro": "[int]マイクロバージョン" }, "errorVersion": { "major": "[int]メジャーバージョン", "minor": "[int]マイナーバージョン", "micro": "[int]マイクロバージョン" } }, ] }
Unity からの使用例
クライアントの実装はこれまでと変わりません。
バージョンチェックを実行
var domain = gs2.Version.Namespace( namespaceName: "namespace-0001" ).Me( gameSession: GameSession ).Checker( ); var result = await domain.CheckVersionAsync( targetVersions: new Gs2.Unity.Gs2Version.Model.EzTargetVersion[] { new Gs2.Unity.Gs2Version.Model.EzTargetVersion { VersionName = "app", Version = { Major = 1, Minor = 2, Micro = 3, }, }, new Gs2.Unity.Gs2Version.Model.EzTargetVersion { VersionName = "asset", Version = { Major = 1, Minor = 2, Micro = 3, }, }, } ); var projectToken = result.ProjectToken; var warnings = result.Warnings; var errors = result.Errors;
利用規約に同意
var domain = gs2.Version.Namespace( namespaceName: "namespace-0001" ).Me( gameSession: GameSession ).AcceptVersion( versionName: "eula" ); var result = await domain.AcceptAsync( ); var item = await result.ModelAsync();