Unity SDK

Game Chat Unity SDKの使い方について説明します。

システム要件

Game Chat Unity SDKを使用するためのシステム要件は、以下のとおりです。

  • 最小スペック: 2018.4.0以上 (下位バージョンの Unityへの対応が必要な場合、cs@nbase.io までご連絡ください。)

  • 2019.4.X / 2020.3.X / 2021.1.Xバージョンの Unityエディタのユーザーは、2019.4.29f1以上 / 2020.3.15f2以上 / 2021.1.16f1以上のバージョンを使用します(AABバージョンビルド時の Unityエディタのバグが変更されたバージョン)

SDKのインストールと環境の構成

Game Chat Unity SDKをダウンロードして、Unityでプロジェクトを構成する方法は以下のとおりです。

  1. 設定 > SDKのダウンロードメニューを順にクリックし、Unity SDKのダウンロードをクリックします。

  2. Unityプログラムを実行し、プロジェクトを作成します。

  3. Unityで、Assets > Import Package > Custom Package...メニューを順にクリックします。

  4. ダッシュボードでダウンロードした「GameChatUnitySDK_xxxxxxxx」ファイルを読み込みます。

  5. パッケージにあるすべてのファイルを選択し、 [Import] ボタンをクリックします。

  6. プロジェクトを保存します。

認証

Game Chatインスタンスの初期化

Game Chatプロジェクト IDを用いて Game Chatインスタンスを初期化するには、以下のコードを使用します。

GameChat.initialize(PROJECT_ID);

// シンガポールリージョンを使用する場合
GameChat.setRegion("sg");
GameChat.initialize(PROJECT_ID);
IDtypedesc

PROJECT_ID

string

プロジェクト ID

Game Chatソケットサーバとの接続

Game Chatソケットサーバに接続する方法は以下のとおりです。

  1. チャットユーザー IDを用いてGame Chatソケットサーバにアクセスします。

    • Game Chatプロジェクトでチャットユーザー IDは固有の値です。

  2. APIを使用するためのトークンの値を取得します。

    • GameChat.connect以降に更新されたトークンの値を確認できます。

  3. トークンの値を取得した後、現在アクセス中のデバイスに対するチャットユーザー情報が更新されたのか確認します。

    • GameChat.connectのコールバックで渡される Memberは、更新されたデータです。

Game Chatソケットサーバに接続するには、以下のコードを使用します。

GameChat.connect(USER_ID,  (Member User, GameChatException Exception)=>
{

    if(Exception != null)
    {
        // エラー処理
        return;
    }
});
IDtypedesc

USER_ID

string

チャットユーザーの固有 ID

Game Chatサーバとの接続解除

Game Chatソケットサーバとの接続を解除するには、以下のコードを使用します。

GameChat.disconnect();

チャットユーザー情報のアップデート

connect成功後にチャットユーザー情報を保存してアップデートするには、以下のコードを使用します。

ハンドルネームの変更

GameChat.setNickname(USER_ID, NickName, (member, exception) =>
{
    if (exception != null)
    {
        // エラー処理
        return;
    }

});
IDtypedesc

USER_ID

string

チャットユーザーの固有 ID

NickName

string

チャットユーザーのハンドルネーム

Profile URLの変更

GameChat.setProfileUrl(USER_ID, ProfileUrl, (member, exception) =>
{
    if (exception != null)
    {
        // エラー処理
        return;
    }

});
IDtypedesc

USER_ID

string

チャットユーザーの固有 ID

ProfileUrl

string

チャットユーザーの ProfileURL

チャンネルの購読と購読解除

特定のチャンネルに対して購読または購読解除を行うには、以下のコードを使用します。

GameChat.subscribe(CHANNEL_ID);

GameChat.unsubscribe(CHANNEL_ID);
IDtypedesc

CHANNEL_ID

string

チャンネル ID

メッセージの送信

特定のチャンネルにメッセージを送信するには、以下のコードを使用します。

GameChat.sendMessage(CHANNEL_ID, MESSAGE);
IDtypedesc

CHANNEL_ID

string

チャンネル ID

MESSAGE

string

送信メッセージテキスト

MESSAGEパラメータに@[ユーザー ID]空白[メッセージ内容]を入力時

@user_idメッセージ本文

上記のケースでユーザー IDがログインした履歴がある場合、メッセージの詳細情報のうち、mentions情報はユーザー IDです。

イベントの登録と解除

Game Chatソケットサーバから受信するイベントに対し、カスタムハンドラを登録または解除するには、以下のコードを使用します。

GameChat.dispatcher.(EVENT_NAME) += (CALLBACK_FUNCTION);
public delegate void onConnectedCallback(string data);
public onConnectedCallback onConnected;
//「connect」Eventに対する、コールバック

public delegate void onDisconnectedCallback(string reason);
public onDisconnectedCallback onDisconnected;
//「disconnect」Eventに対する、コールバック

public delegate void onMessageReceivedCallback(Message message);
public onMessageReceivedCallback onMessageReceived;
//「message」Eventに対する、コールバック

public delegate void onUserAddedCallback(UserInfo userinfo);
public onUserAddedCallback onUserAdded;
//「userAdded」Eventに対する、コールバック

public delegate void onUserRemovedCallback(Message message);
public onUserRemovedCallback onUserRemoved;
//「userRemoved」Eventに対する、コールバック

public delegate void onErrorReceivedCallback(string result, GameChatException exception);
public onErrorReceivedCallback onErrorReceived;
//「error」Eventに対する、コールバック

例外事項

Game Chat APIの使用中に発生する Exceptionに対する共通処理 Classは、以下のとおりです。

public class GameChatException
{
    // Detail Error Code

    // 不明なエラー
    public static readonly int CODE_UNKNOWN_ERROR           = 0;
    // 初期化に失敗
    public static readonly int CODE_NOT_INITALIZE           = 1;
    // パラメータが正しくない場合
    public static readonly int CODE_INVAILD_PARAM           = 2;
    // ソケットサーバから発生したエラー
    public static readonly int CODE_SOCKET_SERVER_ERROR     = 500;
    //ソケットから発生したエラー
    public static readonly int CODE_SOCKET_ERROR = -501;
    // ネットワークコネクションエラーおよびタイムアウトが発生した場合
    public static readonly int CODE_SERVER_NETWORK_ERROR    = 4002;
    // サーバから取得したデータをパースする際のエラー
    public static readonly int CODE_SERVER_PARSING_ERROR    = 4003;

    // HTTPエラーの場合、当該ステータスコードがレスポンスコードとして伝達されます。 (400, 403 ...)

    // Error Code
    public int code { get; set; }
    // Error Message
    public string message { get; set; }
}

Client API

チャンネルの購読

Subscription Data Class (per Unit)

public class Subscription
{
    public string id;
    public string channel_id;
    public string user_id;
    public string created_at;
}
IDtypedesc

id

string

固有 ID

channel_id

string

チャンネル ID

user_id

string

チャットユーザーの固有 ID

created_at

string

作成日時

チャンネル購読リストを取得する

特定のチャンネルの購読データをリスト形式で取得するには、以下のコードを使用します。

GameChat.getSubscriptions(CHANNEL_ID, OFFSET, LIMIT, (List<Subscription> Subscriptions, GameChatException Exception) => {

    if(Exception != null)
    {
        // エラー処理
        return;
    }

    foreach(Subscription elem in Subscriptions)
    {
        //handling each subscription instance
    }
}));

チャンネル

Channel Data Class (per Unit)

public class Channel
{
    public string id;
    public string project_id;
    public string unique_id;
    public string name;
    public string user_id;
    public string created_at;
    public string updated_at;
}
IDtypedesc

id

string

チャンネル ID(固有)

project_id

string

プロジェクト ID

unique_id

string

開発会社で設定できるチャンネル ID(固有)

name

string

チャンネル名

user_id

string

(チャンネルを作成した)チャットユーザー ID

created_at

string

作成日時

updated_at

string

更新日

チャンネルリストを取得する

プロジェクトのチャンネルデータをリスト形式で取得するには、以下のコードを使用します。

GameChat.getChannels(OFFSET, LIMIT, (List<Channel> Channels, GameChatException Exception) => {

    if(Exception != null)
    {
        // エラー処理
        return;
    }

    foreach(Channel elem in Channels)
    {
        //handling each channelInfo instance
    }
});
IDtypedesc

OFFSET

int

全体チャンネルリストから取得するチャンネルの開始位置(index)

LIMIT

int

取得するチャンネル数

チャンネルデータを取得する

チャンネル IDや固有 IDを用いてチャンネルデータを取得するには、以下のコードを使用します。

//CHANNEL_IDでのみ検索する場合、CHANNEL_UNIQUE_IDパラメータに nullを入れます。

//CHANNEL_IDと CHANNEL_UNIQUE_IDの値が同時に存在する場合、CHANNEL_UNIQUE_IDの値を優先的に検索します。

GameChat.getChannel(CHANNEL_ID, CHANNEL_UNIQUE_ID,  (Channel Channel, GameChatException Exception) => {

    if(Exception != null)
    {
        // エラー処理
        return;
    }

    //handling channelInfo instance
});
GameChat.getChannel(CHANNEL_UNIQUE_ID, (Channel Channel, GameChatException Exception) => {

    if(Exception != null)
    {
        // エラー処理
        return;
    }

    //handling channelInfo instance
});
IDtypedesc

CHANNEL_ID

string

チャンネル ID(自動作成)

CHANNEL_UNIQUE_ID

string

チャンネル(固有)ID(カスタマイズ可能)

チャンネルの作成と削除

プロジェクト内で新しいチャンネルを作成または削除するには、Open APIを活用します。 セキュリティ問題のため、チャンネル作成やアップデートなどは、Open APIを活用して Server to Serverで直接行うことをお勧めします。 詳細は、Game Chat APIガイドをご参照ください。

メッセージ

(Received) Message Data Class (per Unit)

public class Message
{
    public class User
    {
        public string id;
        public string name;
        public string profile;
    }

    public string message_id;
    public string channel_id;
    public string message_type;
    public string content;

    public string[] mentions;
    public bool mentions_everyone;
    public User sender;
    public string created_at;
}
IDtypedesc

message_id

string

メッセージの固有 ID

channel_id

string

チャンネル ID

message_type

string

メッセージタイプ

content

string

メッセージの内容(JSON文字列)

mentions

string

メンション(タグ)

created_at

string

メッセージリストを取得する

特定のチャンネルに対するメッセージデータをリスト形式で取得するには、以下のコードを使用します。

GameChat.getMessages(CHANNEL_ID, OFFSET, LIMIT, SEARCH, QUERY, SORT, (List<Message> Messages, GameChatException Exception) => {

    if(Exception != null)
    {
        // エラー処理
        return;
    }

    foreach(Message elem in Messages)
    {
        //handling each message instance
    }
});
IDtypedesc

CHANNEL_ID

string

チャンネル ID

OFFSET

string

全体メッセージリストから取得するメッセージの開始位置

LIMIT

string

取得するメッセージ数

SEARCH

string

メッセージ検索基準キー。 <例> content.text 空の文字列を伝達する場合、全体検索

QUERY

string

メッセージ検索の値。 完全一致のみ検索可能。 空の文字列を伝達する場合、全体検索

SORT

string

メッセージのソート順序(デフォルト: 降順 - 最新順) (オプション: 昇順)

メッセージの翻訳

自動翻訳機能が有効化されている場合、任意のテキストを指定した言語に翻訳できます。 自動翻訳機能は、Papago Translationサービスと連携すると使用できます。

(Received) Translation Data Class (per Unit)

public class Translation
{
    public string detectLang = "";
    public string lang = "";
    public bool translated = false;
    public string message = "";
}
IDtypedesc

detectLang

string

ソース言語コード

lang

string

ターゲット言語コード

translated

bool

翻訳の成否

message

string

結果メッセージの内容(JSON文字列)

参考

ソース言語コードとターゲット言語コードについての説明は、Papago Text Translation APIガイドをご参照ください。

GameChat.translateMessage(CHANNEL_ID, SORCE_LANG, TARTGET_LANG, TEXT, (List<Translation> Translations, GameChatException Exception) => {

    if(Exception != null)
    {
        // エラー処理
        return;
    }

    foreach(Translation elem in Translations)
    {
        //handling each Translation instance
    }
});

GameChat.translateMessage(SORCE_LANG, TARTGET_LANG, TEXT, (List<Translation> Translations, GameChatException Exception) => {

    if(Exception != null)
    {
        // エラー処理
        return;
    }

    foreach(Translation elem in Translations)
    {
        //handling each Translation instance
    }
});
IDtypedesc

CHANNEL_ID

string

チャンネル ID

SORCE_LANG

string

(送信する)テキストの言語名(auto: 自動検出) API Guideを参考

TARTGET_LANG

string

(翻訳受信する)テキストの言語コード (","で区切って、複数入力可能。 <例> "en, fr, th") Papago Text Translation APIガイドを参考

TEXT

string

送信するテキスト

チャットユーザー

(Received) Member Data Class (per Unit)

public class Member
{
    public string id = "";
    public string project_id = "";
    public string nickname = "";
    public string profile_url = "";
    public string country = "";
    public string remoteip = "";
    public string adid = "";
    public string device = "";
    public string network = "";
    public string version = "";
    public string model = "";
    public string logined_at = "";
    public string created_at = "";
    public string updated_at = "";
}
IDtypedesc

id

string

チャットユーザーの固有 ID

project_id

string

ログインした Game Chatプロジェクト ID

nickname

string

チャットユーザーのハンドルネーム

profile_url

string

プロフィール画像 URL

country

string

アクセスした国

remoteip

string

アクセス IPアドレス

adid

string

広告識別子

device

string

アクセスデバイスの環境

network

string

アクセスネットワークのタイプ (セルラー、Wi-Fi)

version

string

アクセスアプリのバージョン

model

string

アクセスデバイスのモデル

logined_at

string

ログインした日

created_at

string

チャットユーザーの作成日時

updated_at

string

チャットユーザー情報の更新日

チャットユーザー情報のアップデート

チャットサーバのユーザー情報をアップデートできます。

// チャットユーザーのハンドルネームをアップデート
// ハンドルネームには、whitespace(spaces、tabs、line breaks)を除く2~128文字で入力できます。
GameChat.setName(MEMBER_ID, NAME, (Member member, GameChatException Exception) => {

    if(Exception != null)
    {
        // エラー処理
        return;
    }
    //handling updated Member instance
});

//チャットユーザーのプロフィール画像 URLをアップデート
GameChat.setProfileUrl(MEMBER_ID, PROFILE_URL, (Member member, GameChatException Exception) => {

    if(Exception != null)
    {
        // エラー処理
        return;
    }
    //handling updated Member instance
});
IDtypedesc

MEMBER_ID

string

チャットユーザーの固有 ID

NAME

string

チャットユーザーのハンドルネームまたは名前

PROFILE

string

プロフィール画像 URL

受信メッセージに含まれた絵文字とハイパーリンクテキストを扱いやすいようにサポートするヘルパークラスです。

  • TMP_GameChatTextUGUIは、Unityビルトインアセットの TextMeshProを拡張したクラスであるため、先に Package Managerを用いて TextMeshProをインストールする必要があります。

  • TextMeshProアセットの場合、Unity 2018.2以上のバージョンからビルトインアセットとして含まれます。

  • 絵文字スプライトシートの場合、絵文字バージョン13(Android)を基準に基本的に表示され、スプライトシートを変更してカスタマイズできます。

namespace GameChatUnity.Extension
{
    public class TMP_GameChatTextUGUI : TextMeshProUGUI
    {
        public bool isHyperLinked { get; set; }    // リンク形式アドレスをハイパーリンク処理するかどうか(HTMLタグを追加する)
        public string LinkTextColor { get; set; }  // hyperlink text color
    }
}

<例>

using GameChatUnity.Extension;

TMP_GameChatTextUGUI message = msgObject.GetComponent<TMP_GameChatTextUGUI>();

//ハイパーリンクの認識と処理のために、テキストは setMessageを通じて入れます。
message.setMessage(MESSAGE_CONTENT);
message.color = Color.green;
message.isHyperLinked = true;

...

msgObject = Instantiate(msgObject) as GameObject;

...

// ハイパーリンクに対するクリックイベントリスナーは、直接実装してください。

//Handling with TMP_LinkInfo
TMP_LinkInfo linkInfoArr = message.textInfo.linkInfo[LINK_INDEX];

...

Last updated