Unity + PlayFabのタイトルデータを使いモバイルアプリの簡易強制アップデートを作る

# 使用バージョン
- Unity 2019.4.3f1
- PlayFab 2.90.200713

# 本記事の目的
Unity+PlayFabを使い、PlayFabからモバイルアプリの強制アップデートを促す

# 本記事で得られないもの
ログイン時以外での厳格な強制アップデート
（通信のたびのバージョンコードのチェック）

# はじめに
この記事はUnityやPlayFabのインストールや基本的な使い方には触れていません
なので説明を省く箇所が多々あります

# タイトルデータの登録
まず、PlayFabの画面に行き、コンテンツからタイトルデータを登録します
<img width="1110" alt="タイトル_データ_·_PlayFab.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49946/0fa16ebf-013b-00ab-d67e-315a09fb1e2c.png">
登録するのは
`AndroidVersion`と`iOSVersion`です
モバイルを両方のOSで出す場合は必ず分けておきましょう。
運営してると共通のバージョンコードではとても管理しきれないためです。

ここではAndroidVersionに1.0.1を設定しておきます。
PlayFabでの操作は以上になります

# Unityでログインからバージョンチェックまで
いきなりですがコードはこちらです

```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using PlayFab;
using PlayFab.ClientModels;

public class PlayFabLogin : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
       var request = new LoginWithCustomIDRequest {CustomId = "MyCustomId", CreateAccount = true};
               PlayFabClientAPI.LoginWithCustomID(request, (result =>
               {
                   GetTitleData();
               }), error =>
               {
                   Debug.LogError(error.GenerateErrorReport());
               });
    }
     
     void GetTitleData()
     {
         PlayFabClientAPI.GetTitleData(new GetTitleDataRequest(), result =>
         {
#if UNITY_ANDROID
                 if (result.Data.ContainsKey("AndroidVersion"))
                 {
                     // タイトルデータのバージョン
                     string serverVersion = result.Data["AndroidVersion"].ToString();
                     // ローカルのバージョン
                     string lovalVersion = Application.version;
                     // 文字列の大小を比較
                     int compareResult = serverVersion.CompareTo(lovalVersion);
                     // サーバのバージョンの方が大きかったらストアに飛ばす
                     if (compareResult == 1)
                     {
                         Debug.Log("アプリの更新が必要です");
                         Application.OpenURL("アプリのストアページURL");
                     }
                     else
                     {
                         Debug.Log("最新バージョンです");
                     }

                 } 
#else
             Debug.Log("iOSも同じように書く");
#endif
         },
             error => {
                 Debug.Log(error.GenerateErrorReport()); }
         ); }
}
```

処理の流れとしては

- ログイン
- タイトルデータの取得
- OS 事のバージョンの比較
- 必要であればストアページに飛ばす

です。ログインとタイトルデータの取得は同時にやってもいいですがここではシンプルにするために分けています。

ここまで書けたらProjectSettingsからAndroidにSwitchPlatformをし、Versionを1.0.0にしてみましょう
<img width="745" alt="VersionCheck.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49946/2df3063b-11e3-f182-0773-7c2eadee5c4c.png">

この状態で実行すると以下のログが出ます
<img width="806" alt="needUpdate.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49946/56dc3d73-c4d7-e68f-1776-a6bbc2c39008.png">
次にVersionを1.0.1にして実行してみると以下のようになると思います
<img width="737" alt="VersionUp.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49946/a1151137-8f7a-daed-632c-83396ecc4476.png">
<img width="806" alt="LatestVersion.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49946/ea3a4724-7001-83e2-f489-14650df95747.png">
これでバージョンチェックの処理ができました。

# 注意点
今回の実装ではログイン時にしかバージョンをチェックしないため、
`プレイ中のユーザーに対してアップデートを促すことができません`
なので、必要ならタイトルデータの更新を適宜行うなどの対応が必要になります