よく「アプリをアップデートしてください」とか出てストア画面に飛ばされる、のあるじゃないですか。
今回は、最新アプリのバージョンの定義をGoogleDriveにおく、という超お手軽な方法でそれを実装してみました。
個人開発者の方などで「サーバーが用意するの大変」という方とかに参考になればいいなー。
【箱猫倉庫ver1.3(次回アプデ)】
— snoopopo@個人ゲーム開発中 (@snoopopo) December 31, 2021
アプリが最新verじゃなかったらストアへ飛ばす、を実装!
サーバ用意できないからGoogleDriveに最新Verを定義したtext置いといてゲーム起動時に読みにいく作りにしてるよ。あとでまとめるるる~✏️#ゲーム制作 #gamedev #IndieGameDev #indiegame #ゲーム開発 #unity pic.twitter.com/867j13I3RN
- 最新のバージョンをGoogleDriveにテキストファイルとして格納する
- 権限を誰でもアクセスできるように設定する
- ファイルのダウンロードURLを取得
- クライアント側:最新バージョンを取得する処理を実装
- クライアント側:最新じゃなければストアへ飛ばす
最新のバージョンをGoogleDriveにテキストファイルとして格納する
企業のゲームならサーバを用意して最新Verを取得するAPIを作っておくのが通常だと思いますが、
今回はこれをGoogleDriveでやっちゃいます。Googleユーザ持ってる人ならだれでも無料でできます!
GoogleDriveの任意の場所にテキストファイルをアップロードします。
テキストファイルの名前も適当でOK. 今回は「version.txt 」としました。中身は以下のようなただの文字列にしておきます。
ver1.0.0
もちろん、jsonでもtsvにしてもテキストならなんでもいいです。
よくわからない人は、上記の内容を書いた、txtファイルをアップロードしてください。
▼こんなかんじになってるはず
権限を誰でもアクセスできるように設定する
アップロードしたファイルを、右クリック -> リンクを取得 を選択し、
赤枠で囲った部分が「制限付き」となってると思うので「リンクを知っている全員」に変更します。
これでファイルに外部からアクセスできるようになります。
ファイルのダウンロードURLを取得
「リンクをコピー」をおしてURLをコピーし別タブでコピーしたURLを開きなおします。
↓
次にダウンロードするアイコン(下の画像で赤く囲ったところ)をクリックします。
↓
すると「名前をつけて保存」のダイアログが手前に出てきますが、ブラウザのURLが出ているので、
これを素早く(ダイアログがでるとコピれないからその前に)コピーしておきます。このURLがダウンロード用のURLになります。
クライアント側:最新バージョンを取得する処理を実装
今度はUnity側で、最新バージョンを取得するスクリプトを作ります。
ソースは、UnityWebRequest#Get
で通信し、req.downloadHandler.text
をログ出力するものです。
ログに、GoogleDrive(サーバー)に置いたtxtファイルの中身の文字列が表示されていれば成功です!
(上述の例だと「ver1.0.0」と出ればOK)
public class Test : MonoBehaviour { private void Start() { StartCoroutine(GetLatestVersion()); } private IEnumerator GetLatestVersion() { using (var req = UnityWebRequest.Get("【先程コピーしたダウンロードURLをここに書く】")) { yield return req.SendWebRequest(); if (req.isNetworkError || req.isHttpError) { Debug.Log(req.error); } else { //GoogleDriveに置いたtxtファイルの中身がreq.downloadHandler.textで取得できる Debug.Log(req.downloadHandler.text); } } } }
クライアント側:最新じゃなければストアへ飛ばす
ここまでで、サーバー(GoogleDrive)に定義した最新のバージョンが取得できました。
次に、現在インストールされているアプリが最新のバージョンでないなら、ストアに飛ばすを実装します。
Application.OpenURL(url)
でブラウザで指定のurlを開くことができます。
以下のソースは、
取得した最新のバージョンと、このソースが反映されているアプリのバージョンを比較し、
異なっている場合にストア画面へ飛ばす処理の例です。
IOSとandroidでストアのURLが違うので処理を分けています。*1
public class Test : MonoBehaviour { private const string APP_VER = "ver1.2.1"; //このアプリのバージョン public void CheckVersion() { if (!APP_VER.Equals(this.latestVersion)) {//現在インストールされているアプリのバージョンは最新バージョンではない //「現在インストールされているアプリは最新じゃないのでアプデしてください」とか // ダイアログを表示したりしてね string url = ""; #if UNITY_IOS url = "【appstoreのURL】"; #elif UNITY_ANDROID url = "【Google PlayのURL】"; #endif Application.OpenURL(url); } else { //現在インストールされているアプリが最新 } }