20
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-10-15

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

外部データを通信してダウンロードしてくる場合、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が変わるので、キャッシュされない。

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

20
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?