投放視頻廣告時,如何快速與第三方播放器相容?

来源:https://www.cnblogs.com/hmscore/archive/2023/04/13/17312785.html
-Advertisement-
Play Games

新媒體時代,廣告樣式越來越豐富。相較於傳統的圖文信息,視頻類廣告更具有直觀性,能夠讓消費者在瞭解產品知識和功能的同時加深對產品的印象。 因此在各類網站或App上投放視頻類廣告是個很好的宣傳方式,但廣告商們如果想在網站上展示視頻廣告,必須確保視頻廣告投放協議與發佈渠道的播放器相容;如果不能相容,廣告商 ...


新媒體時代,廣告樣式越來越豐富。相較於傳統的圖文信息,視頻類廣告更具有直觀性,能夠讓消費者在瞭解產品知識和功能的同時加深對產品的印象。

因此在各類網站或App上投放視頻類廣告是個很好的宣傳方式,但廣告商們如果想在網站上展示視頻廣告,必須確保視頻廣告投放協議與發佈渠道的播放器相容;如果不能相容,廣告商或者視頻廣告投放平臺必須創建不同的響應,來與特定視頻播放器相容。為此,互聯網廣告署(IAB)開發了視頻廣告投放模板 (VAST)這種 XML 模式,允許通過視頻廣告伺服器提供流內視頻廣告,併在多個網站和設備上的視頻播放器中播放,不僅解決相容性問題,還提高了視頻廣告投放的效率和可擴展性。

為幫助廣告商們更好投放廣告,華為鯨鴻動能平臺提供了HUAWEI VAST SDK的集成,目前僅支持符合VAST協議的線性廣告(投放形式為前、中、後貼片廣告)。

開發準備

集成SDK

使用VAST協議時需要集成HUAWEI VAST SDK。同時如果您需要使用預設的播放器,請集成HUAWEI Player SDK。

  1. 配置Maven倉地址。

Android Studio的代碼庫配置在Gradle 插件7.0以下版本、7.0版本和7.1及以上版本有所不同。請根據您當前的Gradle 插件版本,選擇對應的配置過程。

以7.0版本為例:

a) 打開Android Studio項目級“build.gradle”文件。

b) 添加Maven代碼庫。

在“buildscript > repositories”中配置Maven倉地址。

buildscript {
    repositories {
        google()
        jcenter()
        // 配置鯨鴻動能SDK的Maven倉地址
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

c) 打開項目級“settings.gradle”文件,配置Maven倉地址。

dependencyResolutionManagement {
    ...
    repositories {
        google()
        jcenter() 
        // 配置鯨鴻動能SDK的Maven倉地址
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

配置網路許可權

在targetSdkVersion 28及以上的手機上允許HTTP(S)網路請求,在“AndroidManifest.xml”做以下配置。

<application
    ...
    android:usesCleartextTraffic="true"
    >
    ...
</application>

配置混淆腳本

您編譯APK前需要配置混淆配置文件,避免混淆HUAWEI VAST SDK導致功能異常。

打開Android工程應用級根目錄下的“proguard-rules.pro”混淆配置文件,加入排除HUAWEI VAST SDK的混淆配置。

-keep class com.huawei.openalliance.ad.** { *; }
-keep class com.huawei.hms.ads.** { *; }

初始化SDK

初始化HUAWEI VAST SDK

集成HUAWEI VAST SDK後,在應用的DemoApplication類中,初始化HUAWEI VAST SDK。

// 當用戶同意廣告服務獲取數據時,調用下麵的方法
SdkFactory.userAcceptAdLicense(true);

開發步驟

實現VAST廣告

使用預設播放器播放線性廣告

播放線性廣告可以使用預設的播放器,也可使用您實現的自定義播放器。

  1. 在XML文件中,初始化播放器的佈局。示例代碼如下:
<FrameLayout
    android:id="@+id/fl_linear_ad"
    android:layout_width="match_parent"
    android:layout_height="250dp"
    android:background="@android:color/black"
    android:visibility="gone"
    android:layout_alignParentEnd="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true" />
		```
		
2.	生成預設的廣告播放控制器,註冊線性廣告視圖。示例代碼如下:

private void registerLinearAdView() {
mLinearAdView = findViewById(R.id.fl_linear_ad);
mProgressBar = findViewById(R.id.progress);
VastAdPlayer.getInstance().registerLinearAdView(mLinearAdView, getController());
}

private BaseVideoController getController() {
return mAdConfig.isCustomVideoPlayer() ? new DefaultVideoController(this) : new CustomVideoController(this);
}


3.	請求播放線性廣告。示例代碼如下:

VastAdPlayer.getInstance().startLinearAd(linearAdSlot, new AdsRequestListener() {
@Override
public void onSuccess(View view, int responseCode) {
}

@Override
public void onFailed(View view, int responseCode) {
}

@Override
public void playAdReady() {
    mLinearAdView.setVisibility(View.VISIBLE);
}

@Override
public void playAdFinish() {
    mLinearAdView.setVisibility(View.INVISIBLE);
}

@Override
public void onBufferStart() {
    mProgressBar.setVisibility(View.VISIBLE);
}

@Override
public void onBufferEnd() {
    mProgressBar.setVisibility(View.INVISIBLE);
}

});


#### 使用自定義播放器播放線性廣告

1.	在XML文件中,初始化播放器的佈局。示例代碼如下:


```

  1. 實現自定義的廣告播放器控制器。示例代碼如下:
public class CustomVideoController extends BaseVideoController implements VastPlayerListener {
    public CustomVideoController(Context context) {
        this(context, null);
    }
    public CustomVideoController(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public CustomVideoController(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView();
    }
    @Override
    public int getLayoutId() {
        return R.layout.activity_video_player;
    }
    private void initView(){
        ...
    }
}
  1. 生成自定義的廣告播放器控制器,註冊線性廣告視圖。示例代碼如下:
private void registerLinearAdView() {
    mLinearAdView = findViewById(R.id.fl_linear_ad);
    mProgressBar = findViewById(R.id.progress);
    VastAdPlayer.getInstance().registerLinearAdView(mLinearAdView, getController());
}

private BaseVideoController getController() {
    return mAdConfig.isCustomVideoPlayer() ? new DefaultVideoController(this) : new CustomVideoController(this);
}
  1. 請求播放線性廣告。示例代碼如下:
VastAdPlayer.getInstance().startLinearAd(linearAdSlot, new AdsRequestListener() {
    @Override
    public void onSuccess(View view, int responseCode) {
    }
    @Override
    public void onFailed(View view, int responseCode) {
    }
    @Override
    public void playAdReady() {
        mLinearAdView.setVisibility(View.VISIBLE);
    }
    @Override
    public void playAdFinish() {
        mLinearAdView.setVisibility(View.INVISIBLE);
    }
    @Override
    public void onBufferStart() {
        mProgressBar.setVisibility(View.VISIBLE);
    }
    @Override
    public void onBufferEnd() {
        mProgressBar.setVisibility(View.INVISIBLE);
    }
});

播放廣告莢

廣告莢的播放與線性廣告的播放,只在使用自定義播放器請求播放廣告步驟4中有區別,請求播放廣告莢的示例代碼如下:

VastAdPlayer.getInstance().startAdPods(linearAdSlot, new AdsRequestListener() {
    @Override
    public void onSuccess(View view, int responseCode) {
    }
    @Override 
    public void onFailed(View view, int responseCode) {
    }
    @Override
    public void playAdReady() {
        mLinearAdView.setVisibility(View.VISIBLE);
    }
    @Override
    public void playAdFinish() {
        mLinearAdView.setVisibility(View.INVISIBLE);
    }
    @Override
    public void onBufferStart() {
        mProgressBar.setVisibility(View.VISIBLE);
    }
    @Override
    public void onBufferEnd() {
        mProgressBar.setVisibility(View.INVISIBLE);
    }
});

測試VAST廣告

您需要使用專門的測試廣告位ID來獲取測試廣告,以避免在測試過程中產生無效的廣告點擊量。測試廣告位ID,僅可用於調測廣告功能,不可用於廣告變現,在應用正式發佈前需替換為正式的廣告位ID。您應在應用發佈前先進入流量變現官網,點擊“開始變現”,登錄鯨鴻動能媒體服務平臺,申請正式的廣告位ID並替換測試廣告位ID,具體操作詳情請參見展示位創建。以下表格中提供了VAST廣告的專用測試廣告位ID:

下載VAST廣告的示例代碼並運行,可以看到如下效果圖:

瞭解更多詳情>>

訪問華為開發者聯盟官網
獲取開髮指導文檔
華為移動服務開源倉庫地址:GitHubGitee

關註我們,第一時間瞭解 HMS Core 最新技術資訊~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 鎖屏面試題百日百刷,每個工作日堅持更新面試題。請看到最後就能獲取你想要的,接下來的是今日的面試題: 1.如何保證Kafka的消息有序 Kafka對於消息的重覆、丟失、錯誤以及順序沒有嚴格的要求。 Kafka只能保證一個partition中的消息被某個consumer消費時是順序的,事實上,從Topi ...
  • Oracle資料庫還原恢復後,執行alter database open resetlogs時遇到下麵錯誤。如下所示: SQL> alter database open resetlogs;alter database open resetlogs*ERROR at line 1:ORA-00603 ...
  • redis 工具類 /** * Redis 工具類 */ @Component public class RedisUtil { @Resource private RedisTemplate<String, Object> redisTemplate; public RedisUtil(Redis ...
  • 摘要:query_band是一個會話級別(session)的GUC參數,本身是字元串類型,支持任意形式字元組合。 本文分享自華為雲社區《GaussDB(DWS)的query_band負載識別與應用》,作者:門前一棵葡萄樹。 query_band概述 GaussDB(DWS)實現了基於query_ba ...
  • 摘要:多跳查詢能力也是一個衡量產品性能非常重要的指標。 本文分享自華為雲社區《聊聊超級快的圖上多跳過濾查詢》,作者:弓乙。 在圖資料庫/圖計算領域,多跳查詢是一個非常常用的查詢,通常來說以下類型的查詢都可以算作是多跳過濾查詢: 1.查詢某個用戶的朋友認識的朋友 --二跳指定點label的查詢 2.查 ...
  • 微信小程式雲開發(WeChat Mini Program Cloud Development)是微信官方推出的一種簡化小程式開發的方案。它提供了一個完整的後端雲服務,支持資料庫、存儲、雲函數等功能。在雲開發中,Command 是一個重要的概念,主要用於操作資料庫。 Command 是資料庫命令的構造 ...
  • Redis是一個開源的,基於記憶體的,高性能的鍵值型資料庫。它支持多種數據結構,包含五種基本類型 String(字元串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三種特殊類型 Geo(地理位置)、HyperLogLog(基數統計)、Bitmaps(點陣圖),可以滿足各... ...
  • 4月22日下午14:00,雲資料庫技術和NineData主辦的「MySQL x ClickHouse」技術沙龍,將在杭州市海智中心3號樓1102報告廳舉辦。本次沙龍以“技術進化,讓數據更智能”為主題,匯聚位元組跳動、阿裡雲、玖章算術、華為雲、騰訊雲等眾多資料庫廠商的技術大咖, 圍繞MySQL x Cl... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...