🕌
Unityアプリ起動時にGitHub ReleaseTagから最新versionの比較を行う
はじめに
OSSのデスクトップマスコット「uDesktopMascot」を開発しています。こちらのアプリは(記事作成時)1週間ごとにリリースをしています。
そのため、ユーザーの方が自分が最新verを触っているのかが分からないようになってしまっています。
そのため以下のような最新verがリリースされていた場合にダイアログを出す機能を実装しています。
(画面は開発画面です)
開発環境
- Unity 6000.0.31f1(IL2CPP)
リリースの比較
最新リリースの確認方法として、GitHub Tagを使って比較を行います。
以下のコードにて、GitHub Releaseの最新Tagを取得します
private async UniTask<string> GetLatestVersionAsync(CancellationToken cancellationToken)
{
using UnityWebRequest request = UnityWebRequest.Get(LatestReleaseUrl);
// GitHub APIにはUser-Agentヘッダーが必要
request.SetRequestHeader("User-Agent", "uDesktopMascot");
// リクエストを送信し、完了を待機
await request.SendWebRequest().WithCancellation(cancellationToken).SuppressCancellationThrow();
if (request.result != UnityWebRequest.Result.Success)
{
Log.Error($"最新バージョン取得のエラー: {request.error}");
return null;
}
// レスポンスのJSONを取得
string jsonResponse = request.downloadHandler.text;
// JSONをパースして最新リリース情報を取得
LatestReleaseInfo latestRelease = JsonUtility.FromJson<LatestReleaseInfo>(jsonResponse);
if (latestRelease != null && !string.IsNullOrEmpty(latestRelease.tag_name))
{
// タグ名から先頭の 'v' または 'V' を除去
return latestRelease.tag_name.TrimStart('v', 'V');
}
else
{
Log.Error("最新リリース情報の取得に失敗しました。");
return null;
}
}
またレスポンスをjsonに変換するクラスです
[Serializable]
private class LatestReleaseInfo
{
public string tag_name;
}
アプリケーション側のversionの取得は以下で行います。
// アプリケーションの現在のバージョンを取得
string currentVersion = Application.version.TrimStart('v', 'V');
取得した最新のverとアプリケーション側のverの比較は System.Version.Version.CompareToで行います。
/// <summary>
/// バージョン文字列を比較して、最新バージョンが現在のバージョンより新しいかを判定します
/// </summary>
private bool IsNewerVersion(string latestVersion, string currentVersion)
{
try
{
var latest = new Version(latestVersion);
var current = new Version(currentVersion);
return latest.CompareTo(current) > 0;
}
catch (Exception ex)
{
Log.Error($"バージョン比較のエラー: {ex.Message}");
return false;
}
}

midra-lab.notion.site/MidraLab-dd08b86fba4e4041a14e09a1d36f36ae 個人が興味を持ったこと × チームで面白いものや興味を持ったものを試していくコミュニティ
Discussion