自管货币
为 Tapjoy Offerwall 设置自管虚拟货币,包括配置奖励回调以及在自有服务器上处理交易。
阅读时间11 分钟最后更新于 4 天前
当您使用自有服务器来处理用户货币时,需采用自管货币模式。此模式可让您更全面掌控用户货币,但也意味着您需要全权负责后端货币管理工作,包括存储和处理所有用户的货币金额。getCurrencyBalance、awardCurrency 或 spendCurrency 仅适用于托管货币模式。对于自管货币,Tapjoy 不会向客户端/应用端发送通知;当我们调用您的回调服务器时,应用和用户的通知由您自行处理。您必须设置一个回调服务器才能使用自管货币。 尽管 Tapjoy 会尽最大努力尽快为用户发放奖励,但不能保证用户立即收到奖励。用户收到奖励的时间受很多因素影响。最好是定期检查用户的最新余额,并在应用发生某些事件时进行此检查,例如在应用启动后、应用恢复运行后、关卡切换期间、视频广告关闭后、商店加载前等。此外,建议告知用户,完成任务后可能需要一些时间才能收到奖励。
回调 URL
当用户完成任务获得虚拟货币后,我们将向此 URL 发起一次 HTTP GET 请求。参数的格式如下:默认的请求参数包括 snuid 和 currency(表示应为用户帐户增加的货币数量)以及用户的 WiFi mac_address(如果可用)。<callback_url>?snuid=<user_id>¤cy=<currency>&mac_address=<mac_address>//Examplehttp://www.sampledoman.com/payments/offers/tapjoy?&snuid=42&currency=50&mac\_address=00-16-41-34-2C-A6
服务器响应
Tapjoy 服务器期望服务器返回200403服务器响应 | 案例 |
|---|---|
| - 用户成功获得货币。 |
|
|
Tapjoy 每 5 分钟左右重试一次回调,持续 4 天。如果服务器的响应时间超过 5 秒,Tapjoy 的算法会将该请求视为失败。
用于检测和预防欺诈的可选参数
您可以在 Dashboard(后台) > Monetize(变现) > Virtual Currency(虚拟货币) > Create/Edit(创建/编辑) 中访问虚拟货币密钥。此密钥与应用程序 SDK 密钥不同。此虚拟货币密钥用于对回调进行签名。 如果货币中存在密钥 (secret_key=参数 | 描述 | 注意 |
|---|---|---|
| 这是具有唯一性的标识符,用于标记奖励的特定货币。 | 表示 |
| ID、snuid、货币和密钥的 MD5 哈希值。 |
应始终注意的欺诈情况
- 如果您发现 ID 被重用和/或校验值不正确,表示回调 URL 不是来自 Tapjoy,应视为欺诈。
- 如果您的用户 ID 仅包含整数,建议您执行简单的验证以确保用户 ID 未被篡改。例如,Tapjoy 将“001234”和“1234”视为两个不同的用户 ID,但后端服务器的逻辑可能并非如此。
校验值
校验值 (verifier) 的计算方法是用冒号将 ID、snuid、货币和密钥连接成一个字符串,然后对该字符串计算 MD5 哈希值。在 Ruby 代码中,如下所示:您的服务器应重新计算校验值,并拒绝任何不匹配的请求。如果校验值不匹配,服务器应返回 403 Forbidden 响应。Digest::MD5.hexdigest("#{id}:#{snuid}:#{currency}:#{secret_key}")
改进回调 URL
我们对上面列出的回调进行了改进,提供更多信息和更高安全性。如果希望使用此改进版本,请联系您的客户经理或我们的支持团队,他们会帮助您启用此版本的回调。 用户通过完成任务赚取货币后,我们将向您提供的 URL 发起一次 POST 请求。参数的格式如下:{ "cp": "some_string", "currency": { "currency_sale":"1.0", "id": "reward_id", "reward":100 }, "id": "some_id", "offer": { "advertiser_app_name": "a_cool_app", "currency": { "max_reward_value":1360 }, "expires_at":1768175428, "icon_url": "some_URL/icon.jpg", "name": "eye_catching_headline", "task":{ "is_iap": false, "name": "event_name" }, "type": "" }, "placement":{ "content_type": "offerwall", "name": "placement_name" }, "rev":100, "timestamp":1762993750, "user": { "id": "user_id" }}
参数 | 类型 | 描述 |
|---|---|---|
| 字符串 | 此请求的唯一奖励 ID |
| 双精度 | 获得的收入(以美元为单位) |
| 字符串 | 通过 SDK 的 setCustomParameter 方法传递的自定义参数 |
| 字符串 | 此货币的唯一标识符 |
| 整数 | 奖励给用户的货币金额 |
| 浮点 | 货币促销乘数(如果适用) |
| 整数 | 用户完成此次所有任务后可以获得的最大货币量。 |
| 字符串 | 广告主提供的任务的名称 |
| 字符串 | 目前不支持此参数 |
| 字符串 | 任务的图标 URL |
| 字符串 | 广告主的应用名称 |
| 字符串 | 用户完成并得到奖励的任务的名称或描述。 |
| 布尔值 | 如果奖励事件对应的是 IAP 事件,则值为 true |
| 时间戳 | 用户在该时间戳(以秒为单位)之后无法再通过此任务获得奖励。 |
| 字符串 | 与此次转化关联的广告位 |
| 字符串 | 使用的广告位类型 |
| 字符串 | 通过 SDK 的 setUserID 方法传递的用户 ID |
| 时间戳 | 此次交易的时间戳 |
包含签名的 Tapjoy 标头示例:HMAC_SHA-256(<Request-Body>,<Secret-Key>)
X-Tapjoy-Signature => 7205ccfdfa1fe28cd05a1b56a9508d898cc938aa555a6c18848097fe4ee0975b
用户 ID
如果您使用自管货币,那么设置用户 ID 就至关重要。此值是回调 URL 中设置的snuidsetUserID// Recommended approach using connect flagNSDictionary *connectFlags = @{TJC_OPTION_USER_ID : @"<USER_ID_HERE>"};[Tapjoy connect:@"SDK_KEY_GOES_HERE" options:connectFlags];// Setting the user id directly[Tapjoy setUserIDWithCompletion:@"<USER_ID_HERE>" completion:^(BOOL success, NSError *error) {}];
设置用户余额
每次请求广告位时,您都可以将用户的当前余额告知 Tapjoy。必须在请求广告位内容之前进行此设置。TJPlacement *placement = [TJPlacement placementWithName:@"placementName" delegate:nil];[placement setBalance:100 forCurrencyId:@"1234" withCompletion:^(NSError * _Nullable error) { if (error != nil) { //Failure NSString *message = error.localizedDescription; } else { //Success }}];
所需金额
如果设置了用户余额,还可以设置广告位所需的金额值。TJPlacement* placement = [TJPlacement placementWithName:@"placementName" delegate:nil];[placement setRequiredAmount:100 forCurrencyId:@"1234" withCompletion:^(NSError * _Nullable error) { if (error != nil) { //Failure NSString *message = error.localizedDescription; } else { //Success }}];
奖励回调 IP 白名单
如果您的奖励回调服务器需要额外权限(白名单)才能访问,下面是 Tapjoy 的 IP 地址列表。(最后修改时间:2024 年 5 月 12 日)18.215.207.8918.235.142.16523.20.255.11323.23.134.1653.210.188.323.215.42.1403.217.209.1773.218.95.353.219.236.533.231.137.161
从 Tapjoy 托管货币切换到自管货币
如果您的应用尚未发布,可以在 Tapjoy 后台的 Edit Virtual Currency(编辑虚拟货币)屏幕上,从 Tapjoy 托管货币切换到自管货币。请务必在回调 URL 字段中输入格式正确的 URL,否则更改将无法生效。 如果您的应用程序已上线并采用 Tapjoy 托管货币,切换过程会更加复杂。这种情况下,请注意以下事项:- 您需要创建新应用并生成新的 SDK 密钥。这样可以确保使用旧版应用(未升级到最新版本)的用户不受影响。如果您在采用自管货币的应用中继续使用原来的 SDK 密钥,则采用 Tapjoy 托管货币的应用中的所有用户将无法获得完成任务的奖励。
- 您需要禁用所有指向旧 App ID 的广告系列,并重新创建广告系列并使其指向新 App ID。
- 切换到自管货币还需要更改应用中的代码。您将无法使用 getCurrencyBalance、awardCurrency 或 spendCurrency,因为它们仅适用于托管货币。
- 建议在考虑进行更改之前联系您的客户经理。
- 无法从自管货币切换到 Tapjoy 托管货币。因此,请务必在更改之前三思。
- 首次发布应用时,使用旧的 SDK 密钥(采用 Tapjoy 托管货币),并调用 getCurrencyBalance 来获取余额。
- 将余额更新为 getCurrencyBalance 返回的值。
- 在所有后续发布时,使用新的 SDK 密钥。