なるこるな - かけだし個人アプリ/ゲーム開発者ブログ

自作ゲーム/アプリの宣伝を兼ねた個人Unity開発者のブログです

位置情報ゲーム制作日誌その2:Firebaseの匿名ログインを実装しよう

今回は匿名ログインを実装し、アカウント作成と同時にユーザー情報としてアカウント作成日時と初期レベルをFirebaseDatabaseに保存するところまでを書いてみようと思います。

全てネットで調べたことですので目新しいことは何もありませんが、他のサイトなどを見ても分からなかったという方や、Firebaseは初めてという方のお役に立てれば幸いです。

Playerクラスを作成

まずはアカウント作成時にユーザー情報を保存するためのPlayerクラスを作成します。

using System;

public class Player {

    public string signUpDatetime;
    public int level;

    public Player(int level)
    {
        this.signUpDatetime = DateTime.Now.ToString("yyyy年MM月dd日HH時mm分ss秒");
        this.level = level;
    }
}

AuthManagerを作成

匿名ログインを行うAuthManagerクラスを作成します。作成後は適当なエンプティオブジェクトにアタッチしてください。

using UnityEngine;
using Firebase.Auth;

public class AuthManager : MonoBehaviour {

    FirebaseAuth auth;
    public static FirebaseUser user;

    private void Awake() {
        auth = FirebaseAuth.DefaultInstance;
    }

    void Start () {            
        SignUpAnonymousUser();
    }

    public void SignUpAnonymousUser()
    {
        auth.SignInAnonymouslyAsync().ContinueWith(task => {
            if (task.IsCanceled || task.IsFaulted) {
                Debug.LogError("ログインエラー");
                return;
            }
            else if (task.IsCompleted) {
                FirebaseUser newUser = task.Result;
                Player player = new Player(1); // 初期レベルを1とする
                DatabaseManager.sharedInstance.CreateNewPlayer(player, newUser.UserId); // DatabaseにPlayer情報を保存
            }
        });
    }

}

DatabaseManagerクラスを作成

FirebaseDatabaseと情報をやりとりするためのDatabaseManagerクラスを作成します。こちらも作成後は適当なエンプティオブジェクトにアタッチしてください。

using UnityEngine;
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;

public class DatabaseManager : MonoBehaviour {

    public static DatabaseManager sharedInstance = null;
    private static DatabaseReference baseRef = FirebaseDatabase.DefaultInstance.RootReference;

    void Awake () {
		if(sharedInstance == null)
        {
            sharedInstance = this;
        } else if (sharedInstance != this)
        {
            Destroy(gameObject);
        }
        DontDestroyOnLoad(gameObject);

        FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://xxxxxxxxxxxx.firebaseio.com/"); // xxxxxxxxxxxxの部分は自身の環境に合わせてください
    }

    public void CreateNewPlayer(Player player, string uid)  {
        string playerJSON = JsonUtility.ToJson(player);
        baseRef.Child("Players").Child(uid).SetRawJsonValueAsync(playerJSON);
    }
}

https://xxxxxxxxxxxx.firebaseio.com/」はFirebaseコンソールで下の画像部分にありますので、自身のURLに変更してください。
f:id:nakorun:20180324214556p:plain

アクセスルールを変更

FirebaseDatabaseのアクセス権限を以下のように変更します。
f:id:nakorun:20180324215015p:plain
リリースするときはもっと細かく設定する必要がありますが今はこれで構いません。念の為、使用しないときは元の状態に戻しておきましょう。

匿名ログインを有効にする

匿名ログインするためには機能を有効化する必要がありますので、以下を参考に有効化してください。
f:id:nakorun:20180324220026p:plain
カーソルを合わせると赤丸部分に編集ボタンが表示されますのでクリックしてください。
f:id:nakorun:20180324220037p:plain
有効化すれば匿名ログインが利用可能となります。

実機で確認

Auth機能はUnityエディタ上では(多分)利用できないため実機で確認します。(実機での確認方法はまた別の記事でご紹介したいと思います。)
まだ何もありませんが、アプリを起動するとアカウントが作成され、データベースにはアカウント作成日時と初期レベル1が保存されます。
f:id:nakorun:20180324230805p:plain
f:id:nakorun:20180324232730p:plain

次回予告

次回は簡単に実機で確認する方法をご紹介する予定です。いや、その前にデータベースからのデータ取得が先かも。
とりあえずアカウント作成やデータベースへの保存はできるようになりましたがまだまだ分からないことだらけです。UnityとFirebaseを扱った良い本でもあればいいのですが、なぜかFirebaseの本自体がかなり少ない。。。