月別アーカイブ: 2017年12月

SafariでWebGL内のファイルが保存ができない

・症状
Safari上で実行しているWebGLアプリで設定データなどが保存されず、再訪問もしくは再読み込みの度に設定データが初期状態に戻ってしまう問題が発生しました。

JavaScriptコンソールを見ると、WebGLの初期化時に
“IndexedDB is not available. Data will not persist in cache and PlayerPrefs will not be saved.”
というログが出ていました。

・対応
※ セキュリティ上の問題があるかもしれませんので、ご自身の判断で行ってください。

Safariの「開発」メニューから「クロスオリジンの制限を無効にする」設定をすると設定データを保持できるようになります。

ただ、JavaScriptコンソールに以下の警告ログが出るようになります。
“warning: FS.syncfs operations in flight at once, probably just doing extra work”
[参考]:warning: FS.syncfs operations in flight at once, probably just doing extra work

・原因
WebGLではファイルのIOにindexedDBを使用しています。
これがSafariのデフォルト設定ではセキュリティにより使用できないようになっているようです。
[参考]:
(Appleに開発者登録している方しかご覧になれないかもしれません。)
What’s New in Safari – Safari 11.0 – Security and Privacy

・補足
Unityから書き出したWebGLでファイルIOが上手くいかない問題がもともとあったようです。
[参考]:Data PersistenceSaving Games Online in Unity WebGL

ただUnity2017.2では対応がされているようです。
(実際にはだいぶ前のバージョンで対応されているようです。)
前記の警告ログはUnityのWebGLがindexedDBを同期する時に出ているものと思われます。