Cách triển khai lệnh gọi lại đổi từ máy chủ sang máy chủ
Set up server-to-server callbacks to securely validate rewarded ad completions to help prevent fraud and ensure accurate reward distribution.
Thời gian đọc 6 phútCập nhật lần cuối 10 ngày trước
Sử dụng lệnh gọi lại Máy chủ đến Máy chủ (S2S) để phát hiện và ngăn chặn gian lận khi thưởng cho người chơi.
Cách thức hoạt động
Khi người chơi xem trọn vẹn video quảng cáo, máy chủ Unity Ads sẽ gửi lệnh gọi lại đã ký đến URL do bạn chỉ định. Điều này xảy ra trước khi thực sự kết thúc video, nên trò chơi có thể hoàn thành chu kỳ tặng thưởng trước khi người dùng trở lại trò chơi.
Triển khai
Để sử dụng lệnh gọi lại S2S, bạn cần đặt ID Máy chủ (sid) trước khi hiển thị quảng cáo. Theo mặc định, lệnh gọi lại S2S không khả dụng. Nếu muốn kích hoạt chúng cho dự án, hãy liên hệ với bộ phận Hỗ trợ bằng ID Trò chơi của bạn và URL gọi lại tương ứng trong tin nhắn. Unity sẽ gửi cho bạn mã băm bí mật dùng để ký và xác thực các lệnh gọi lại đó.Để triển khai lệnh gọi lại trong mã C#, hãy đặt giá trị cho ID Máy chủ của bạn, sau đó chuyển đối tượng tùy chọn qua phương thức .
ShowOptions.gamerSidShowusing UnityEngine;using System.Collections;using UnityEngine.Advertisements;public class UnityAdsManager : MonoBehaviour{ public string gameId; public string placement = "rewardedVideo" public void ShowAd() { ShowOptions options = new ShowOptions(); // setting the server ID options.gamerSid = "your-side-id"; Advertisement.Show(placementID, options); }}
Thông tin về lệnh gọi lại
Nguồn gốc của lệnh gọi lại
Lệnh gọi lại bắt nguồn từ địa chỉ IP/mạng được liệt kê tại đây. Danh sách sẽ được cập nhật vào ngày đầu tiên của mỗi tháng. Đơn vị phát hành có thể bỏ qua hoặc chặn các lệnh gọi lại một cách an toàn từ mọi nơi.Định dạng URL gọi lại
Yêu cầu là một yêu cầuGETHãy tham khảo bảng sau để biết thông tin về các tham số truy vấn:[CALLBACK_URL][SEPARATOR1]sid=[SID][SEPARATOR]oid=[OID][SEPARATOR]hmac=[SIGNATURE]
Tham số | Nội dung |
|---|---|
| URL nền tảng của URL gọi lại, ví dụ: |
| Nếu |
| ID người dùng hoặc mọi dữ liệu tùy chỉnh bạn muốn gửi đến điểm cuối của mình. |
| |
| ID Ưu đãi duy nhất do máy chủ Unity Ads tạo ra. |
| |
| Mã băm HDMAC-MD5 của một chuỗi tham số Ví dụ: |
https://developer.example.com/award.php?productid=1234&sid=1234567890&oid=0987654321&hmac=106ed4300f91145aff6378a355fced73
Ký URL gọi lại
Yêu cầu URL gọi lại sẽ có chữ ký đính kèm với các tham số URL. Chữ ký là mã băm HDMAC-MD5 của chuỗi tham số được tạo bằng cách nối tất cả các tham số URL ở dạng key-value (ngoại trừ HMAC) theo thứ tự bảng chữ cái được phân tách bằng dấu phẩy. Ví dụ: một URL gọi lại với SID hoặc OID củahttps://developer.example.com/award.php?productid=1234&sid=1234567890&oid=0987654321oid=0987654321,productid=1234,sid=1234567890https://developer.example.com/award.php?productid=1234&sid=1234567890&oid=0987654321&hmac=106ed4300f91145aff6378a355fced73Phản hồi lệnh gọi lại
Nếu yêu cầu vượt qua tất cả các bước kiểm tra và người dùng được trao tặng vật phẩm, URL phải phản hồi bằngHTTP/1.1 200 OK1Nếu xảy ra lỗi (ví dụ: khi OID đã được sử dụng hoặc chữ ký không khớp hoặc bất kỳ lỗi nào khác khi người dùng cuối cùng không có vật phẩm đã hứa), máy chủ sẽ trả về lỗi HTTP trong phạm viHTTP/1.1 200 OKDate: Wed, 22 Feb 2012 23:59:59 GMTContent-Length: 81
400500HTTP/1.1 400 ERRORDate: Wed, 22 Feb 2012 23:59:59 GMTContent-Length: 12Duplicate order
Ví dụ về lệnh gọi lại trong node.js
Ví dụ sau đây cho biết cách xác minh chữ ký bằng biểu thức node.js +: Lệnh gọi lại mẫu trong node.js// NODE.js S2S callback endpoint sample implementation// Unity Adsvar express = require("express")var crypto = require("crypto")var app = express()app.listen(process.env.PORT || 3412)function getHMAC(parameters, secret) { var sortedParameterString = sortParams(parameters) return crypto.createHmac("md5", secret).update(sortedParameterString).digest("hex")}function sortParams(parameters) { var params = parameters || {} return Object.keys(params) .filter((key) => key !== "hmac") .sort() .map((key) => (params[key] === null ? `${key}=` : `${key}=${params[key]}`)) .join(",")}app.get("/", function (req, res) { var sid = req.query.sid var oid = req.query.oid var hmac = req.query.hmac // Save the secret as an environment variable. If none is set, default to xyzKEY var secret = process.env.UNITYADSSECRET || "xyzKEY" var newHmac = getHMAC(req.query, secret) if (hmac === newHmac) { // Signatures match // Check for duplicate oid here (player already received reward) and return 403 if it exists // If there's no duplicate - give virtual goods to player. Return 500 if it fails. // Save the oid for duplicate checking. Return 500 if it fails. // Callback passed, return 200 and include '1' in the message body res.status(200).send("1") } else { // no match res.sendStatus(403) }})
Ví dụ về cuộc gọi lại trong PHP
Ví dụ sau cho thấy cách xác minh chữ ký trong PHP: Lệnh gọi lại mẫu trong PHP<?phpfunction generate_hash($params, $secret) { ksort($params); // All parameters are always checked in alphabetical order $s = ''; foreach ($params as $key => $value) { $s .= "$key=$value,"; } $s = substr($s, 0, -1); $hash = hash_hmac('md5', $s, $secret); return $hash;}$hash = $_GET['hmac'];unset($_GET['hmac']);$signature = generate_hash($_GET, 'xyzKEY'); // insert here the secret hash key you received from Unity Ads supporterror_log("req hmac".$hash);error_log("sig hmac".$signature);// check signatureif($hash != $signature) { header('HTTP/1.1 403 Forbidden'); echo "Signature did not match"; exit; }// check duplicate ordersif(check_duplicate_orders($_GET['oid']) { header('HTTP/1.1 403 Forbidden'); echo "Duplicate order"; exit; }// if not then give the player the item and check that it succeeds.if(!give_item_to_player($_GET['sid'], $_GET['product']) { header('HTTP/1.1 500 Internal Server Error'); echo "Failed to give item to the player"; exit; }// save the order ID for duplicate checkingif(save_order_number($_GET['oid']) { header('HTTP/1.1 500 Internal Server Error'); echo "Order ID saving failed, user granted item"; exit; }// everything OK, return "1"header('HTTP/1.1 200 OK');echo "1";?>