APIキーはクレデンシャル情報のため、開発、検証、本番、あるいはアプリ別々に管理したいために、ソースコードでも別のJSONファイルに保存して書き換え、差し替えを行いたい時があると思います。今回はJSONファイルで別管理する具体的な方法について解説します。
ニフティクラウド mobile backendのUnity SDKはAPIキーをNCMBSettingsというスクリプトで設定します。 NCMBSettings.csを貼り付けたゲームオブジェクトを作り、Inspectorの中でアプリケーションキー、クライアントキーを設定します。
で、ここに書いたデータというのはUnityのシーンファイル(.unityファイル)の中に保存されるため、NCMBを使ったサンプルプロジェクトをgithubで公開したりするときはいちいち消してやらないといけません。
うっかり忘れてコミットしてしまうとAPIキーがダダ漏れです。恐ろしや。
というわけで、APIキーを記述したJSONファイルを作り、それを起動時に読み込むスクリプトを書きました。
using NCMB; using System; using UnityEngine; public class NCMBSettingKeyLoadFromExternalFile : MonoBehaviour { public string filePath; private void Start() { if (!string.IsNullOrEmpty(filePath)) { TextAsset textAsset = Resources.Load(filePath) as TextAsset; if (textAsset != null) { NCMBAPIKey ncmbKey = JsonUtility.FromJson(textAsset.text); NCMBSettings.ApplicationKey = ncmbKey.applicationKey; NCMBSettings.ClientKey = ncmbKey.clientKey; } } } } [Serializable] internal class NCMBAPIKey { public string applicationKey; public string clientKey; }
まずは、このスクリプトを貼り付けたオブジェクトをシーン内に作っておきます。NCMBSettingsと同じオブジェクトに貼ってもOK。
次にテキストファイルを用意し、テキストエディタ等で
{"applicationKey":"[アプリケーションキー]", "clientKey":"[クライアントキー]"}
と一行で書いておきます。名前はなんでも構いませんが、ここではNCMBKey.jsonとしています。 作ったJSONファイルはResources以下のフォルダに置き、ファイルパスを上記スクリプトのfilePathフィールドへ記入します。(スクリプト直書きも可)
このとき、拡張子を書かないことがポイントです。
JSONファイルが読み込めた時はキーを上書き、無いときは何もしません。 あとは、publicなリポジトリのignore設定にこのJSONファイルを指定しておけばOKです!
ただし、この方法は実行ファイルをバラすとAPIキーが簡単に取得できてしまう、という問題点があります。 実際にストアで公開するアプリには、まだ使えません....
というわけで、暗号化したJSONファイルを読み込む方法を考案中です。準備できしだい公開します。