65.9K
CodeProject 正在变化。 阅读更多。
Home

从 Unity 3D 运行服务器扩展

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2014 年 2 月 25 日

CPOL

4分钟阅读

viewsIcon

14270

这项技术让您在 Unity 中拥有两全其美,一个专用的 SDK 加上任何 REST API 调用

Kii Cloud 的一个优点是它将其所有 API 公开为 REST Web 服务。这不仅对那些使用没有专用 SDK 的平台的 Kii Cloud 开发人员有用,而且还让开发人员有机会在 SDK 中正式发布新功能之前使用它们。

让我们看一个例子:使用 REST API 从 Unity 3D 调用服务器扩展。由于 Unity 3D 是 Kii 平台中最新的一个补充,它仍在赶上某些最新功能,例如服务器扩展。服务器扩展允许开发人员通过部署 javascript 代码来扩展 Kii Cloud 的功能,以创建新的自定义端点。因此,如果 API 默认不支持某些内容,您可以扩展它。

部署服务器扩展

首先,您需要在 developer.kii.com 上创建一个应用程序,按照以下步骤进行

  1. http://developer.kii.com创建帐户
  2. 按照步骤 1、2 和 3 中“注册应用程序”中的说明创建应用程序(忽略其他部分):http://documentation.kii.com/en/starts/unity/
  3. 记下分配给您的应用程序的 App Id、App Key、Client Id 和 Client Secret,如“注册应用程序”中的步骤 4 所述(忽略其他部分):http://documentation.kii.com/en/starts/unity/

现在是时候部署一个服务器扩展了。让我们创建一个简单的 echo 服务(它将把我们作为参数发送的消息发送回来)。创建一个名为 echo.js 的文件,内容如下

function echo(params, context) {
    return params.message;
}

注意:函数名“echo”将是端点名称(见下一节)

我们将使用 Kii 服务器工具来部署它(在此处查找带有云的图标 https://developer.kii.com/#/sdks)。从命令行切换到服务器工具目录,在添加您的应用程序的密钥后执行以下操作(假设您选择了美国作为您的应用程序的位置)

node bin/kii-servercode.js deploy-file --file echo.js --site us --app-id YOUR_APP_ID --app-key YOUR_APP_KEY --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET

完成!您的服务器扩展已准备好被调用。

调用服务器扩展

为了能够与 Kii 的 REST API 通信,我们需要能够发送带有适当标头、数据和端点信息的 POST HTTP 请求。为此,我们将使用原生 Unity 3D 类 WWW(因此不需要第三方 HTTP 类)和来自 一个额外类 的一点帮助来编码/解码 JSON。

WWW 将帮助我们使用 POST 向 Kii Cloud API 发送 HTTP 请求。此请求将需要以下数据

  • Kii App Id 和 App Key(您在 developer.kii.com 上创建应用程序时获得这些)
  • 您的自定义端点的名称(您创建的 JS 方法的名称),以便您调用正确的服务器扩展(您可以有多个方法执行不同的操作)
  • 您的 JSON 数据(如果您的服务器扩展使用参数作为输入)
  • (可选)Kii 用户身份验证令牌(一个令牌),如果您想作为经过身份验证的用户而不是匿名运行服务器扩展(您可以使用 Kii Cloud 登录用户后获得此令牌)

调用服务器扩展的代码大致如下所示(假设您已将您的应用程序配置为在 developer.kii.com 上托管在美国)

public static WWW RunServerExtension (string appId, string appKey, string endpoint, string kii_access_token, string msg)
{
	WWWForm form = new WWWForm();
	Hashtable headers = form.headers;
	headers["Content-Type"] = "application/json";
	headers["x-kii-appid"] = appId;
	headers["x-kii-appkey"] = appKey;
	if(kii_access_token != null)
		headers["Authorization"] = "Bearer " + kii_access_token;
	form.AddField("message", msg);
	Hashtable data = new Hashtable();
	data["message"] = msg;
	string json = JSON.JsonEncode(data);
	Debug.Log("Sending: " + json);
	byte[] bytes = Encoding.UTF8.GetBytes(json);
	return new WWW("https://api.kii.com/api/apps/" + appId + "/server-code/versions/current/" + endpoint, bytes, headers);
}

请注意,该方法采用您应用程序的 App Id 和您在之前的步骤中写下的 App Key。重要的是,您使用与在您的扩展中用作端点参数的相同方法名称(在本例中为“echo”)。

此调用不会阻塞游戏,因为我们在 Coroutine 中运行 WWW(执行被暂停,直到我们从服务器收到响应)。

如果您想尝试一下,您可以下载我们的演示项目 KiiUnityREST,并在使用 Kii Game Cloud 顶级编辑器菜单配置您的应用程序密钥后运行 Init 场景。

目前就这些了。这项技术让您可以在 Unity 中拥有两全其美,一个专用的 SDK 加上任何 REST API 调用!

在我的下一篇博文中,我将向您展示如何也通过 Kii REST API 从 Unity 发送推送通知。敬请期待!

Unity 3D 开发者? 注册我们的比赛并赢得 1 万美元的奖品!!

Kii Cloud 是一个全栈式移动后端,用于加速 iOS、Android、HTML5 和 Unity 应用程序开发。可选的广告网络集成可帮助您获利。从 developer.kii.com 免费开始

© . All rights reserved.