3
1

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 3 years have passed since last update.

PONOSAdvent Calendar 2020

Day 18

iCloud・iTunesのバックアップを考慮したUnityのデータ保存における注意点

Last updated at Posted at 2020-12-17

この記事はPONOS Advent Calendar 2020の18日目の記事です。
昨日は@nisei275さんの「RustとWebSocketでユーザの位置情報を双方通信する仕組みを実装してみる」でした。

#はじめに
本記事では、iCloud・iTunesのバックアップにおいてUnityのどのディレクトリが対象・非対象になるのか、
Unityでのデータを保存する上で注意点について紹介していきます。

#iCloud・iTunesのバックアップについて
https://support.apple.com/ja-jp/HT204136

iCloudバックアップはiCloudのオンラインストレージ上からバックアップ
iTunesバックアップはPC上からバックアップ
以前は、バックアップできる項目に差異があったようですが、現時点ではほとんど変わりません。

#Unityでのバックアップ対象・非対象ディレクトリ
iCloud・iTunesのバックアップでは、アプリ内ディレクトリの一部がバックアップ対象となります。

以下、Unityで主に使用されるディレクトリを該当するiOSアプリのディレクトリを列挙したものとなります。

Unity iOSアプリ バックアップ対象・非対象
Application.persitantDataPath
永続性のあるデータを保存するためのパス
Documents/ 対象
Application.temporaryCachePath
一時的なデータを保存するためのパス
Library/Caches/ 非対象
PlayerPrefs
簡易的にデータの保存・読み込み機能
Library/Preferences/
(NSUserDefaults)
対象

#データを保存する上での注意点

バックアップ対象のディレクトリに比較的容量が大きいファイルを含めない

2.23 Apps must follow the iOS Data Storage Guidelines or they will be rejected

AssetBundleや比較的容量が大きいファイルをバックアップ対象に含めてしまうと、
リジェクトされる可能性があります。

Apple側としてはバックアップ必要なものはバックアップディレクトリに含めて、
バックアップ不要なものはバックアップされないディレクトリもしくは、"do not back up"として、
バックアップされないように明示的に指定してほしいといった意図があるようです。
https://developer.apple.com/icloud/documentation/data-storage/index.html

そのためUnityではバックアップ対象から外す設定が提供されております。

#if UNITY_IOS
UnityEngine.iOS.Device.SetNoBackupFlag(Application.persitantDataPath);
#endif

端末一意のデータ、ユーザー認証情報をバックアップ対象に含めない

例えばですが、以下のケースが考えれます。

PlayerPrefsに端末を識別するIDユーザー作成時に作られる情報を保存していた場合。
(PlayerPrefsはiCloud・iTunesのバックアップ対象となっています)

  1. Aの端末でバックアップを作成
  2. Bの端末でAの端末データのバックアップデータを用いて機種変更
  3. Bの端末にはAの端末データのPlayerPrefsが含められている状態

つまり、Aの端末(ユーザーA)= Bの端末(ユーザーA)といったユーザーの複製が行えてしまいます。
これにより1つのユーザーデータに対して複数端末からのアクセスができる状況が発生します。

アプリによっては、これを良しとするものもあるかと思います。
しかし意図しない挙動が発生したり、ユーザーデータの破損にも繋がる可能性もあるため、
予め想定した設計をする必要があります。

例えば、PlayerPrefsに保存している一部の情報をバックアップ対象とされないディレクトリに逃すことや、
サーバーを介してログインを行っているアプリであれば、
ログイン時にトークンを発行してそのトークンと一致している端末のみ
プレイ可能にするといった方法も考えられます。

#おわりに

  • 各種プラットフォームでアプリを提供する場合は、プラットフォームごとのディレクトリの用途を予め確認する必要があります
  • 保存する先のディレクトリがバックアップ対象・非対象かを確認し、目的に応じて使い分けることが重要

明日は@MilayYadokariさんの記事です。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?