Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
22
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

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

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
22
Help us understand the problem. What are the problem?