UnityのiOSでデータダウンロード時にキャッシュされてしまう問題

  • 16
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

これも実体験ですが、データ更新が端末によって上手くいったりいかなかったりした話。リリース済みのアプリのイベント更新が行えない!?と焦った(笑)

外部データを通信してダウンロードしてくる場合、WWWクラスを使用するかと思う。このWWWクラスがiOSではNSURLを呼んでおり、NSURLはアクセス情報をデフォルトでキャッシュする。なので、何も考えずにデータ更新を行うと、前のデータがキャッシュされててデータが更新されないって状態になる可能性がある。

上記問題のやっかいなところは、キャッシュされたりされなかったりする。端末によっても挙動が違う。完全にOSが独自に処理してるところなので、アプリ側からの干渉が出来ない。あとよくあるのが、開発中はデータは常にクリアした状態で試してたりするので、実際リリースされた後に更新されなくて気づいたり(自分はまさにこれ)。

iOSでの対応方法としてはこれ→ NSURLRequestのキャッシュを無効にする方法

Unity側で自分が取った対応方法は通信時にタイムスタンプを付加する方法。

// 以前
string url = "http://tempura.com/data.unity3d";

// タイムスタンプ追加後
string url = "http://tempura.com/data.unity3d";
url += ((url.Contains("?")) ? "&" : "?") + "t=" + DateTime.Now.ToString("yyyyMMddHHmmss");

これで毎回URLが変わるので、キャッシュされない。

いつどのタイミングでキャッシュ問題が起きるか分からないので、気を付けといた方がいいですよ~

Author

http://okamura0510.jp