ニフクラmBaaSお役立ちブログ

スマホアプリ開発にニフクラmBaaS。アプリ開発に役立つ情報をおとどけ!

UnityでAPIキーをJSONファイルから設定できるようにするには?

APIキーはクレデンシャル情報のため、開発、検証、本番、あるいはアプリ別々に管理したいために、ソースコードでも別のJSONファイルに保存して書き換え、差し替えを行いたい時があると思います。今回はJSONファイルで別管理する具体的な方法について解説します。

ニフティクラウド mobile backendのUnity SDKはAPIキーをNCMBSettingsというスクリプトで設定します。 NCMBSettings.csを貼り付けたゲームオブジェクトを作り、Inspectorの中でアプリケーションキー、クライアントキーを設定します。

NCMBSettingsKey

で、ここに書いたデータというのは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フィールドへ記入します。(スクリプト直書きも可)

NCMBSettingsKey2

このとき、拡張子を書かないことがポイントです。

JSONファイルが読み込めた時はキーを上書き、無いときは何もしません。 あとは、publicなリポジトリのignore設定にこのJSONファイルを指定しておけばOKです!

ただし、この方法は実行ファイルをバラすとAPIキーが簡単に取得できてしまう、という問題点があります。 実際にストアで公開するアプリには、まだ使えません....

というわけで、暗号化したJSONファイルを読み込む方法を考案中です。準備できしだい公開します。