Skip to content
Song Myung Jin edited this page Jun 19, 2016 · 6 revisions

Last Modified 2016-06-16

CloudBread Projectのインストールガイド

この文書では、開発者に向けたCloudBreadプロジェクト使用手順をご紹介致します。CloudBreadの設置関連文書は **CloudBread インストールガイド**を参考にしてください。

オープンソースプロジェクト

CloudBreadは、モバイルゲーム、モバイルアプリを向けたほとんどの機能を提供する無料オープンソース(MITライセンス)プロジェクト

100余りのBusiness Logicを基本提供

  • モバイルゲーム開発者はアプリ開発のみが集中
  • CloudBreadが提供する APIをパラメータだけ合わせて呼出
  • 開発及びテストのためのPostmanコレクションや例題テストアプリ提供
  • RestfulAPIを呼び出す関数を別に作ることが必要ないです

クラウドを活用した最小~最大規模バックエンドサーバ構築

  • クラウド環境を基本アーキテクチャで開発してクラウドの長所をそのまま使用
  • サーバーが拡張されてもモバイルゲームとアプリのコードは変わらない
  • 垂直拡張(Scale-up)と受刑拡張(Scale-out)選択は自由
  • ゲームの性格に合ったサービスのみ使用可能(リアルタイムの通信機能は 除外、大量のログの処理機能除外など)

セキュリティ、管理および統計情報提供

  • 認証(Authentication)とデータ暗号化(AES256)を選択的使用可能
  • GM管理者道具提供(CloudBread-Admin-Webプロジェクト)
  • 基本統計を向けた配置(DAU、HAU、DARPUなど)提供
  • 無料技術教育提供(ヘカトンやキャンプ)

CloudBreadサーバとゲームクライアント通信

CloudBreadはAPIサーバー(Core)とリアルタイム通信を行うための Socketサーバーを選択して使用可能です。CloudBreadとゲームクライアントとの通信は下記のように行われます。 リアルタイムのコミュニケーション部分は後でもっと説明していたします。

  • HTTP プロトコル
  • Restful API
  • JSON 形式

例えば、イベント照会API SelGameEvents HTTP Request構造

{
    memberID = "member1"
}

**SelGameEventsがリターンするHTTP Response 構造

{
    EventID ="eventID1", EventName="クリスタル1", 期間=…
    EventID =“eventID2", EventName="良いアイテム1", 期間=…
    EventID ="eventID13", EventName="ボーナスアイテム", 期間=…
}

SelGameEventsと同じAPIをCloudBreadではBehaviorに分類して、各 Behaviorたちを一般化したAPIを提供します。つまり、API Game Logic=Behavio]rでGame Logic=APIであるため、API機能を追加したり、変更する場合、フレームワークを通じて簡単に修正も可能です。

CloudBreadが 提供するBehavior リスト CloudBreadは2016年3月基準109つのBehaviorを支援しています。全体 Behaviorリストをご覧いただくには下記のリンクを参考にしてください。 CloudBread behavior list wiki page

CloudBread データが 保存される データベース BehaviorがゲーマーのActionなら、Actionを記録するObjectがDatabaseです。たとえば、次のようなデータベースのテーブルに情報が記録されます。

情報 データベーステーブル
会員 Member
管理者 Admin
購買 Purchase
アイテム Item
メンバーのアイテム MemberItem
ゲーム情報 GameInfo
ステージ Stage
プレゼント Gift
公知事項 Notice
イベント Event
クーポン Coupon

CloudBreadの全体データベース構造やテーブル詳細スキーマ情報をご覧いただくには下記の リンクを参考にしてください。CloudBread database design


CloudBread DEMO及び テスト

CloudBreadはクライアントのゲーム開発者の 便宜を図るため、Demoテストのためのサーバと APIを提供します。 APIをテストするためには開発者の準備事項という文書に含まれたPostmanをダウンロードから インストールします。PostmanはREST APIを開発してテストする時に有用な無料ツールです。

もう CloudBreadで 提供する APIを DEMO サーバーで テスト 可能です。

  • Demoサーバアドレスはいつでも変更されことができます。
  • テスト目的でしばらく使用お願いします。
  • 最も小さなCloud単位でサービス中です。データが周期的に初期化されます。

CloudBread API テスト

Postman collectionをよく設置したなら、APIを呼び出し可能です。

  • 公示事項照会 - CBSelNotices API 呼び出しで公示事項データを照会可能
  • イベント一覧照会 - CBSelGameEvents API 呼び出しで現在の ユーザーが参加可能なイベントを照会可能
  • 到着したプレゼント照会 - CBSelGiftItemToMe API 呼び出しで現在の ユーザーに到着したプレゼントを照会可能
  • 会員のゲーム情報照会 - CBComSelMemberGameInfoes API 呼び出しで、現在のゲーマーの全域情報照会可能
  • 会員のランク照会 - GetMemberRankbyMeberID API呼び出しで特定の会員のランク情報照会可能
  • 特定の範囲のランク順位照会-GetRangeRankerInfo API呼び出しに範囲内のランク情報照会可能
  • 1等からXなどまでランク照会 - CBRank-GetTopXRanker API呼び出しで1位からX等までのランク情報照会可能
  • 会員のアイテム一覧照会 - CBSelMemberItems API呼び出しで特定の会員が所有したアイテム一覧照会可能
  • 購買(IAP)の照会 - CBComSelMemberItemPurchase API呼び出しで特定の会員の購買(IAP)情報照会

CloudBreadは2016年3月基準109つのBehaviorを支援しています。 全体Behaviorリストをご覧いただくには下記のリンクを参考にしてください。CloudBread behavior list wiki page

PostmanはCloudBread開発とテストをために利用されます。CloudBreadの多様なAPIをゲームで利用するためには、ゲーム内呼び出す例題が必要です。次のチャプターで関連内容を見ることができます。


Unity 開発者に向けた CloudBread API 呼び出しDemo

国内外でゲーム開発に最も多く利用されるミドルウェアゲームエンジンであるUnityを利用してCloudBread APIを呼び出しする案を紹介してあげます。

Demoで利用されるプロジェクトは CloudBread-Client-Unity プロジェクトであり、次のリンクで見ることができます。


CloudBreadデータベース構造、API実行 過程紹介

このチャプターでは CloudBreadの DBの 構造と APIを 通じて ゲーム 使用者の 流入から 遂行する 基本の 流れを 紹介します。

Member作業

Memberは基本的に会員のアカウント情報を提供します。つまり、ログインおよびメールアドレスなどのアカウント関連情報を保存して記録します。

MemberID MemberPWD Email Name1 ...
aaa PWD [email protected] nicknameA ...
bbb PWD [email protected] nicknameaB ...
  • CloudBread v2.0.xからは基本外部認証(Facebook認証、Google ID、Microsoft ID、カカオ認証など)を利用します。
  • Memberidは、外部認証提供者が作ってくれている会員の固有idを記録します。
  • MemberPWDはCloudBread v2.0.x以上から使用しません。 しばらく後、認証処理で詳細に紹介します。
  • 認証過程で、権限の付与を通じてemailやnicknameを受け取ったり、ユーザー入力を通じてemail、nicknameを受けます。
  • Postmanの CBSelLoginIDDupeCheck APIを利用してEmailとName1の重複を検査します。
  • Emailは後に CS及びユーザ識別目的で必要です。
  • Name1は"ニックネーム"でRank-leader boardなどで活用されます。
  • 入れる時は InsRegMember APIを利用します。
  • InsRegMemberは内部的にMembersとGameinfoに同時に入力するロジックを実行します。
  • Members=アカウント、Gameinfoはゲーマーの属性情報保存に使用
  • Gameinfoのpointは"ランキング"に利用されるので、必ず数字のみ使用
  • Name1のニックネームとgameinfoのpointがランキングで活用
  • CBCOMSelMember APIで照会作業遂行
  • CBCOMUdtMember APIに修正作業遂行

FAQ. すべてのテーブルのsCol等は何に使用されるが?

  • 余分のコラム。該当の値段が持つべき属性を保存する際に、不足する場合、sColにJSONの形で保存可能。sColコラムはVARCHAR(MAX)で大量のデータ保存が可能する。

GameInfo

MemberID Level Exp Point ...
aaa 10 10000 100 ...
bbb 20 20000 200 ...
  • GameInfoはゲーマーの 全域(global) 属性 値を 保存して、しばらく 後、紹介されるMemberItemとは異なる
  • 1:関係でアイテムと同じ所有物の貯蔵はMemberItemを使用
  • "チャチャチャ"のようなゲームのゲーマーが所有する数台の自動車+自動車別に登録された属性(最高速力、車レベル加速度…)どのように保存した方がいいかな?
  • Memberitemに1つの自動車 + cCol1~10にアイテムの属性を保存
  • 余分のコラムが不足する場合、sColにjsonに保存、おすすめ
  • カテゴリコラムを活用して、識別子で使用
  • ゲーマーの属性と見られるお金、現金性アイテム情報はgameinfoに保存しましょうか。 なければmemberitemに保存しましょうか。
  • 可能すれば、memberitemを推薦。リーダーボードに使われるランキング情報やゲームプレーヤー全域情報を除けば、Itemテーブルに上げてMemberItemに保存を推薦
  • Gameinfoのpointは"ランキング"に利用されるので、数字のみ使用
  • Name1のニックネームとgameinfoのpointがランキングで活用
  • CBComSelMemberGameInfoesで照会
  • CBComUdtMemberGameInfoesに修正

ItemList

アイテム一覧テーブル

ItemID ItemName Price Category ...
GUID アイテム1 100 消耗性アイテム ...
GUID アイテム 200 仮想通貨 ...
  • アイテムは商店の販売物品+ゲーマーに所属された仮想貨幣などを保存するテーブル
  • アイテム一覧をクライアントに保存する場合とアイテム一覧をサーバーに保存する場合、それぞれ長所と短所が存在
  • サーバーに保存市Abusingやプロモーション、バランスの調整などが容易し、以後購買などで効率的に処理可能
  • CloudBreadが提供するAPIとデータ保存活用のためにItemListテーブルに保存を推薦
  • CloudBreadでItem=プレーヤーの所有物でもあって、ゲーマーの仮想通貨(金)などを指定も可能
  • 様々なMemberItem関連behaviorを通じて"MemberItem"に"アイテム"が保存されるパターン
  • CBSelItemListAll APIで、全体アイテム照会して、クライアントセッションに保存して利用
  • CBComSelItemList1 APIで1つのアイテム照会
  • アイテム追加・修正は管理者専用の作業であり、ユーザモードでは使用不可

MemberItems

ゲーマーが所有したゲーム内オブジェクトを保存

MemberItemID MemberID ItemID ItemCount ItemStatus ...
GUID aaa ItemListテーブルのItemID1参照値 10 状態 ...
GUID aaa ItemListテーブルのItemID2参照値 5 状態 ...
GUID aaa ItemListテーブルのItemID3参照値 3 状態 ...
GUID bbb ItemListテーブルのItemID1参照値 2 状態 ...
GUID bbb ItemListテーブルのItemID2参照値 6 状態 ...
  • Member : MemberItem = 1:関係でゲーマーの所有物を保存する重要テーブル
  • "チャチャチャ"のようなゲームの数台の自動車 + 自動車別に登録された属性(最高速力、車レベル加速度…)どのように保存か。
  • Memberitemに1つの自動車 + cCol1 ~ 10に保存
  • ラムが不足する場合、jsonとsColに保存、おすすめ
  • カテゴリコラムを活用して、識別子で使用
  • 金、現金性アイテム情報はgameinfoに保存しましょうか。 なければmemberitemに保存しましょうか。
  • 可能すれば、memberitemを使ってください。 ランクやプレーヤー全域情報を除けば、itemに上げてmemberitemに保存を推薦
  • 属性を保存する部分が不足する場合、sCol余りのコラムを活用し、さまざまな情報を追加保存可能
  • CBSelMemberItemsで会員が所有したアイテムを参照
  • CBComSelMemberItemと1つのmemberitemの照会
  • CBComUdtMemberItemと1つのmemberitem修正
  • CBComInsMemberItemとmemberitem追加
  • CBAddUseMemberItemとmembergameinfo修正 + memberitem追加・修正処理(トゥレンジェクション処理)

FAQ.

  • INSERT or UPDATEがAPIに存在する理由 現在のバージョンのCloudBreadではUPSERT処理の際、使用者のinventoryが存在する場合、UPDATE、存在しない場合、INSERTに分けて呼び出す仕組みを提供します。 CloudBreadは1:関係のデータベースモデルを使用します。 UPSERT・ロジックの利用して処理も可能であるが、プロパティ値暗号化モードを利用する場合、UPSERTなどの使用が不可解なります。 CloudBread v1開発時ASDB(Azure SQL Database)がv11バージョンに暗号化を基本提供せず、ASDBでCLRの利用も不可解アプリケーションレベル(CloudBread Core)で暗号化後ASDBに保存する形式だけ可能たが、現在ASDB v12からはTDE暗号化を支援して暗号化を数パターンに適用可能です。 CloudBread v3では、テーブルスキーマを変更してさらに柔軟で安定的な処理を提供する計画中です。

Stage

ゲーマーが進行中のゲーム内プレー単位

MemberGameInfoStageID MemberID StageName StageStatus Category Mission ...
GUID aaa Stage1 クリア グループ1 ステージミッション1 ...
GUID aaa Stage2 クリア グループ2 ステージミッション2 ...
GUID aaa Stage3 進行中 グループ1 ステージミッション3 ...
GUID bbb Stage1 クリア グループ1 ステージミッション1 ...
GUID bbb Stage2 進行中 グループ2 ステージミッション2 ...
  • ステージはゲームの"プレー"単位を指す
  • 同様に、Memberと1:の関係を持っていて、ステージ別補償、最高点数、記録などを保管にいいです
  • 不足したコラムはJsonデータとして活用
  • CBSelMemberGameInfoStagesとmemberのstageを参照
  • CBComSelMemberGameInfoStagesに1個stage情報照会
  • CBComUdtMemberGameInfoStagesに1個stage情報修正
  • CBComInsMemberGameInfoStagesに1個stage情報の追加
  • CBUdtMemberGameInfoStageとgameinfoとstageを修正(トゥレンジェクション)

Purchase

ゲーム内の購買(IAP)と関連された情報を保存するテーブル

MemberItemPurchaseID MemberID ItemID Quantity Price PGInfo ...
GUID aaa Itemテーブル参照値 10 1000 IAP決裁提供会社 ...
GUID aaa Itemテーブル参照値 1 5000 IAP決裁提供会社 ...
GUID aaa Itemテーブル参照値 5 10000 IAP決裁提供会社 ...
GUID bbb Itemテーブル参照値 20 20000 IAP決裁提供会社 ...
GUID bbb Itemテーブル参照値 30 1000 IAP決裁提供会社 ...
  • IAPで発生する購買処理を保存するテーブル
  • Purchaseは、購買=現金性の購入を意味して決裁が含まれた情報を保存します。
  • 一般のゲーム内の一般ItemがMemberのMemberItemに所有される場合と異なるようにIAPがいる場合のみここに保存します。
  • 購買 = itemの購買を意味し、itemはmemberitemに保存します。(仮想通貨も含め、memberitemにお金や現金性アイテムも保管)
  • 購買はすべてトゥレンジェクション処理が行われます。
  • CBAddMemberItemPurchaseとmemberitemにitemを追加して、gameinfoをアップデートして、purchaseを追加(トゥレンジェクション処理)
  • CBComSelMemberItemPurchaseに1つのpurchaseを照会
  • CBComUdtMemberItemPurchaseに1つのpurchaseを修正
  • CBComInsMemberItemPurchaseに1つのpurchaseを追加
  • CBUdtReturnItemと1つのpurchaseを撤回処理(自動化/管理者ページ処理)

Event

ゲーマーが参加可能なイベントを保存するテーブル

EventID Category ItemID ItemCount Title ...
GUID 出席補償1 Itemテーブル参照値 10 出席補償イベント1 ...
GUID 出席補償2 Itemテーブル参照値 1 出席補償イベント2 ...
GUID 期間限定イベント1 Itemテーブル参照値 5 期間限定イベント1 ...
GUID 特定デバイスの使用者向けイベント Itemテーブル参照値 30 GALAXY ケイタイの使用者対象のイベント ...
  • イベントは、管理者ページで追加され、基本durationで基本リスト処理
  • イベントは、ログイン後またはクライアント開発者がいつでも下APIを呼び出して表示可能
  • ゲーマーが参加できるイベントのみ表示されて、管理者ページで作ってるときdurationを利用して調節可能
  • Device、OS等の値を入れて、クライアント、ゲーム内で表示するかどうか決定可能
  • CBSelGameEventsに会員が参加可能なイベント照会
  • イベント追加修正は管理者ページで処理

EventMember

イベントに参加したMemberを記録するテーブル

GameEventMemberID EventID MemberID ...
GUID Eventテーブル参照値 aaa ...
GUID Eventテーブル参照値 aaa ...
GUID Eventテーブル参照値 aaa ...
GUID Eventテーブル参照値 bbb ...
  • 一度参加したイベントにまた参加できないようにイベントに参加した会員を記録するテーブル
  • CBUdtGameEventMemberToItemとMemberItemにイベントの品目を追加して、EventMemberイベントに参加を記録(トゥレンジェクション)

Coupon

クーポンリストを保存するテーブル

CouponID Category ItemID ItemCount Status ...
GUID 予約設置補償クーポン1 Itemテーブル参照値 10 現在の状態 ...
GUID コミュニティ公開提供クーポン Itemテーブル参照値 1 現在の状態 ...
GUID プリントクーポン Itemテーブル参照値 5 現在の状態 ...
GUID イベント代行業社配信クーポン Itemテーブル参照値 30 現在の状態 ...
  • クーポン情報を保存して、大量クーポンの保存も可能
  • 管理者ページにおいて、クーポンを生成、大量クーポンも生成可能(3月26日現在、クエリー使用)
  • カテゴリ情報を利用して"予約の申請者1千人クーポン"、"ゲームカフェクーポン100個"などで照会し、クーポン代理配信会社やマーケティング会社にexcelファイルで伝達可能
  • クーポン番号はGUIDで生成される
  • CBCOMSelCouponにクーポンが存在するかどうかチェック

CouponMember

クーポンを使用したMemberを記録するテーブル

CouponMemberID CouponID MemberID ...
GUID Couponテーブル参照値 aaa ...
GUID Couponテーブル参照値 aaa ...
GUID Couponテーブル参照値 aaa ...
GUID Couponテーブル参照値 bbb ...
  • クーポンを使用した会員を記録する目的のテーブル
  • CBUdtCouponMemberにmemberitemに追加、componmemberに追加して、クーポン使用不可処理(トゥレンジェクション)
  • CBUdtCouponMemberを活用してgameinfoにゲーマーのgameinfo属性をアップデートも可能(PostmanのCBUdtCouponMembe-GAMEINFO参照)

Gift

プレゼントをくれる人と受け取る人、渡すItemが記録される

GiftID ItemID ItemCount FromMemberID ToMemberID ...
GUID Itemテーブル参照値 10 aaa bbb ...
GUID Itemテーブル参照値 5 aaa ccc ...
GUID Itemテーブル参照値 1 bbb ddd ...
GUID Itemテーブル参照値 2 ccc aaa ...
  • CBSelGiftItemToMeでゲーマーにきたプレゼントを参照
  • CBUdtMoveGiftで私にきたプレゼント1個をmemberitemに移動(トゥレンジェクション)
  • CBUdtSendGiftにギフトボックスにプレゼントを送ったこと、私のmemberitemを削除(トゥレンジェクション)
  • CBComSelGiftDepositoryで1つのgitfを照会
  • CBComUdtGiftDepositoryで1つのgiftを修正

Rank(Leader Board)

ランキング(Rank-Leader board)処理

NickName Point Rank ...
ニックネームa 100 3 ...
ニックネームb 500 2 ...
ニックネームc 900 1 ...
  • Rankは DB がなく、メモリー 基盤 NoSQL DBの Redisに 保存(基本設定)
  • CloudBreadが初起動し、DBのnicknameとpointを読んでRedisに保存して全体対象SQL DBと同期化
  • 同期化した後、Rankの修正が必要したときAPIにrank追加・修正
  • CBRank-SetMemberPointにrank追加・修正
  • GetTopXRankerに top x rankerリストの照会
  • GetRangeRankerInfoで順位の範囲のmemberを照会
  • GetMemberRankByIDに使用者のランク順位を照会

認証(Authentication)

  • Facebook、google id、Microsoft id、twitter idなどの認証が基本可能であり、Kakao認証などを拡張可能です。
  • 認証をすればAPIの要請時、含まれるMemberIDは自動sidに置換される
  • DEMOの用途で https://cb2-auth-demo.azurewebsites.net/ サーバーでテスト可能
  • sidはサーバーで保存、照会に処理されてクライアントとしてsidが下りてこないこと(x-zumo-authトークンだけやり取り)
  • CloudBreadのすべてのAPIはsidが存在すれば、(サーバーに認証の構成が完了されれば)自動的にクライアントが送るMemberIDを無視してsidに置換させる
  • 開発段階ではmemberidを送って配布段階でsidを利用も可能
  • 認証(Authentication)はCloudBreadの暗号化(Encryption)とは別に、処理される
  • 安全なゲーム通信のためには必ず認証と暗号化構成を推奨する
  • CloudBreadサーバー(Azure Mobile App-モバイルアプリ)に認証サーバの構成案
  • Facebook : https://goo.gl/d0ZeQT
  • Google ID : https://goo.gl/4oyM4S
  • Microsoft Account : https://goo.gl/Wvn2fe
  • Twitter : https://goo.gl/ZdR4qa
  • Active Directory(認証):https://goo.gl/WD76Ch上リンクの認証提供者を通じて、認証をCloudBreadサーバー(Azure Mobile App-モバイルアプリ)に認証を構成
  • Unityで認証を利用する方法はUnity開発者ガイドデモ参照 - Unity コーディング Demo youtube
  • Postmanを利用して認証テストが必要な場合にはHTTP Headerの"x-zumo-auth"を認証が構成されたサイトで取得しなければなりません。
  • このため、Windows開発環境の場合**CloudBread-Dev-Authkey-Gen-win8.1プロジェクト**を利用可能であり、
  • マックブック開発環境の場合**CloudBread-Dev-Authkey-Gen-Androidプロジェクトを利用してAuthkeyを発給を受けてHTTP Headerの"x-zumo-auth"に入力して要請をテストできます。

暗号化(Encryption)

  • Crypt処理でweb.configの設定を利用してAES256暗号化処理可能
    <!-- Encryption configuration. 암호화 설정-->
    <add key="CloudBreadCryptSetting" value="AES256"></add>
    <add key="CloudBreadCryptKey" value="1234567890123456"></add>
    <add key="CloudBreadCryptIV" value="1234567890123456"></add>
  • クライアントで暗号化構成を遂行してCloudBread APIを呼び出し
  • 暗号化されて伝達されたテキストをCloudBreadが復号化してサーバーに保存
  • 暗号化設定時自動クライアントに暗号化された文字列response

**CloudBread-Encrypt-Text-Tool**で暗号化復号を開発時文字列テスト可能


Socket サーバ

  • ゲーマーとの間でリアルタイムの通信に利用
  • Socket.ioで開発
  • Android、iOSなど多様なSDKを支援(ユニティを含む)
  • グループ提供
  • クライアントは認証のため、CBSocketAuth APIをCloudBreadに要請
  • トークンはRedisキャッシュに保存される
  • クライアントはトークン情報をSocketサーバに送ったこと
  • SocketサーバがCloudBreadにtokenをValidateしてリアルタイムの通信開始
  • **CloudBread-Socket プロジェクト**と CloudBread-Socket-React プロジェクト参照

文書の終りです。

参考リンク: CloudBreadインストールガイド 文書

Clone this wiki locally