Skip to content

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

Posted in 技術記事


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


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


 

ダウンロードしたデータを保存する

さて前回の記事では該当データのダウンロードまでを説明したので、その後の処理に移ります。
私のようにUnityからプログラムに入ったような人だとファイルの入出力にイメージが沸かず戸惑うかもしれませんが、やることは簡単で次の3つです

①ファイル名を決める
②ファイルの保存先を決める
③データを書き込む

①ファイル名を決める

これは好きに決めていいので簡単です。今回は「gamedata.csv」とします。

②ファイルの保存先を決める

ここが少し厄介で、PCで開発時と実機(android)テスト時で保存先のパスを分ける必要があります。
(なお、iSOも対応したいとなった場合は保存先に注意が必要です。)
ポイントはApplication.persistentDataPathです。ここに保存したデータは、APKのアップデートで更新されないという特徴があります。しかし、ユーザーが普通の手段で見ることが出来る(セキュアなデータの保存には向かない)点に注意して下さい。
なお今回の使い方では問題ありませんが、別の使い方(別アプリからも読み書き等)をしたいとなると猛烈に面倒な問題がまっています。興味のある方は参考リンクを御覧ください。私は理解を諦めました

//gamedata.csvの保存先を返す関数
string FilePath() {
// Androidの場合
if (Application.platform == RuntimePlatform.Android) { //アプリを実行したプラットフォームを判定
string path = Application.persistentDataPath;
return Path.Combine(path, "gamedata.csv"); //pathとファイル名をくっつける
}
// それ以外(Unity Editor=PC)の場合
else {
string path = Application.dataPath; //実行したプロジェクトのフォルダ(/asset)
return Path.Combine(path, "gamedata.csv");
}
}

 

参考
Unityのリソース保存パス | MetaData
PlayerPrefsではなく、自前ファイルに入出力 – matudozerのアプリ作成日記
AndroidのpersistentDataPathがカオス – wizaman’s blog

 

③データを書き込む

NCMBのファイルストアからダウンロードしたデータの形式はファイルではなくbyte型配列(生データ?)なので、相応の扱いをします。といっても用意されてるメソッドを使うだけなので簡単です。

//ファイル名を含む絶対パス(String)にbyte型配列のデータ(Byte[])を書き込むメソッド
using System.IO;
File.WriteAllBytes(String, Byte[]);

 

参考
ファイル入出力 (System.IO.File) – Programming/.NET Framework/ファイルシステム – 総武ソフトウェア推進所

 

まとめ

以上の3つの項目と、前回の内容を合わせると次のような形になります。これでファイルストアからのダウンロード&ファイルの保存が可能です。

using NCMB;
using System.IO;
void DownLoadFile(){
NCMBFile file = new NCMBFile ("gamedata.csv"); //アップロードしたファイル名を入れる
file.FetchAsync ((byte[] fileData, NCMBException error) => { //ダウンロードを開始する命令
if (error != null) {
//エラーが起こったときの処理を入れる
} else {
//正常にダウンロードが完了した時の処理を入れる。
File.WriteAllBytes(FilePath(),fileData); //ローカルファイルに書き込み
}
});
}

その3へ続く。

 

Be First to Comment

コメントを残す

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