【個人ゲーム開発者向け】アプリが最新バージョンじゃなかったらストア画面へ飛ばす、を超お手軽に実装する

よく「アプリをアップデートしてください」とか出てストア画面に飛ばされる、のあるじゃないですか。
今回は、最新アプリのバージョンの定義をGoogleDriveにおく、という超お手軽な方法でそれを実装してみました。
個人開発者の方などで「サーバーが用意するの大変」という方とかに参考になればいいなー。

最新のバージョンをGoogleDriveにテキストファイルとして格納する

企業のゲームならサーバを用意して最新Verを取得するAPIを作っておくのが通常だと思いますが、
今回はこれをGoogleDriveでやっちゃいます。Googleユーザ持ってる人ならだれでも無料でできます!

GoogleDriveの任意の場所にテキストファイルをアップロードします。
テキストファイルの名前も適当でOK. 今回は「version.txt 」としました。中身は以下のようなただの文字列にしておきます。

ver1.0.0

もちろん、jsonでもtsvにしてもテキストならなんでもいいです。
よくわからない人は、上記の内容を書いた、txtファイルをアップロードしてください。

▼こんなかんじになってるはず f:id:snoopopo:20211231101127p:plain

権限を誰でもアクセスできるように設定する

アップロードしたファイルを、右クリック -> リンクを取得 を選択し、

f:id:snoopopo:20211231101359p:plain

赤枠で囲った部分が「制限付き」となってると思うので「リンクを知っている全員」に変更します。
これでファイルに外部からアクセスできるようになります。

ファイルのダウンロードURLを取得

「リンクをコピー」をおしてURLをコピーし別タブでコピーしたURLを開きなおします。
f:id:snoopopo:20211231101627p:plain

次にダウンロードするアイコン(下の画像で赤く囲ったところ)をクリックします。
f:id:snoopopo:20211231101815p:plain

すると「名前をつけて保存」のダイアログが手前に出てきますが、ブラウザのURLが出ているので、
これを素早く(ダイアログがでるとコピれないからその前に)コピーしておきます。このURLがダウンロード用のURLになります。
f:id:snoopopo:20211231102032p:plain

クライアント側:最新バージョンを取得する処理を実装

今度は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 {
            //現在インストールされているアプリが最新
        }
    }