UnityでPlayFabを使ってみる:導入とユーザー管理

マイクロソフトが買収したことで話題になったPlayFabを使ってみようと思います。

PlayFabは、ニフティクラウドmobile backendなどと同じくmBaaSと呼ばれるカテゴリのサービスで、自分でDBサーバやAPIサーバを用意することなく、ゲームアプリのバックエンドの仕組みを構築することができます。
世界的にはAWSが展開するGameSparksが直接の競合になるでしょうか。

サーバへの接続は、PlayFabが用意している各種プラットフォーム用のSDKが担ってくれるので非常に簡単です。
もちろんUnity用のSDKもありますし、XcodeやAndroid Studio等ネイティブの環境や、PS4/Xboxなどコンソール機にも対応しているようです。
しかも、Unity用のSDKはUWPの書き出しにも対応しているそうなので、HoloLensやWindowsMRアプリのバックエンドとしても有力な選択肢になります。
(少し前に試したところ、ニフティクラウドのSDKはUWP対応されておらず使用できませんでした)

UnityでPlayFabを使う方法ですが、下記に記載されているように、まずはEditor拡張をインストールすることが推奨されています。

Editor拡張のウインドウでPlayFabで登録したアカウント情報を入力して、SDK本体のダウンロードを行います。
そして、上記に記載してあるサンプルコードを実行して動作を確認してください。

サンプルコードから抜粋した下記が重要な部分になります。

public void Start()
{
    var request = new LoginWithCustomIDRequest { CustomId = "GettingStartedGuide", CreateAccount = true};
    PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure);
}

ゲームの起動サイクルとして、まずはユーザー登録とログインが必要になります。
ショッピングアプリなどと異なり、スマホゲームアプリは、ストアからダウンロードして起動した時に「ユーザー登録」を求められることはほぼ皆無です(ユーザー登録時の離脱を防ぐため)。アプリの動きとしては、端末固有のIDを使ってログインを試みて、サーバ側にユーザーが存在しない場合は新規ユーザーの作成を行い、ユーザーが存在する場合はそのユーザーでログインする、ということを行っています。

LoginWithCustomIDは、端末IDではなくアプリ側で決めたCustomIDを使って上記の動き(ユーザーが存在しなければ作成し、存在したらそのIDでログイン)を行っているメソッドです。なので、サンプルコードを1回目に実行した時に、PlayFabにPlayerが生成され、2回目以降の実行では、その生成したユーザーでログインを行う、という動きになります。

サンプルコードではCustomIDでユーザーを作成していますが、例えばiOSの場合はidentifierForVendorという固有のIDを使って同じことを行うのが推奨されます。(LoginWithIOSDeviceIDを使用)

public void LoginWithUUID()
{
    var uuid = UnityEngine.iOS.Device.vendorIdentifier;
    //SystemInfo.deviceUniqueIdentifierだとEditorでも動作し、iOSでもvendorIdentifierが取得可能のようだ
 
    var request = new LoginWithIOSDeviceIDRequest
    {
        DeviceId = uuid,
        CreateAccount = true
    };
    PlayFabClientAPI.LoginWithIOSDeviceID(request, OnLoginSuccess, OnLoginFailure);
}

Androidの場合はLoginWithIOSDeviceIDを使用しますが、DeviceIDの取得が若干面倒なようです。
(SystemInfo.deviceUniqueIdentifierで取得できないのか後ほど検証してみます)

How can I get Android_ID (64 bit value, 16hex digits) without plugins in Unity3d?
AndroidJavaClass clsUnity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject objActivity = clsUnity.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject objResolver = objActivity.Call<AndroidJavaObject>("getContentResolver");
AndroidJavaClass clsSecure = new AndroidJavaClass("android.provider.Settings$Secure");
android_id = clsSecure.CallStatic<string>("getString", objResolver, "android_id");

このように各種プラットフォームで暗黙のユーザー登録とログインができるようになれば、そのプレイヤーに紐付いた値(キャラクターのステータスやスコアなどなど)を簡単に読み書きできるようになります。

また、複数のデバイスで使用したかったり、スマホの機種変更を行ってデータを引継ぎしたりするためには、自動的に作られたアカウントに対して、ユーザー名やメールアドレスとパスワードを設定し、明示的なログインを可能にすることが求められます。各種ソーシャルアカウントに関連付けてそれを使ってログインする、という方法もとても便利です。

PlayFabではどちらの機能も用意されているので、かなり柔軟にユーザー管理を行うことが可能になっています。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク