HUAWEI Ads激勵廣告,華為酷炫廣告HUAWEI Ads激勵廣告激勵廣告激勵廣告是一種全屏幕的視頻廣告,用戶可以選擇點擊觀看,以換取相應獎勵。添加激勵廣告1.創建激勵廣告對象。創建RewardAd對象,示例代碼如下:public class RewardedVideoActivity extends Activi......
激勵廣告
激勵廣告是一種全屏幕的視頻廣告,用戶可以選擇點擊觀看,以換取相應獎勵。
添加激勵廣告
1.創建激勵廣告對象。
創建RewardAd對象,示例代碼如下:
public class RewardedVideoActivity extends Activity {
// testx9dtjwj8hp為專用的測試廣告位ID,App正式發布時需要改為正式的廣告位ID
private static final String ADID = testx9dtjwj8hp;
private RewardAd rewardAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activityrewarded);
// 創建激勵廣告對象
createRewardAd();
}
private void createRewardAd() {
rewardAd = new RewardAd(this, ADID);
}
}
2.獲取廣告。
調用RewardAd對象的loadAd()方法來獲取廣告,示例代碼如下:
/**
* 加載激勵廣告
*/
private void loadRewardAd() {
if (rewardAd == null) {
rewardAd = new RewardAd(this, ADID);
}
RewardAdLoadListener listener= new RewardAdLoadListener() {
@Override
public void onRewardedLoaded() {
// 激勵廣告加載成功
}
@Override
public void onRewardAdFailedToLoad(int errorCode) {
// 激勵廣告加載失敗
}
};
rewardAd.loadAd(new AdParam.Builder().build(), listener);
}
3.展示廣告。
調用RewardAd的show()方法來顯示廣告,在此之前需要調用isLoaded()方法來確認廣告已經加載完成。
如下所示:
/**
* 展示激勵廣告
*/
private void rewardAdShow() {
if (rewardAd.isLoaded()) {
rewardAd.show(RewardedVideoActivity.this, new RewardAdStatusListener() {
@Override
public void onRewardAdOpened() {
// 激勵廣告被打開
...
}
@Override
public void onRewardAdFailedToShow(int errorCode) {
// 激勵廣告展示失敗
...
}
@Override
public void onRewardAdClosed() {
// 激勵廣告被關閉
...
}
@Override
public void onRewarded(Reward reward){
// 激勵廣告獎勵達成,發放獎勵
...
}
});
}
}
說明
onRewarded方法中,如果在廣告位配置了獎勵物品信息,則會傳入獎勵物品信息的對象reward,通過reward.getAmount()方法獲取獎勵物品的數量,通過reward.getName()方法獲取獎勵物品的名稱,推薦立即發放獎勵,同時在服務端做校驗,判斷獎勵是否生效。如果未配置獎勵物品信息,則根據實際場景發放獎勵。
測試激勵廣告
測試激勵廣告時,需要使用專門的測試廣告位ID來獲取測試廣告,以避免在測試過程中產生無效的廣告點擊量。測試廣告位ID僅作為功能調試使用,不可用于廣告變現。您需要在應用發布前申請真實的廣告位ID,并替換測試廣告位ID。
以下表格中提供了激勵廣告的專用測試廣告位ID:
下載激勵廣告的示例代碼并運行,可以看到如下效果圖:
另外您也可以通過學習Codelab中的教程來集成激勵廣告。
校驗激勵廣告服務端驗證回調
服務端驗證回調是指HUAWEI Ads廣告平臺發快遞給媒體服務器的網址請求,其中帶有特定的查詢參數,用來通知媒體服務器某位用戶因為與激勵視頻廣告互動而應予以獎勵,從而規避欺騙的行為。
獎勵用戶
·在給用戶發獎勵時,要把握好用戶體驗和獎勵驗證之間的平衡。因為服務器端回調,可能會出現延遲,因此我們建議客戶端立即獎勵用戶,同時在收到服務器端回調時對所有獎勵進行驗證。這種做法可確保獎勵符合發放條件,同時提供良好的用戶體驗。
·對于某些應用而言,獎勵是否達到發放條件非常重要,用戶可適當接受延遲。這時,最佳做法是等待服務器端回調完成驗證,再向用戶發放獎勵。
校驗服務端驗證回調
1.設置激勵廣告的獎勵配置。
您在HUAWEI Ads媒體服務平臺上申請激勵視頻廣告位時選擇“媒體管理(點擊媒體名)新增展示位選擇激勵視頻(點擊下一步,進入編輯頁面)”,設置獎勵類型和獎勵數量,并點擊“高級設置”,設置服務器端驗證的URL。如下圖:
2.(可選)設置自定義數據和userId。
您在App中請求激勵廣告之前對激勵廣告對象設置自定義數據data和userId。
RewardAd rewardAd = new RewardAd(RewardActivity.this, getString(R.string.adidreward));
RewardVerifyConfig config = new RewardVerifyConfig.Builder().setData(CUSTOMDATA)
.setUserId(1234567)
.build();
rewardAd.setRewardVerifyConfig(config);
...
rewardAd.loadAd(new AdParam.Builder().build(), rewardAdLoadListener);
說明
如果沒有設置data和userId,不影響發放獎勵事件上報但是服務端驗證的參數中沒有這兩個字段。如果設置data和userId,必須在展示廣告之前設置并且URLEncode之后,長度不超過1024個字符,否則影響服務端驗證。
3.獲取要驗證的內容。
用戶觀看完激勵廣告時,HUAWEI Ads服務端會把需要驗證的參數以及KeyId和sign傳給媒體提供的URL: https://www.example.com/feedback(即步驟一中配置的驗證URL)。請求體:
{
adId : testx9dtjwj8hp,
data : CUSTOMDATA,
keyId : 12345678,
rewardAmount : 10,
rewardName : 金幣,
sign : OA33u6mypnhE4hbmF32N/ibYi1uXt72nDDyYMwjDI6JXVVFKePZYo4F7Fuk2MaG......,
uniqueId : 3361626337333932313435313430373438383561376265636130393939313166,
userId : 1234567
}
服務器端驗證回調查詢參數說明:
4.組裝驗證參數。
驗證內容(除sign、keyId)格式順序如下:
adId={adId}data={data}rewardAmount={rewardAmount}rewardName={rewardName}uniqueId={uniqueId}userId={userId}
其中‘{}’里面表示參數的值,且參數順序不能變。假如參數為null或者空字符串,則url中不拼接該參數,然后用sha256計算散列值,得到paramContentData。
示例代碼如下:
String adId = request.getParameter(adId);
String data = request.getParameter(data);
String userId = request.getParameter(userId);
String param = adId= + adId + data= + data + rewardAmount= + rewardAmount + rewardName= + rewardName + uniqueId= + uniqueId + userId= + userId;
String sha256Value = Sha256Util.digest(param);
byte[] paramContentData = sha256Value.getBytes(Charset.forName(UTF8));
5.獲取公鑰列表。
1.在HUAWEI Ads 媒體服務平臺查看對應的激勵視頻廣告位,點擊“獲取密鑰”按鈕獲取“開發者ID”和“密鑰”:
2. 通過如下接口獲得華為提供的公鑰列表:
接口URL:https://ppscrowddre.op.dbankcloud.com/actionlibtrack/publickeys
將body通過密鑰進行HMACSHA256加密得到簽名,替換到Authorization中,并設置“開發者ID”和Authorization到Header中。
示例代碼如下:
String data = ;
String url = https://ppscrowddre.op.dbankcloud.com/actionlibtrack/publickeys;
String authorization = Digest validTime=\{0}\, response=\{1}\;
// 開發者ID
String userId = YOURPUBLISHERID;
// 密鑰
String key = YOURKEY;
HttpClient httpclient = HttpClients.createDefault();
HttpGet request = new HttpGet();
try {
String validTime = String.valueOf(System.currentTimeMillis());
String body = validTime + :/publickeys;
byte[] keyBytes = Base64.decodeBase64(key);
byte[] bodyBytes = body.getBytes(Charsets.UTF8);
Mac mac = Mac.getInstance(HmacSHA256);
SecretKey secretKey = new SecretKeySpec(keyBytes, HmacSHA256);
mac.init(secretKey);
byte[] signatureBytes = mac.doFinal(bodyBytes);
String signature = (signatureBytes == null) null : Hex.encodeHexString(signatureBytes);
authorization = MessageFormat.format(authorization, validTime, signature);
request.setURI(new URI(url));
request.setHeader(userId, userId);
request.setHeader(Authorization, authorization);
HttpResponse response = httpclient.execute(request);
data = EntityUtils.toString(response.getEntity());
} catch (Exception e) {
}
}
返回data消息體:
{
keys: [
{
keyId:12345678,
publicKey:LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1GLi4uc3c9PVxkQgUFVCTElt
},
{
keyId: 22345678,
publicKey:LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1GLi4uc3c9PVxkQgUFVCTElt
}
]
}
返回消息結構體:
Key結構體:
6.執行驗證。
a.根據keyId從公鑰列表中找到對應的base64編碼后的publicKey。
b.然后將paramContentData、publicKey和sign作為SHA256withRSA數字簽名算法的入參,執行驗證。
示例代碼如下:
public static boolean verify(byte[] data, String publicKey, String sign, String signatureAlgorithm) {
try {
byte[] keyBytes = base64Decode(publicKey);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
PublicKey publicK = keyFactory.generatePublic(keySpec);
Signature signature = Signature.getInstance(signatureAlgorithm);
signature.initVerify(publicK);
signature.update(data);
return signature.verify(base64Decode(sign));
} catch (InvalidKeyException SignatureException UnsupportedEncodingException InvalidKeySpecException NoSuchAlgorithmException e) {
return false;
}
}
private static byte[] base64Decode(String encoded) throws UnsupportedEncodingException {
return Base64.decodeBase64(encoded.getBytes(UTF8));
}
特別聲明:以上文章內容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內容、版權或其它問題請于作品發表后的30日內與ESG跨境電商聯系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯系在線顧問
小程序
ESG跨境小程序
手機入駐更便捷
返回頂部