FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【Android】自動バックアップの対象/除外設定をする

【Unity】【Android】自動バックアップの対象/除外設定をする  


 Android には自動でアプリのデータをバックアップしてくれる機能がある(Googleアカウントで Google Drive に保存される。無料で提供され、バックアップ データはユーザーの容量にはカウントされない)。デフォルトではオンになっていて、少なくとも Unity2017 の頃は何もしなくても入っていたのだが、Unity2018 以降ではマニフェストには入ってないようだ。まぁ、入って無くても、通常はオンとして扱われるハズだが、Android もバージョンアップするごとにセキュリティ関連が強化・仕様変更されているので、手動で設定する方法も覚えていた方が良いかも知れない。

アプリの自動バックアップがシンプルに
自動バックアップでユーザーデータをバックアップする

 また、自動バックアップはデータが 25MB までらしいので(掲載時点)、必要なものとそうでないものを分けておいた方が良いだろう。その方法も書いておく。というより、気がついたら半年以上バックアップとられてなかったので、調べてみたらサイズオーバーで止まっていたという状態だった。なので、自分で設定しておく必要性を感じたんだけどね(笑)。

 ちなみにバックアップがとられるデータはデータベース、共有プリファレンス、アプリケーションのプライベート ディレクトリ内のその他のコンテンツで、キャッシュ用のデータは除外されるらしい(Unity での場合、Application.persistentDataPathPlayerPrefs はバックアップされ、Application.temporaryCachePath はバックアップされないと考えて良い)。

 特に画像や動画、サウンドデータ、3Dモデルなどはあっという間に 25MB を超えるので、バックアップ対象からは除外しておいた方が良いだろう(要するにメディア本体はバックアップせず、URIやメタデータなど、復元に必要な情報だけバックアップ対象にするしかない→アプリ側でその情報からメディア本体をサーバからダウンロードして復元するなど)。


(※) Unity 2018.4.4f1 / Android 8.0 で確認



■AndroidManifest.xml での自動バックアップ設定

 自動バックアップを設定する AndroidManifest.xml のタグは application タグである。Unity の場合、「Assets/Plugins/Android/」フォルダ以下に AndroidManifest.xml が置かれるので、それを適当なテキストエディタで開き、application タグ を見つけて、「android:allowBackup="true"」を入れておく(オンの場合。オフにしたいなら false)。


 もし、プラグインなど全く使ってないのなら、デフォルトでは AndroidManifest.xml は用意されていないので、フォルダを含めて自分で作る必要がある。テンプレは Windows の場合「(インストールした Unity のフォルダ)\Editor\Data\PlaybackEngines\AndroidPlayer\src\com\unity3d\player」にあり、Mac の場合「(アプリケーションフォルダ)/Unity.app/Contents/PlaybackEngines/AndroidPlayer/src/com/unity3d/player 」にあるので、コピーして手を加えれば良いだろう。詳細は公式マニュアルを参照して欲しい。

Android 用のプラグインをビルド

 ここでは簡略した例を書いておこう。

●AndroidManifest.xml に allowBackup="true" を入れ、自動バックアップを明示的にオンにする
<?xml version="1.0" encoding="utf-8"?>
<manifest ~(中略)~
<application ~(中略)~ android:allowBackup="true">
~(中略)~
</application>
</manifest>

 なお、単純に allowBackup="true" にすると問題が出る機能もあるので、以下の記事も参考にして欲しい。例えば、gcm(プッシュ通知)などを使っている場合後述する除外設定をしておかないと通知が来なくなるという問題も出るようだ(端末ごとに一意のIDのようなものが必要な場合、バックアップから除外しておかないと不具合の原因になり、セキュリティ的にも良くない)。

Android M AutoBackup機能で開発者が対応しておいた方がよいことまとめ
allowBackupの設定は適切ですか?
allowBackup が true のときに Application Class が呼ばれないことがあって困った話



■バックアップ対象/除外を指定する

 バックアップの対象/除外を設定するにはマニフェストの他に、xml ファイルを作る必要がある。xml ファイルはテキストファイルなので、適当にファイルを作って、拡張子を「.xml」にしておけば良い。ただし、Android の仕様上、「Assets/Plugins/Android/res/xml/」フォルダ直下に置いておかないといけない(掲載時点)。またテキストエンコードは UTF-8 にしておく。


 以下は簡略した AndroidManifest.xml での書き方である。前述の例に対して「android:fullBackupContent="@xml/my_backup_rules"」を追加しただけだが、値の「@xml」が xml フォルダを表し、「my_backup_rules」がファイル名の my_backup_rules.xml に対応している(リソース用のフォルダ名は以下を参照)。

リソースの提供 - リソースタイプをグループ化する

●AndroidManifest.xml にバックアップ対象/除外指定ファイルを設定する
<?xml version="1.0" encoding="utf-8"?>
<manifest ~(中略)~
<application ~(中略)~ android:allowBackup="true" android:fullBackupContent="@xml/my_backup_rules">
~(中略)~
</application>
</manifest>

●バックアップ対象/除外指定ファイル「my_backup_rules.xml」(※名前は任意:マニフェストに合わせる。内容は適当)
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="gcm"/>
<include domain="file" path="."/>
<exclude domain="file" path="Thumbnails"/>
<include domain="database" path="."/>
<exclude domain="database" path="local_secrets.db"/>
</full-backup-content>

 「include」は含む(※ただし、書いてないものは含まない)、「exclude」は除外(include の中から除外という感じ)となる。

 上記の例は適当なものなので、自分の環境によって書き換えて欲しいが、簡単に言えば「PlayerPrefs をバックアップ対象にするが、gcm(プッシュ通知のIDみたいなもの)は除外、files フォルダも対象とするが、「Thumbnails」以下は除外、データーベースも対象とするが、local_secrets は除外」といった感じだ。path の値は適当に置き換えて欲しい。

 それ以外には「root」(アプリプライベートフォルダ)「external」(外部ストレージ)などもあり、Android 9.0 以降なら「暗号化したもののみバックアップ」のようなこともできるらしいが、その辺りは公式マニュアルを参考にして欲しい。

Back up user data with Auto Backup - XML config syntax
Back up user data with Auto Backup - Define device conditions required for backup



 なお、バックアップを確認するには adb を使う方法、または、単純にスマホの設定画面から「Google>バックアップ」で「今すぐバックアップ」ボタンを押せばバックアップできる。しかし、以前のデータがあったりすると(特に 25MB 超えてたりすると)上手く行かないようなので、なるべく初期段階で設定しておいた方が良いかも知れない(既に自動バックアップされなくなったアプリを再び対象にする方法がググっても見つからないんだよね…なぜかバックアップ削除してもダメなものあるし…|||orz)。





(関連記事)
【Unity】PlayerPrefs, persistentDataPath, temporaryCachePath の保存場所(パス)一覧表
【Unity】【Android】マルチウィンドウを禁止する
【Unity】Android アプリでパーミッション(権限)要求をする
【Unity】Firebase のプッシュ通知と FantomPlugin の共存(Firebase と他のプラグインの共存方法)
【Unity】AssetStore版 FantomPlugin のセットアップ


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityプラグイン  Unityリファレンス 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/327-b023266d
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR