自管理虚拟货币

自管理虚拟货币当您使用您自己的服务器管理货币时使用。这种方式可以让您更好的管理您的用户的货币,同时也意味着您要负责存储和分发用户的货币。getCurrencyBalance, awardCurrency, 和 spendCurrency接口只在Tapjoy管理货币可用。Tapjoy并不提供自管理虚拟货币任何客户端或者App端的通知,当我们给您的服务器回调时,您要负责通知app和用户。您必须为自管理虚拟货币设置回调服务器。

注意: Tapjoy会以最快的速度奖励用户,但是我们不能保证每次奖励都是实时的,因为有很多因素都会影响到奖励的花费时间。我们推荐您定期在某些地方检查用户余额,比如应用启动,应用重新激活,升级时,视频关闭时,打开应用商店之前等。我们建议您可以通知客户完成广告需要一定的时间。

注意: 即使自管理虚拟货币,每一个平台都必须定义虚拟货币。

1. 回调URL

当用户完成广告并获得奖励时,我们会发一个an HTTP GET request到如下URL。参数的格式如下

<callback_url>?snuid=<user_id>&currency=<currency>&mac_address=<mac_address>

//Example

http://www.sampledoman.com/payments/offers/tapjoy?&amp;snuid=42&amp;currency=50&amp;mac\_address=00-16-41-34-2C-A6

默认的回调参数包括snuid, currency(给用户奖励数目)和用户的wifi mac_address (如果可用).

服务器响应

Tapjoy服务器期望从您的服务器得到200或者403响应。

您的服务器只有在如下情况下给200响应:

  • 用户正确得到了奖励。

您的服务器在如下情况下给403响应:

  • verifier参数和计算值不一致
  • snuid参数在您的系统中不存在
  • 其他不可用重试的错误

如果收到了200和403之外的响应,Tapjoy会重试。(注意如果回复非200响应,请不要奖励客户,因为Tapjoy会重试回调,这样的话有可能会导致重复奖励。) 我们会在4天之内每两分钟尝试一次。如果5秒之内没有收到任何响应,我们会任何回调失败。

注意:响应的主体需要是UTF-8。如果不是UTF-8,即使响应200,我们还是会重试。

防作弊可选参数

您可以通过控制面板 > 变现 > 虚拟货币 > 创建/编辑来得到您虚拟货币的安全密钥。这个密钥不同于应用的SDK密钥。使用在回调中使用虚拟货币密钥:

如果在虚拟货币中设置了secret key,我们将会在回调中添加如下参数:I

  • id – 具体一次奖励的唯一id (注意这不是currency_id,代表的 request_id)
  • verifier – 使用 id, snuid, currency 和密钥得到的MD5值 (参考Verifier说明)

常见作弊场景

  • 如果您看到在回调URL中id被重用或者verifier不正确,可以考虑为作弊。
  • 如果您的user id值只包含数据,我们建议您执行简单的验证,以确保不会混淆用户标识。比如Tapjoy区分 “001234″ and “1234″ 为两个user id,但是您的系统有可能不区分。

Verifier

verifier是利用通过冒号分割的id, snuid, currency 和密钥MD5哈希而成,在Ruby代码如下:

Digest::MD5.hexdigest("#{id}:#{snuid}:#{currency}:#{secret_key}")

您的服务器要重新计算verifier,拒绝任何不匹配的请求。如果verifier不匹配,服务器响应403.

注意每个应用要使用不同的密钥,不要在所有的应用使用相同的密钥,如果使用相同的密钥,有可能会导致在多个应用中同时奖励用户。以上id代表的是request_id而不是currency_id。

NO_CALLBACK

在一些情况下您需要配置no callback。如果在URL中配置NO_CALLBACK,可以避免服务器收到没必要的回调。比较常用的情形是客户正在使用聚合平台,聚合平台来处理相关奖励。如果用户配置NO_CALLBACK, 我们将不会回调。

2. 用户ID

调用 setUserID对于使用自管理虚拟货币非常重要。setUserID中的值即是在回调URL中snuid的值。请一定要调用Tapjoy connect成功之后和请求广告之前调用setUserID(在SDK 11.7之后版本,Tapjoy SDK实现了设置成功/失败的回调,建议在请求广告之前监听这些回调)。如果设置不正确,您的App 用户将不会得到奖励并且您也无法得到收益。setUserID需要设置用户在游戏中的唯一ID(一般是数字)。**出于数据安全和GDPR合规性的要求,setUserID参数不应该包括任何身份信息,比如用户名,真实姓名或者邮箱地址。**出于安全和反作弊的目的,user ID要是始终如一的。(比如不能随着用户的等级或者分数改变而改变)

只有在您的游戏没有唯一ID的情况下,我们建议您按如下方式设置:

  • iOS 6 及以上,调用setUserID("vendor_id:").
  • iOS 5 及以下,调用setUserID("mac_address:")
  • 在支持移动网络的Android设备上,调用setUserID("device_id:")
  • 在仅支持Wifi的Android设备上(例如 Nexus 7),调用setUserID("device_id:")

User ID支持最多190个字符的长度。 setUserID中的值即是在回调URL中snuid的值。

iOS 用法

[Tapjoy setUserID:@"userID"]; // only do this call AFTER the Tapjoy Connect call succeeds

Android 用法

Tapjoy.setUserID(String userID); // only do this call AFTER the Tapjoy Connect call succeeds

故障解决: 如果您调用了setUserID,但是在回调URL中并非您设置的值,您需要在调用积分墙或视频广告之前调用setUserID。如果没有设置userID,默认我们会使用设备id作为snuid,比如,用户在调用设置setUserID之前进入了积分墙,所以请一定在调用connect之后调用。

如果您没有设置user ID,我们会使用device ID作为user ID。一般情况下,我们使用广告ID。但是这取决于SDK版本,设备型号,设备操作系统版本和Google Play Service版本。其他可能的device ID包括Android ID,udid和mac地址。

3. Tapjoy管理虚拟货币和自管理虚拟货币切换

如果您的应用还没有实际的用户,您可以在Tapjoy控制面板中编辑虚拟货币页面从Tapjoy管理虚拟货币切换到自管理虚拟货币。在切换时一定要填写正确的回调URL或者NO_CALLBACK,要不然改变将不会起作用。

如果您线上的app正在使用Tapjoy管理虚拟货币,切换的流程比较复杂,您需要考虑如下的事情:

  • 您需要创建包含一个新SDK密钥的新App。这样可以保证没有升级到最新版本的老版本的用户不受到影响。如果您在自管理虚拟货币版本的App中使用相同的SDK密钥,在Tapjoy管理的版本中的用户将不会得到奖励。
  • 您需要暂停定向到老的App ID的广告,然后创建新的广告指向新的App ID。
  • 切换到自管理虚拟货币还需要您代码的改动。您将不能使用getCurrencyBalance, awardCurrency, 或者spendCurrency,这些接口只能在托管情况下使用。
  • 在切换之前请咨询您的AM。
  • 我们无法从自管理虚拟货币切换回Tapjoy管理,所以请慎重选择。

迁移用户余额,我们推荐如下步骤:

  1. 在首次启动时,使用Tapjoy管理虚拟货币老的SDK密钥,调用getCurrencyBalance来获取余额。
  2. 使用getCurrencyBalance获得的值更新您的余额。
  3. 在接下来的调用中使用新的SDK密钥。

如果您正在考虑切换到自管理虚拟货币模式,但是您不确定怎样搭建您自己的服务器,我们推荐您参考下面链接中的方案 Parse 或者 UrbanAirship