引言

deltaDNA Unity SDK允许你基于Unity开发的游戏发送游戏中的事件信息和玩家行为到deltaDNA来查看、分析和个性化游戏设置。

事件被以JSON对象发送到deltaDNA平台,这些事件被使用在线的显示面板来管理和跟踪。

当你的游戏触发事件以后,这个SDK将在本地存储它们并在网络连接可用时定期上传或者在你选择的时间上传。这允许SDK收集数据而不考虑网络连通性,并让你可以控制上传的时间和频率。

事件的复杂度有所不同,但是都来自同一个事件格式。这个文档和附加的演示应用将提供不断增加复杂性的事件案例。

这个SDK的源码采用C#编写,用Unity资源包的形式提供,并且没有任何外部的依赖。游戏使用Unity SDK从一系列的Unity目标平台包括XBox One、PS4、Web GL、iOS和Android等成功发送数据到deltaDNA。但是应当被指出deltaDNA当前不是XBox和索尼的技术合作伙伴,因此可能会有一些支持问题,我们无法复制或者调试独立的客户产品。

下载deltaDNA Unity SDK 4.0.0版本:


重要的改变:之前版本的SDK和发行的文档在发行说明页面可用,第4版之前的在我们GitHub页面的变更日志中。

  • 4.0.0版本是这个SDK的一个重要更新,如果你从一个早期版本的SDK更新,有若干改变需要被重构。例如:
    • 这个SDK的Start方法将不再要求userID作为一个输入参数。这个覆盖版本只需要3个输入参数。
    • EventBuilder助手(Helper)已经被一个新的GameEvent助手取代。
    • RecordEvent方法已经被更新以支持新的GameEvent对象。
    • ProductBuilder助手已经被重构为Product,并且其AddRealCurrency方法已经被重命名为SetRealCurrency。
    • 一个新的Engagement助手已经被添加,RequestEngagement和RequestImageMessage方法已经被更新以利于使用。
    • 代码和组件现在保存在GitHub。
    • 如果你在使用智能广告,请确保你在你的Unity玩家设置(Unity Player Settings)中设置“目标最低iOS版本(Target minimum iOS Version)”为最低7.0版。

初始化SDK

这个SDK应当被以一个包导入到你的Unity项目并初始化如下参数:

初始化参数

  • environmentKey 这是一个分配给你的应用的唯一的32位字符型字符串。你将被为你的游戏开发和产品分配相互独立的应用键值。
  • collectURL 这是收集你的事件的服务器地址。
  • engageURL 这是提供实时A/B测试(real-time A/B Testing)和命中目标(Targetting)的服务器地址。这只在你的游戏使用这些功能时被要求。
  • userID 每个用户需要有一个唯一的userID(用户ID)。如果你的游戏可以提供一个唯一的userID,你可以使用它。此外,如果没有userID被提供,这个平台将生成一个唯一的用户ID,并可以在所有的后续事件中使用它。如果你启用这个SDK时没有指定一个userID,这个SDK将自动生成一个唯一的userID,并在后续的进程中持续使用,直到你在Start方法中提供你自己的userID。

这些参数可以从你的游戏详情页面找到。请注意,你的开发(DEV)实际(LIVE)环境有不同的environmentKey参数。当你从开发和测试环境迁移到产品时,你将需要改变这个初始化SDK时的环境键值。在游戏详情页面还有一个自动生成的代码片段,可以简单的复制和粘贴来使用其整合这个SDK。

118

初始化代码

这是初始化这个Unity SDK和开始发送事件所需的最少代码。SDK第一次运行时其将自动发送newPlayer事件,并且游戏每次运行时自动发送gameStartedclientDevice事件。继续阅读以找到如何实现除了记录少数自动事件,并开始解锁deltaDNA其他事件、参数、自己的自定义事件、A/B测试和有针对性活动的强大功能。

事件剖析

所有的事件都以一个共同基础架构的JSON文件记录下来。这个文件对每个事件类型各不相同,但是所有的这些事件文件都遵循如下的最小架构:

Unity SDK将为你发送的每一个事件自动生成userIDsessionIDeventTimestampplatformsdkVersion参数。当你添加参数到每一个事件时,其将被放置于eventParams对象中。

在你的JSON事件中参数的顺序并不重要。

你可以在事件管理器(Event Manager)检查每个事件要求的参数,还有类型以及任何格式或者枚举规则。(在deltaDNA平台的SETUP->Manage)。

参数可以是可选的(Optional)或者必需的(Required)。如果你没有为其设置一个有效值,所有可选参数不必须要被包含在你的事件中。最好是将其完全排除,而不是将其的值设置为零或空。

基本的事件结构为记录不同层次复杂性的事件提供了非常强的灵活性,从像上面那个例子一样的非常简单的事件到包含嵌套数组的复杂事件。下面的代码案例将展示从简单到复杂的各种事件。

请注意所有的事件都需要确认,如果他们与事件管理器(Event Manager)中的架构不同,其将被拒绝。

设置

从你的游戏详情页面复制上面展示的简单初始化代码是开始从你的玩家收集分析数据要求的最少代码。你将很快开始添加更多的事件和调整你的实现。确保进一步查看这个页面的下面部分,关于完整的设置、方法和帮助列表。同时,这里还有两个添加的有用设置的相同初始化代码。


这两个额外的设置将:

  1. 告诉这个SDK来输出关于调试你的收集和与deltaDNA通信事件的详细信息。这在用于开发中和QA相互验证的协作时非常有用,其将帮助你解决一切由你的任何事件引起的验证失败问题。
  2. 设置你的游戏客户端版本(clientVersion)。这被建议使用,并且可以对确认不同玩家之间在你的游戏不同版本中的动作区别非常有用。特别是当一个客户端更新是可选,但许多移动用户不去更新时。你可能甚至在运行这个简单初始化代码时,发现一个关于客户端版本没有被设置的警告。设置ClientVersion将解决这个问题。
还有许多其他的有用设置将在后续被介绍。这将帮助你实现推送通知信息、设备ID、事件哈希值、自动事件收集和自动通信。请确保查看了这些内容。

案例1——一个简单事件。

我们已经看到的初始化代码将自动发送newPlayerclientDevicegameStarted事件到deltaDNA。下面的代码中我们将添加一个我们自己的事件到代码。

当我们添加我们的游戏到deltaDNA时,7个事件将自动添加。这些事件对于所有的游戏往往是标准事件,被用于驱动显示界面的很多内容。现在我们将只使用其中的一个标准事件。

如下的JSON事件将被上传

案例2——添加一个新的模板事件

前一个案例使用了我们7个标准事件中的一个。这次我们将做一些更进一步的工作。我们将添加一个自定义参数到一个事件,然后从我们的代码中触发这个事件。这个例子将只展示以初始化创建事件,上传已经在前一个案例展示了。

如果missionStarted事件还没有在你的事件列表,通过从事件模板列表选择其将其添加,然后添加一个新的字符串类型的missionDifficulty参数到事件参数(eventParams)部分。

触发missonStarted事件的代码。

如下的JSON事件将被上传

粘贴事件JSON到事件菜单的相互验证可以帮助解决错误,我们的missionStarted事件通过了首次验证。

119

案例3——一个复杂事件

前面的案例非常简单,并没有太多需要解释的。但是,下面的案例更复杂一些,因为其介绍嵌套、矩阵和一些玩家购买、交易、赢得、与游戏或其他玩家交换货币和装备时可能会遇到的特别对象。好消息是其结构非常的标准,下面的事件可以足够的复杂。

我们将触发一个记录玩家使用一些真实货币购买一个包括一些虚拟货币和装备的宝箱的交易(transaction)事件。我们还将利用deltaDNA与Apple商店的收入确认功能来检查交易是否有效。

正如你看到的交易(transaction)事件的结构有一些复杂。其包括一些用来记录productsSpentproductsReceived产品(Product)对象。

我们的JSON事件将看起来像

下面的代码被要求使用Transaction助手类创建。

 

或者你可以使用一个游戏事件(GameEvent)助手。

请注意在这里ProductAddItemAddVirtualCurrencySetRealCurrency助手都在运行。

还要值得注意的是货币币值总是被以整数为最小货币单位,并且realCurrencyType是一个基于ISO-4217标准的三位货币代码。

上面的代码片段是4.99美元

这个事件可以被设计的更复杂,但结构是合乎逻辑的、灵活的,并为玩家消费或者接收任何货币和装备的组合提供一种机制。

交易确认

这个平台可以承担在各个商店的交易收据确认功能,以确保所有显示在你的显示界面的收入都是真实的收入而没有被屏蔽或者丢失的游戏数据。

如果你想要使用交易确认你将需要添加一些细节到“编辑游戏详情(Edit Game Details)”页面。这个页面可以从欢迎页面左侧的“管理游戏(Manage Games)”链接进入。
例如,对于Apple你将要设置你的9位Apple StoreID. 971883677和到Apple收据确认服务的链接https://buy.itunes.apple.com/verifyReceipt

你还要和每个交易事件一起发送额外的参数来告诉deltaDNA这个交易应该被确认。

例如,确认一个Apple商店的IAP

transactionReceipt是一个从Apple返回的基本64位收据数据。请查阅Apple开发者网站以了解关于Apple收据确认功能的详细信息

确认Google Play IAP需发送transactionServertransactionReceipt是购买数据,transactionReceiptSignature是‘应用数据签名’

注意:transactionReceiptSignature是由交易收据和一个私有的键值产生的来确认收据,其需要一定是字符串,因为其由Google提供并以字符串形式传递,而非一个嵌套的JSON对象。

这时deltaDNA将确认你的收入,并添加一个额外的revenueValidated参数到你的交易事件,其包括如下潜在的值。

  • 0 – 不进行确认
  • 1 – 收入通过确认检查
  • 2 – 收入未通过确认检查
  • 3 – 收入尝试确认,但结果未知(确认服务可能不可用)

带有状态码2或3的交易确认失败,将被排除在你的收入计算图表和用户指标之外。

在线视频页面有一个关于收入确认的更多细节的在线视频和附属的演讲幻灯片

案例4——吸引(Engage)

游戏可以从吸引(Engage)取回时间敏感信息来决定基于游戏内的活动或者A/B测试的结果,是否应当在一个特定的时间对用户产生一个特别的行为。即你的游戏应当在一个游戏中预定的决策点发送吸引(Engage)请求,响应将允许你立刻个性化的制定对玩家的游戏行为。

下面的案例展示了你可以如何使用吸引(Engage)来实现改变一个IAP对玩家做出的行动:

  1. 在deltaDNA平台创建一个针对性的活动
  2. 发出一个吸引(Engage)请求
  3. 对回调中接收的回应做出反应。
发出吸引(Engage)请求的代码看起来像
这将创建一个包括如下JSON文件的吸引(Engage)请求,并将其发送到吸引(Engage)。
你将在200毫秒内以JSON响应的形式接收一个响应。然而,你的游戏应当被设计为这样的形式,如果玩家使用高速网络连接时其不会产生延迟。

吸引(Engage)响应包括一个transactionID和一个包含一些关于玩家在这个时间点参数的参数对象。

如果这个设备在发送吸引(Engage)请求时没有网络连接,那么上次成果发送吸引(Engage)请求时在同一个决策点的缓存响应将被用于执行这次响应。isCachedResponse参数将会用来指明这是一个缓存响应。

你可能收到一个响应包括transactionID但是没有包含个性化值的参数。这表明玩家未能成功达到任何资质标准或者被分配到一个控制组。

如果服务器有一个错误的处理你的吸引(Engage)请求,你的响应将包括一个statusCode参数含有相关的状态码。

  • 400 – 输入格式畸形或者其他形式的不正确,或者你发送的实时参数没有被添加到你的游戏参数列表。
  • 403 – 保密的哈希键值不正确或者吸引(Engage)在你的账号没有被启用。
    请检查你已经启用了“按需定制版(On-Demand)”包在你的游戏(Game)->包(Packages)页面,要做这个操作你可能需要在你的deltaDNA账号获得账号所有者权限。
  • 404 – 不正确的链接或者未知的环境键值

图片消息

吸引(Engage)活动可以实时传送弹出消息到你的游戏。可重复使用的图片消息在行为管理器(Action Manager)中创建(Engage->Actions)并在活动管理器(Campaign Manager)中分配(Engage->Campaigns)。Unity SDK有一个弹出类在你的游戏上一层绘制图片消息。弹出是一个事件驱动,因此你可以控制何时这个图片从我们的服务器下载和何时呈现给玩家。

每个消息由两部分组成,一个智能画面(sprite map)包括背景图片和一些按钮,以及描述如何显示这些部分的布局规划图。这个布局图用来强制约束如何按比例放置弹出的位置。这意味着我们不需要担心屏幕的尺寸,但是我们也可以保护屏幕的一部分不要被覆盖。图片可以在符合这些约束的前提下画的尽可能大,同时仍保持原始的长宽比。

图片消息的吸引(Engage)请求和其他的吸引(Engage)活动请求是相同的。

响应信息包括弹出的图片和布局信息,还有分配给这个图片的行为信息。

  • url是这个智能画面(sprite map)图片文件的位置。widthheight是图片的尺寸,format是这个图片的格式。
  • spritemap对象描述了图片资源在智能画面(sprite map)的位置。buttons是可选的,基于在消息中按钮的数量。
  • layout对象描述了背景如何在屏幕上显示。其包括landscape和/或portrait键值取决于倾向的布局。如果只有一个键值被设置那么这个规则被应用而无关于屏幕方向。布局方向包括背景和按钮位置的规则。对于背景有两个模式可选:
    cover是成比例的背景图片所以其可以尽可能的大,
    contain是使图片尽可能的大但满足所有的约束条件。
  • 每个背景和按钮对象都可以有一个行为。这个行为的type(类型)可以是nonedismisslink或者action
    如果类型是link或者action,一个value(值)字段将提供一个字符串值来传回到和这个按钮连接的回调。如果是一个link,这时SDK将自动打开浏览器。

  • shim字段描述了在这个消息后面屏幕的其他部分如何被操作。mask可以是
    none,这种情况下没有东西被添加,因此在弹出后面的任何按钮都仍然可以被点击;
    clear,将是背景按钮被禁止点击的效果;
    dimmed,使屏幕变灰。这个shim还支持这样的行为,点击它也可以dismiss(关闭)这个弹出窗口。


查看我们的GitHub页面,以了解如何实现图片吸引(Image Engagement)和设置随图片返回的可选参数。

智能广告

Unity SDK能够让你在你的Android或iOS应用中使用广告,通过最有价值的广告网络获取广告以在某种程度上优化广告收入。

查看下面的在线视频以了解关于智能广告的介绍

智能广告在线视频

关于如何使用智能广告的更多详细信息请查看我们的GitHub页面

对于iOS使用智能广告的Unity云构建。

由于我们的智能广告SDK使用Cocoapods来为iOS管理其依赖,所以机器构建需要安装Cocoapods。遗憾的是Unity的构建服务器没有安装Cocoapods,所以无法使用Unity云构建方案来为iOS构建智能广告。当Unity支持Cocoapods时,这个问题将被解决。你可以在下面的Unity页面为这个功能投票:https://feedback.unity3d.com/suggestions/cocoapod-support-dependency-management

Android推送通知

deltaDNA SDK可以为玩家的设备请求一个Android注册ID,并使用notificationServices事件将其传送到deltaDNA。你可能需要在事件管理器(Event Manager)添加这个事件到你的游戏。这可以被deltaDNA用来发送针对性推送通知信息到玩家的设备。

在告诉SDK注册玩家来推送通知信息之前,你需要做两件事情:

  1. 从你的Google开发者控制器(Google Developers Console)中获得你的项目编号(Project number)
    productNumber
  2. 将Google云消息库(Google Cloud Messaging Library)从你的Android SDK复制到你的Unity项目的Assets/Plugins/Android/文件夹
    copy-googleplayservices

这时,你可以添加下面一行代码到你的项目中来注册设备实现推送通知信息。

DDNA.Instance.AndroidNotifications.RegisterForPushNotifications("<Your Project Number>");

这将为这个设备检索Android注册ID,如果成功则在下一个notificationServices事件的AndroidRegistrationID参数中将其发送到deltaDNA。

在你可以发送和显示Android推送通知之前还有一些事情你将需要做,如果你已经使用了Google云消息那么你可能已经做了这些。

  1. 要显示或者重新执行推送通知信息,你将还需要写一个服务来处理你游戏中的通知。
  2. 你将还需要在Google控制器为你的游戏启用Google云消息,并创建一个API Key(API键值)。你应当通过如下菜单路径将这个键值插入到deltaDNA平台:
    SETUP(设置)->TOOLS(工具)-NOTIFICATIONS(通知)->Manage Identity Page(管理ID页面)
    apikey
    在我们的Google云消息指导可以了解更多关于设置GCM的信息。

Apple推送通知

deltaDNA Unity SDK可以存储Apple推送通知的Token并将其发送到deltaDNA,运行deltaDNA平台发送针对性的推送通知信息给玩家。你的应用将负责从Apple请求推送通知。

要从Apple请求一个推送通知的Token:

Token将在notificationServices事件中发送到deltaDNA。你可能需要使用事件管理器添加notificationServices事件到你的游戏。

你还需要上传你的iOS证书给deltaDNA平台,以让Apple接受从deltaDNA发送的推送通知请求。你可以在SETUP(设置)->TOOLS(工具)-NOTIFICATIONS(通知)->Manage Identity Page(管理ID页面)做这些。你的来自Apple的证书将需要包括你的存成一个.p12文件的证书和密钥。CertificateIcon

关于如何为你的应用准备接收推送通知信息(Push Notification Messages)、创建一个证书和用正确的格式保存证书的更多信息,请查看我们的Apple证书指导

Apple ID

Apple广告ID和VendorID——deltaDNA从Unity SDK v3.0.6起不再自动检索Apple广告ID和VendorID

如果你想在deltaDNA记录这些参数,你将负责从设备检索他们并在一些你想要将它们添加到的事件中以自定义参数时将其发送。你还将需要在事件管理工具中添加这些自定义参数。

注意:从2014年2月起Apple拒绝应用在不显示广告的情况下收集广告ID参数。

事件时间戳

Unity SDK将自动使用客户端设备的时间为事件标记时间戳。当设备设置不正确的时间或日期时这会引起不准确,甚至如果时间差的过远会导致事件被拒绝。然而,如果你能够提供你自己的用于时间戳事件的时间戳方法,本地时间戳行为可以被覆盖。

还可以在设备完全禁用时间戳并发送不带有时间戳的事件。这将导致事件在被接收时被标记为收集数据的服务器时间。我们不推荐这种方式,因为其可能会有一些不良的影响。

  • Unity SDK在本地存储玩家事件来确保其在设备失去连接时不会丢失。因此事件可能在发生之后若干天才被接收。
  • 事件被分为多个事件分批上传,要比一次将其全部发送更有效率。如果你要使用收集服务器的时间戳,这将导致其看起来玩家的事件行为在发疯似的暴涨。事件将看起来是全部发生在几毫秒内,然后没有事件发生直至下一批次被上传。

如果你必须使用收集服务器的时间戳,你可以通过设置 DDNA.Instance.UseCollectTimestamp(true);实现。

附录1——类参考

DDNA.Instance(deltaDNA实例)

using DeltaDNA;

这个SDK类包含如下的公有方法和属性。

方法

StartSDK(启用SDK)

void StartSDK(string environmentKey, string collectServerURL, string engageServerURL, string userID)

void StartSDK(string environmentKey, string collectServerURL, string engageServerURL)

初始化和启用这个SDK。如果userID被提供,deltaDNA将为玩家创建一个唯一的userID。

StopSDK(停止SDK)

void StopSDK()

发送一个gameEnded事件,并停止事件在后台上传。

NewSession(新建会话)

void NewSession()

为当前用户改变sessionID。如果你的APP很长时间以后从后台重新使用时会非常有用。

RecordEvent(记录事件)

void RecordEvent(string eventName)

void RecordEvent(string eventName, Dictionary<string, object> eventParams)

void RecordEvent(GameEvent gameEvent)

记录一个事件,并将其存储到事件缓存中。

Upload(上传)

void Upload();

启用一个Unity协同程序来上传事件。这可以在任何点被调用,并将只在事件等待发送且我们还没有对其进行发送时开始上传。这倾向于从菜单屏幕、奖励屏幕和其他的游戏低强度运行时调用。然而,和服务器之间的通信使用其自己的线程,因此在正常运行模式下其不会引起对游戏性能的明显影响。

请注意,这个SDK将默认每隔一段时间自动上传事件。如果你想要控制SDK何时发送数据到deltaDNA,你应当通过设置 DDNA.Instance.Settings.BackgroundEventUpload = false;禁用自动上传并自己调用 Upload()方法。

RequestEngagement(请求吸引)

void RequestEngagement(Engagement engagement, Action<Dictionary<string, object>> callback)开启一个Unity协同程序来创建一个对吸引(Engage)的请求。和服务器的通信采用其自己的线程。你应当创建你自己的回调来根据从吸引(Engage)的响应做出反应。

RequestImageMessage(请求图片消息)

void RequestImageMessage(Engagement engagement, IPopup popup)

void RequestImageMessage(Engagement engagement, IPopup popup, Action<Dictionary<string, object>> callback)

请求一个基于图片的带有默认或者用户自定义弹出行为的吸引(Engagement)。一个可选的回调可以被提供,这也将接收服务器的响应,并在执行弹出的同时被调用。

RecordPushNotification(记录推送通知)

void RecordPushNotification(Dictionary<string, object> payload)

记录游戏接收的推送通知。在调用StartSDK(启用SDK)之前调用这个方法是安全的,“notificationOpened(通知已打开)”事件将同时被发送。

ClearPersistantData(清除存留数据)

void ClearPersistentData();

清除包括userID的所有存储的数据。在开发过程中如果你想要清楚所有存储的设置时非常有用。

SetTimestampFunc(设置时间戳函数)

SetTimestampFunc();

允许你为本地设备的时间戳事件提供你自己的eventTimestamping(事件时间戳)函数。

例如:

UseCollectTimestamp(使用收集时间戳)

UseCollectTimestamp(bool);为了当事件接收时在收集服务器设置事件时间戳而禁用本地事件时间戳。其默认设置为false。只有当你了解潜在的结果时使用它。

SetLoggingLevel(设置日志级别)

void SetLoggingLevel();
设置调试日志的级别,默认级别是警告。
  • DeltaDNA.Logger.Level.DEBUG
  • DeltaDNA.Logger.Level.INFO
  • DeltaDNA.Logger.Level.WARNING
  • DeltaDNA.Logger.Level.ERROR

属性

AndroidRegistrationID(Android注册ID)

(string) AndroidRegistrationID 

Android注册ID是当运行在Android平台时与设备进行联系。其必须在调用 Init()前被设置。

ClientVersion(客户端版本)

(string) ClientVersion

一个你的游戏的版本字符串将被报告给我们。这必须在调用 Init()前被设置。

CollectURL(收集链接)

(string)CollectServerURL

得到SDK初始化时的收集服务器链接。

EngageURL(吸引链接)

(string)EngageServerURL()

获得SDK初始化时的吸引(Engage)服务器链接。

EnvironmentKey(环境键值)

(string)EnvironmentKey

获得SDK初始化时的环境键值。

HashSecret(哈希密码)

(string)HashSecret

要为你的事件和吸引(Engage)数据启用哈希需要为你的唯一哈希密码设置这个值。你还必须在deltaDNA为这个环境启用哈希。
禁用哈希,需将其设置为Null,这也是默认设置。
这必须在调用 Init()前被设置。

HasStarted(已经开启)

(bool)HasStarted

获得一个指示这个实例是否已经初始化的值。

IsUploading(正在上传)

(bool)IsUploading

获得一个指示事件上传是否正在进行的值。

Platform(平台)

(string)Platform

获得这个平台。

PushNotificationToken(推送通知Token)

(string)PushNotificationToken

这个来自Apple的推送通知Token当运行在iOS平台时与设备联系。这必须在调用 StartSDK()前被设置。

SessionID(会话ID)

(string)SessionID 

以字符串形式获得这个会话ID。每次初始化时SDK生成一个新的会话ID。

Settings(设置)

(Settings)Settings
控制SDK的默认行为。在初始化前设置。
UserID(用户ID)

(string)UserID; 

获得这个用户ID

GameEvent(游戏事件)

方法

GameEvent对象帮助你创建事件并为其添加参数

GameEvent(游戏事件)

GameEvent(string eventName)

GameEvent构造器。

AddParam(添加参数)

AddParam(string key, object value)

添加参数到你的GameEvent 对象中。

例如:

AsDictionary(作为字典)

Dictionary<string, object> AsDictionary()

以字典形式返回GameEvent对象。

Product(产品)

Product(产品)对象帮助你创建通常用在事件中的关于玩家接收或者消费装备、真实货币或者虚拟货币的产品结构。

方法

ProductBuilder(创建产品)

Product()

产品构造器。

SetRealCurrency(设置真实货币)

Product SetRealCurrency(string currencyType, int currencyAmount)

添加RealCurrency(真实货币)对象到这个产品。

  • 真实货币类型应该是ISO-4217标准的三位货币代码。
  • 货币数值应当用整数表示最小货币数值。例如美元的$4.99表示为 .AddRealCurrency("USD", 499) 

AddVirtualCurrency(添加虚拟货币)

Product AddVirtualCurrency(string currencyName, string currencyType, int currencyAmount)

添加虚拟货币对象到这个产品。

  • currencyName(货币名称)应当与你的游戏中的货币名称相对应,例如“GEMS”、“GOLD”、“DIAMONDS”等。
  • currencyType(货币类型)应当是PREMIUM、GRIND或PREMIUM_GRIND
  • currencyAmount(货币金额)应当表示用整数表示最小货币数值。

AddItem(添加装备)

ProductBuilder AddItem(string itemName, string itemType, int itemAmount)

添加装备对象到产品中

  • 装备的名称应当与游戏中这些装备的名称相对应,例如“第一时代的绝世好剑”
  • 装备类型应当描述在游戏中装备属于的分类或者仓库,例如“武器”、“装饰”、“宠物”等。
  • 装备数量应当被记录为整数。

产品举例:

Params(参数)

Params对象被用来帮助你创建添加到GameEvents(游戏事件)的参数对象

方法

Params(参数)

Params()

Params(参数)对象构造器

AddParam(添加参数)

Params AddParam(string key, object value)

添加参数到你的Params对象。

GetParam(得到参数)

object GetParam(string key)

为给定的参数键值返回参数对象。

AsDictionary(作为字典)

Dictionary<string, object> AsDictionary()

作为字典返回一个Params对象。

附录2——配置选项

这个SDK独自即可配置以最好的满足你的游戏需求,并提供一个直截了当的机制来配置各种选项。

由于这个SDK实例在StartSDK调用使用前被独自创建,设置应当在StartSDK()被调用前被做。

配置设置被通过更新DDNA.Instance.Settings对象中的属性简单实现。可用的配置选项详细介绍如下:

bool OnFirstRunSendNewPlayerEvent 
默认为真。这个SDK将在其第一次初始化时发送一个新玩家(newPlayer)事件到deltaDNA。
如果你想要在newPlayer事件中添加额外的细节给这个参数而不是让SDK自动运行,你将可能更想改变它。例如性别、位置、年龄、获取途径等等。
bool OnInitSendClientDeviceEvent
默认为真。这个SDK将尽其可能自动生成clientDevice(客户端设备),并在每次游戏会话开始时发送。
bool OnInitSendGameStartedEvent
默认为真。这个SDK将在每次游戏会话开始时自动发送一个gameStarted(游戏开始)事件。
注意:clientVersion(客户端版本)、pushNotificationToken(推送通知Token)和androidRegistration(Android注册)参数将被和gameStarted(游戏开始)事件一起发送。如果你想在deltaDNA中使用它们,请记得设置。
bool DebugMode
默认为假。当设置为真是选择到调试状态,为假时关闭。
请注意重要的错误(例如连接错误)将被记录在调试控制器中,而不顾这个设置。
float HttpRequestRetryDelaySeconds
默认为2。SDK将在一次失败的上传尝试后等待设置的这个秒数再重新尝试。
int HttpRequestMaxRetries
默认为5。SDK每次上传时尝试的最大次数。
int HttpRequestCollectTimeoutSeconds
控制上传事件到收集(Collect)时默认的超时。
int HttpRequestEngageTimeoutSeconds
控制吸引(Engage)请求的默认超时。
bool BackgroundEventUpload 
默认为真。启用或禁用自动事件上传。如果你想要控制时间何时上传而不是按照SDK的安排定期上传,则将其关闭。
int BackgroundEventUploadStartDelaySeconds 
默认为零。在初始化以后,尝试上传事件前的等待秒数。
int BackgroundEventUploadRepeatRateSeconds
默认为60。当启用自动后台事件上传时两次上传之间等待的秒数。
bool UseEventStore
控制这个事件存储是否应当被使用。默认为真除非UNITY_WEBPLAYER或UNITY_WEBGL被定义。如果你针对的设备没有本地存储,那么这个属性应该被使用。

案例

开启调试模式并关闭自动上传事件,因此我们可以自己控制何时游戏进行上传。