PlayFabの使い方 ユーザーデータ周り

  • 投稿日:
  • by
  • カテゴリ:

ゲームアプリのバックエンドとしてPlayFabを触り始めました。一通り機能が揃っていてすごく便利な感じです。
英語ドキュメントやフォーラムを検索すれば大抵の事は解決しますが、日本語情報が少ないのでここにメモしておきます。

まずユーザーに紐づく情報をどう取得または保存するかについて、下記のように使い分けるのが良さそうです。

・プレイヤー表示名...
  PlayerProfileのDisplayNameで取得。UpdateUserTitleDisplayNameで更新。

・プレイヤーの経験値やハイスコアなどの数値...
  Statisticsデータとしてサーバー側のCloudScriptを呼び出して保存する。
  不正対策としてクライアントからは直接書き込めないようにデフォルト設定されている。
  Statisticsとして保存しているデータはLeaderboard(ランキング機能)として扱える。

・ゲーム内通貨の所持数...
  GetPlayerCombinedInfoのUserVirtualCurrencyで取得。
  不正対策としてクライアントからは通貨の加算減算ができないようにデフォルト設定されている。

・武器やアイテムやスキルの所持フラグ...
  マスター情報はCatalogで管理し、ユーザーの所持データはGetUserInventoryで取得。
  販売アイテムじゃない物はprice 0でカタログ登録しておき、サーバー側のGrantItemsToUserで付与するか、クライアント側のPurchaseItemで所持する。

・フレンド情報...
  GetFriendsListAddFriendを使う。
  フレンドというより一方的なフォロー登録なので、相互フォローしたいなら自前で処理を書く。

・そのほか諸々のユーザ情報...
  UserDataとして取得や保存する。
  クライアントから書き換えられたくないデータは、サーバー側でUpdateUserReadOnlyDataを使う。


ログイン時にまとめてデータを取得するには、下記のようにGetPlayerCombinedInfoRequestParamsを指定する。


GetPlayerCombinedInfoRequestParams InfoRequestParams = new GetPlayerCombinedInfoRequestParams()
{
	GetPlayerProfile = true,
	ProfileConstraints = new PlayerProfileViewConstraints()
	{
		ShowDisplayName = true
	},
	GetPlayerStatistics =true,
	GetUserInventory = true,
	GetUserData = true,
	GetUserReadOnlyData = true,
	GetUserVirtualCurrency = true
};

PlayFabClientAPI.LoginWithCustomID(
	new LoginWithCustomIDRequest()
	{
		TitleId = PlayFabSettings.TitleId,
		CustomId = SystemInfo.deviceUniqueIdentifier,
		CreateAccount = true,
		InfoRequestParameters = InfoRequestParams
	}, 
	(result) => {}, 
	(error) => {}
);