Posted at

[Unity開発] ダウンロードデータ、AssetBundle、などのキャッシュ問題切り分けまとめ

More than 1 year has passed since last update.


概要

最新のサーバーを使用するスマホアプリを開発していてデータが落ちてこねえ、ということありませんか?

僕は最近ありました、アセットバンドルを暗号化していたためキャッシュされたアセットバンドルをダウンロードしたときに壊れている扱いになって何が何だかな状態に。

作成時の不具合なのかまず検討したため原因究明に時間がかかったものの結局キャッシュかよという切ない状況になりました。

ということでデータをダウンロードする場合はデータが悪い場合もありますがキャッシュが原因の場合もあるので開発者は知識として知っておいたほうがいいと思いまとめました。

WWWクラスなどでアセットバンドルや画像データをダウンロードした時に最新のデータではなく古いデータになっていることがあります。

この問題はアプリ側(OS)側のキャッシュとサーバー側のキャッシュの可能性があります。


アプリ側のキャッシュ

アプリ側のキャッシュはWWWクラス(新しい方のAPIはちょっとわからないです)がOSのAPIしているためにダウンロードデータをキャッシュしているために起こります、Unityのキャッシュとは別なので注意が必要です。

回避策としては以下の公式リンクを参考にしてください。

https://helpdesk.unity3d.co.jp/hc/ja/articles/204488864-WWW-がキャッシュされるのを防ぐ

https://qiita.com/tempura/items/75a429507c6d32bf8f46


サーバ側のキャッシュ

サーバー側のキャッシュはサーバークライアント型のアプリを開発している場合は注意してください。

Webの開発でもよく起きているらしく、ファイルの更新が検出できないような構成だと起こるらしいです。

回避策としてはwebサーバの設定ファイルでキャッシュしないような設定にして

webサーバーを立ち上げ直す必要があるみたいです。

https://qiita.com/sugiii8/items/233e88aa26f00b290f38

https://qiita.com/itsumoonazicode/items/ad5c8017e9285868547e


まとめ

意外とアプリ開発をしていてサーバのキャッシュの問題であった場合は検索してもうまくヒットせず調べることが難しかったです。

データダウンロードを行うようなアプリを開発するときはキャッシュが問題になる場合があるの知っていれば問題が起きた時に原因特定の時間が短縮できるはずです。

同じ問題当たってしまった人の役に立てればと嬉しいです。

何か間違いがあればコメントください。