服务器到服务器回调事件处理程序
使用提供的 PHP 或 Java 参数和示例代码实现和验证 ironSource 服务器到服务器委托事件回调,以安全地奖励用户已完成的广告推荐。
阅读时间7 分钟最后更新于 2 天前
佣金事件发生在用户完成广告推荐后。
- 对于奖励视频和优惠墙,这意味着应该向用户奖励虚拟货币或物品。 Ironsource 会调用佣金事件回调(在应用程序设置的 Callback 网址 参数中定义)以及有关奖励的详细信息。
- 对于奖励视频和优惠墙,必须实现委托事件回调,以便代码将正确的金额奖励给正确的用户。对于 Interstitial,事件仅通知您用户已完成优惠(不涉及奖励)。
以下部分将介绍委托事件回调的语法,提供代码示例,并介绍如何验证、管理和测试事件回调。
- 对于奖励视频,除了调用服务器端佣金事件回调之外,还会在用户完成广告推荐时发送客户端事件(请参阅 iOS 的 RewardedVideoDidReceiveCredit 或 Android 的 onRVAdCredited)。
- 对于 OfferWall,调用客户端事件 ssaOfferWallDidReceiveCredit(适用于 iOS)或 onOWAdCredited(适用于 Android)。建议的最佳做法是使用服务服务器端事件触发器用户奖励,因为可以验证回调的真实性。确保在处理(iOS) 或
ssaRewardedVideoDidReceiveCredit(Android) 时,不要针对同一事件两次奖励用户。onRVAdCredited
委托事件回调
当用户完成广告推荐并应该获得信用或虚拟物品奖励时,将调用佣金事件回调。您负责实现处理此事件的代码。
参数
Name | 类型 | 描述 |
|---|---|---|
| [USER_ID] | 字符串 | 要奖励的用户的唯一标识符。这是调用 app 在初始化 ironSource 商品时发送的。将传递网址编码的形式(例如,“123%40abc.com”而不是“123@abc.com”)。 |
| [REWARDS] | Int | 要授予用户的信用单位数。 |
| [EVENT_ID] | 字符串 | 回调事件的唯一标识符,由 ironSource 服务器生成,由字母数字角色组成 |
| [ITEM_NAME] | 字符串 | 要授予的虚拟物品的名称(如果使用虚拟物品选项)。 |
| 时间戳 | 字符串 | 调用此回调的确切日期和时间的字符串表示,格式如下:YYYYMMDDHHMM(例如:"20100102 ⁇ " 表示 2010 年 1 月 2 日 14:55)。 |
| signature | 字符串 | 用于身份Authentication的 MD5 哈希字字符串。此密钥基于以下公式生成:md5([TIMESTAMP][EVENT_ID][USER_ID] [REWARDS][PRIVATE_KEY])。USER_ID 元素是 userID 的网址解码值(例如,“123@abc.com”而不是“123%40abc.com”)。私有变量_KEY 元素是在私有变量设置中定义的值。 |
响应
应用程序必须通过发送状态为 200 (OK) 的 HTTP 响应来确认收到委托事件,其中 字符串出现在响应中的任何位置。
"\[EVENT\_ID\]:OK"<xml><status>dae8e6cf42b1357f8652ad6ecb5b24f1:OK</status></xml>
委托事件回调代码示例 - PHP
以下 PHP 代代码示例演示了一个典型的委托事件回调处理程序。复制代码后需要做的就是实现 和 函数并将 字符串设置为正确的值。
**alreadyProcessed()**\**doProcessEvent()****\[YOUR\_PRIVATE\_KEY\]**// get the variables$userId = $_GET['applicationUserId'];$eventId = $_GET['eventId'];$rewards = $_GET['rewards'];$signature = $_GET['signature'];$timestamp = $_GET['timestamp'];$privateKey = ‘[YOUR_PRIVATE_KEY]';// validate the call using the signatureif (md5($timestamp.$eventId.$userId.$rewards.$privateKey) != $signature){ echo "Signature does not 匹配 参数"; return;}// check that we haven't processed the same event beforeif (!alreadyProcessed($eventId)){ // grant the rewards doProcessEvent($eventId, $userId, $rewards);}// return okecho $eventId.":OK";
委托事件回调代码示例 - Java
以下 Java 代码示例演示了一个典型的委托事件回调处理程序。复制代码后需要做的就是实现和方法并将字符串设置为正确的值。
**getPostParameter()****alreadyProcessed()**\**\[myPrivateKey\]**import java.security.*;import java.math.BigInteger;public class HelloWorld { public static void main(String []args) { validateSuperSonicCallback(); } public static String getPostParameter(String param){ // TODO : your app implementaion for get post parmas return ""; } public static boolean alreadyProcessed(String eventId){ // TODO return true; } public static boolean validateSuperSonicCallback() { String applicationUserId = getPostParameter("applicationUserId"); String eventId = getPostParameter("eventId"); String signature = getPostParameter("signature"); String userId = getPostParameter("userId"); String rewards = getPostParameter("rewards"); String timestamp = getPostParameter("timestamp"); String privateKey = "myPrivateKey" ;// enter your private key String mySignature = ""; try { String message = timestamp + eventId + userId + rewards +privateKey; MessageDigest md = MessageDigest.getInstance("MD5"); md.update(message.getBytes()); BigInteger hash = new BigInteger(1, md.digest()); String result = hash.toString(16); while(result.length() < 32) { result = "0" + result; } System.out.println(result); // 显示字符串。 } catch (NoSuchAlgorithmException e){ } if (mySignature!=signature){ return false; }else{ return !alreadyProcessed(eventId); } }}
验证委托事件回调
为了保护代码免受未经授权的访问,建议的最佳做法是测试委托事件回调签名音频源代码,以验证调用是否由 Ironsource 发出。
要验证委托事件回调,可以执行以下操作:
- 根据以下公式从调用的参数生成 MD5 哈希值:,然后验证结果与签名参数值是否相同。
md5(\[TIMESTAMP\]\[EVENT\_ID\]\[USER\_ID\] \[REWARDS\]\[PRIVATE\_KEY\]) - 验证调用是否源自以下 IP 地址之一:
- 79.125.5.179
- 79.125.26.193
- 79.125.117.130
- 176.34.224.39
- 176.34.224.41
- 176.34.224.49
- 34.194.180.125
- 34.196.56.165
- 34.196.251.81
- 34.196.253.23
- 54.88.253.218
- 54.209.185.78