Skip to content

[古い記事]NCMBを使ってアプリのバージョンアップをせずにマスターデータを更新する その4

Posted in 技術記事


実行環境
Windows7 Professional 64bit
Unity5.4.1f1
C#
Android
NCMB SDK v2.2.0


NCMBを使ってアプリのバージョンアップをせずにマスターデータを更新する
その1 その2 その3 その4(今回)


バージョン情報を更新したい

前回までの内容では、クライアントのバージョンデータは「CSVDateTime」に記録されているだけなので、アプリを再起動するたびにバージョンチェック→ダウンロードを行ってしまい当初の目的が果たせません。「CSVDateTime」を更新しても再起動時にリセットされてしまうため同様です。

PlayerPrefsを利用する

これを解決するのがデータの永続化ができるUnityのPlayerPrefsで、簡単に言うとセーブ機能です。
以下のサイト様の解説が詳しいです。

【Unity開発】Player Prefs(セーブ機能)まとめ【ひよこエッセンス】 – Unity5(C#)初心者・入門者向けチュートリアル ひよこのたまご

PlayerPrefsを利用出来る形にする

PlayerPrefsは「int型」「float型」「string型」のみ保存可能という制限があり、「CSVDateTime」はどれでもない「DateTime型」なので変換してから保存する必要があります。
しかし保存した「DateTime型」のデータを復元するためには「Binary型」でなければならないので、DateTime型→Binary型→String型と変換して保存します。
またインストールしたばかりの端末ではPlayerPrefsはnullであることに注意してください。(意図的に消さない限り値が入ったままなのを忘れがち)その3のSetDate()などでCSVDateに初期値(出荷設定)を入れておきましょう。
なおPlayerPrefsのキーは”Key”としてもよいのですが、タイプミスを防ぐためにCSVDateTimeKeyを経由して利用しています。

using UnityEngine;
string CSVDate;
string CSVDateTimeKey = "Key";
void SaveDate() {
CSVDate = CSVDateTime.ToBinary().ToString(); //DateTime型→Binary型→String型と変換する
PlayerPrefs.SetString(CSVDateTimeKey, CSVDate); //データをPlayerPrefs(キー:Key)に保存する
}

日数や時間の保存、取得、計算【C#】【Unity】 – (:3[kanのメモ帳]
DateTime.ToBinary メソッド (System)

バージョン情報を比較する

その3のVersionCheck()とPlayerPrefを組み合わせます。前述の通り、String型→Binary型→DateTime型の順番で変換して復元します。

void VersionCheck() {
//中略
} else {
//成功時の処理
//PlayerPrefs(string)→int→Binary→DateTime で復元
CSVDate = PlayerPrefs.GetString(CSVDateTimeKey, CSVDate); //初回起動時は出荷設定を使う
CSVDateTime = DateTime.FromBinary(Convert.ToInt64(CSVDate)); //String型→Binary型→DateTime型と変換する
if (LatestVersion.UpdateDate <= CSVDateTime) {
//中略
}

日数や時間の保存、取得、計算【C#】【Unity】 – (:3[kanのメモ帳]
【Unity開発】Player Prefs(セーブ機能)まとめ【ひよこエッセンス】 – Unity5(C#)初心者・入門者向けチュートリアル ひよこのたまご

バージョン情報を更新する

ようやくたどり着きました。
最新のデータをダウンロードした場合はファイルの更新日を取得し、PlayerPrefsを更新します。ファイルの更新日はGetLastWriteTime()で取得できますが、現地時間なのでUTCに変換してから保存します。

void DownLoadFile() {
//中略
} else {
//正常にダウンロードが完了した時の処理を入れる
File.WriteAllBytes(FilePath(), fileData); //ローカルファイルに書き込み
CSVDateTime = File.GetLastWriteTime(FilePath()).ToUniversalTime(); //ファイルの更新日をUTCに変換する
SaveDate();
}
//中略
}

おわり

ダウンロード失敗時の処理など抜けている部分がありますが、自身がこれと言った実装をしていないので、以上で解説は終わります。

おまけ 日付を表示する、現地時間に変換する

バージョンの日付を表示したいときがあると思います。かなり細かい設定があるので詳しくはリンク先のサイト様を見てもらうとして、簡単なところだけ紹介します。

CSVDateTime.ToLocalTime() //現地時間に変換する
CSVDateTime.ToShortDateString() //スラッシュ区切りの年月日 例:2016/12/7
CSVDateTime.ToLongDateString() //漢字区切りの年月日 例:2016年12月7日
CSVDateTime.ToString("yyyyねんMMがつdd") //オプションを利用し任意の表示を作る 例:2016ねん12がつ7にち

日時(DateTimeオブジェクト)を文字列に変換する: .NET Tips: C#, VB.NET

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です