Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

UnityとNCMBでユーザ管理を実装してみた話

1 073 vues

Publié le

Nifty Cloud Mobile Backend(ニフクラ)を使ってUnityで開発中の同人ゲームのユーザ管理、ライセンス認証をやってみた話です。

2016/07/23

Publié dans : Technologie
  • Soyez le premier à commenter

UnityとNCMBでユーザ管理を実装してみた話

  1. 1. Unity + NCMBで ユーザ管理してみた 2016/07/23 @toRisouP
  2. 2. 自己紹介 • 名前 とりすーぷ(@toRisouP) • 本業はWeb系エンジニア – 最近は主にScalaを書いてます • 趣味でC#/Unity開発をやってます
  3. 3. 今回話す内容 • NCMBでユーザ管理した話 – Unity要素薄いけどごめんね – まだ開発中で実運用に入ってないので、 紹介するやり方で問題が起きないとは言えません! この方式を信用しないで!
  4. 4. 開発中のゲーム • 「ハクレイフリーマーケット」 – 東方二次創作ゲーム(PC向け同人ゲーム) – ネットワーク対戦専用3Dアクション
  5. 5. 使ってるもの • ゲーム本体 – Unity • 通信対戦部分 – Photon Cloud • ユーザ管理 – Nifty Cloud Mobile Backend(NCMB) – 自前のライセンス認証サーバ
  6. 6. やらなくてはいけないこと • プレイヤーの登録・管理 – メールアドレスを使った登録 – パスワードログイン、パスワード再発行 • シリアルコードによるアクティベーション – 未購入者は体験版モードで動作 – 購入者のみフル機能で遊べるようにしたい
  7. 7. どうやってやる? • ユーザ情報自体の管理はNCMBで – ユーザ情報を自前のサーバで持ちたくない – ユーザ管理周りの機能はNCMBが完全にサポート • アクティベーション機能は自作ライセンスサーバ – 認証サーバを自作したほうが安いし汎用的 – NCMBのカスタムスクリプト機能でできたらよかったんだけど… • 無料プランだと100回/月しか実行できないからきびしい
  8. 8. アクティベーションサーバ • フレームワーク:Ruby on Rails – ncmb-ruby-client をforkして改修して利用 – PostgreSQL + Redis • ConoHa VPS(1Gプラン)にて稼働 – 単一サーバ構成 – ライセンスサーバが落ちててもゲーム自体は動くから… • 少なくともアクティベーション済みユーザには影響なし
  9. 9. アクティベーションサーバ • DBにシリアルコードをハッシュ化して保持 • クライアントからシリアルコードとobject idを受信する – DBを参照して正しいコードか確認 – 送られてきたobject idのユーザが実在するか確認 – 問題なければNCMBのデータストアに購入フラグを保存
  10. 10. 購入フラグ • 購入フラグはNCMBのデータストアで管理 – ライセンスサーバが落ちててもゲームが動くようにしたいから – ゲームログイン時にデータストアを検索して購入状態を確認する
  11. 11. 図解 ゲームクライアント アクティベーション サーバ シリアルコードと ユーザID送信して認証 データストア更新 購入フラグを確認
  12. 12. 絶対にやらないといけない設定 • 購入フラグはAdminのみ書き込み許可にする – NCMBのACL(パーミッション設定)機能を利用 – ライセンス認証サーバからの操作のみ書き込み許可 – ユーザから勝手にフラグを書き換えられないようにする
  13. 13. 図解 ゲームクライアント アクティベーション サーバ ☓ クライアントからは更新できない (ACL設定で制御)
  14. 14. 図解 ゲームクライアント アクティベーション サーバ アクティベーションサーバは Adminロールのユーザとしてログイン ログインAPI Session Token SessionTokenはRedisにexpire付きで保存 揮発したら再度ログインAPIを叩く
  15. 15. 図解 ゲームクライアント アクティベーション サーバ シリアルコードと ユーザID送信 課金フラグをセット AdminのSession Tokenを利用して データストア更新APIを実行
  16. 16. ACL設定周りの罠
  17. 17. ACLのリファレンス • ACLの書き換え方(REST API)
  18. 18. 「なるほど、許可したいところに trueを設定するのか」
  19. 19. 「ということは、不許可にするときは falseにすればいいんだな!」
  20. 20. { "acl": { "role:Admin": { "read": true, "write": false } } }
  21. 21. 400 Bad Request
  22. 22. なんで? • ACLの書き換え方(REST API) – 不許可にするときは要素を定義しないが正解 – APIに対称性がないので感覚で使うと死ぬパターン – リファレンスにわかりにくいけどちゃんと書いてある
  23. 23. ちなみに • UnityからACLを書き換える時も注意が必要 – 下記のコードは何も起きない – 何故か?
  24. 24. 理由 • 「Userオブジェクト自体に更新が無いと通信処理を 行わない実装になっているから」 – 内部実装を読まないと気づかないよコレ…
  25. 25. 解決策 • 明示的に代入をする – Userオブジェクトに更新があったことを自覚させる必要がある
  26. 26. NCMBを使う上でのポイント • わからなくなったらREST APIリファレンスから辿る – リファレンスのUnityの項目は中途半端にしか書いてない – APIパスでファイル内検索して実装を見つけてそこから辿ったほうが早い • Unityプラグインの実装も読む – 逆にREST APIの使い方がわからない場合、実装を読むとわかることがある – NCMBObjectクラスの実装を理解すればとりあえずなんとかなる • わからないことがあったら@Takaaki_Ichijoさんに聞く – 無料プランだと技術サポートに問い合わせできない – ユーザコミュニティは人がいなくてあんまり盛り上がってない – 一條さんに問い合わせた方が早いかも
  27. 27. 所感 • NCMBのユーザ管理はとても優秀 – メールアドレス認証やパスワード再発行も簡単にできる – 無料でこれだけの機能が使えるのは良い • ライセンスサーバ自分で作るの面倒くさかった – 保守するものが増えるのはだるい… – スクリプト機能が無料でもちゃんと使えたらよかったな… • ACL周りの設定が罠っぽい – REST API側もUnity Plugin側も両方罠っぽい – リファレンスをわかりやすく書いてくれると嬉しいな…
  28. 28. 未だにわからないこと • 「ユーザが所属しているロールの取得方法」 – ロールに所属する会員一覧は取れるのだが… • 逆引き方法はREST APIみてもよくわからなかった – 結局ロールを使わない実装にして回避した • その結果がデータストアで購入フラグを管理するというやり方
  29. 29. 以上

×