サポート問い合わせ先| システムステータス
ページコンテンツ

    Android用ネイティブSDKでPulseプラグインを使用する

    このトピックでは、BrightcoveのAndroid用ネイティブSDKでPulseプラグインを使用する方法を学習します。

    はじめに

    BrightcoveのPulseプラグインを使用すると、InvidiのPulseSDKをBrightcoveNative SDK forAndroidと統合できます。パルスはビデオ広告プラットフォームです。キャンペーンと構成の詳細については、ユーザーガイド

    ステップ

    キャンペーンがPulseプラットフォームで作成されると、Brightcove Native SDK forAndroid用のPulseプラグインの使用を開始できます。次の手順に従って、Pulseプラグインをプロジェクトに統合します。

    1. モジュール内build.gradleファイルに、Pulseプラグインの依存関係を追加します。

      dependencies {
          implementation 'com.brightcove.player:android-pulse-plugin:6.12.0'
      }
    2. ダウンロードPulse SDK.aarファイル

    3. あなたの中でapp / libsフォルダを開き、 build.gradleモジュールからのファイル。以下を変更します。

      dependencies {
          implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
      }
    4. あなたの中でMainActivity.javaファイル、インスタンス化してパルスプラグインを初期化しますPulseComponentキャンペーン用に作成されたPulseホストURLを使用します。

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          // ...
          // Creating pulse component
          PulseComponent pulseComponent = new PulseComponent(
                  "your pulse host url",
                  brightcoveVideoView.getEventEmitter(),
                  brightcoveVideoView);
          // ...
      }
    5. をセットするPulseComponentリスナー。

      pulseComponent.setListener(new PulseComponent.Listener() {
        @NonNull
        @Override
        public PulseSession onCreatePulseSession(
          @NonNull String hostUrl,
          @NonNull Video video,
          @NonNull ContentMetadata contentMetadata,
          @NonNull RequestSettings requestSettings) {
          // See step 3a
          return Pulse.createSession(contentMetadata, requestSettings);
        }
      
        @Override
        public void onOpenClickthrough(@NonNull PulseVideoAd pulseVideoAd) {
        }
      });
    6. を実装するonCreatePulseSessionメソッドを作成しますPulseSessionそしてそれをに返しますPulseComponent。3つのパラメータがあります:

      • パルスホスト
      • コンテンツメタデータ設定
      • リクエスト設定

      @NonNull
      @Override
      public PulseSession onCreatePulseSession(
          @NonNull String hostUrl,
          @NonNull Video video,
          @NonNull ContentMetadata contentMetadata,
          @NonNull RequestSettings requestSettings) {
        // Set the pulse Host:
        Pulse.setPulseHost(pulseHostUrl, null, null);
      
        // Content metadata settings
        contentMetadata.setCategory("skip-always");
        contentMetadata.setTags(Collections.singletonList("standard-linears"));
        contentMetadata.setIdentifier("demo");
      
        // Request Settings:
        // Adding mid-rolls
        List<Float> midrollCuePoints = new ArrayList<>();
        midrollCuePoints.add(60f);
        requestSettings.setLinearPlaybackPositions(midrollCuePoints);
      
        // Create and return the PulseSession
        return Pulse.createSession(contentMetadata, requestSettings);
      }
    7. を実装するonOpenClickthroughメソッドは、次の場合に呼び出されます。もっと詳しく知るリニア広告のボタンをクリックします。このコールバックの一般的なアクションは、予期されたURLでブラウザを開くことです。

      @Override
      public void onOpenClickthrough(@NonNull PulseVideoAd pulseVideoAd) {
        Intent intent = new Intent(Intent.ACTION_VIEW)
          .setData(Uri.parse(pulseVideoAd.getClickthroughURL().toString()));
        brightcoveVideoView.getContext().startActivity(intent);
        pulseVideoAd.adClickThroughTriggered();
      }
    8. コンテンツを再生する

      Catalog catalog = new Catalog.Builder(
        eventEmitter,
        getString(R.string.account))
        .setPolicy(getString(R.string.policy))
        .build();
      
      catalog.findVideoByID(getString(R.string.videoId), new VideoListener() {
        // Add the video found to the queue with add().
        // Start playback of the video with start().
        @Override
        public void onVideo(Video video) {
          brightcoveVideoView.add(video);
          brightcoveVideoView.start();
        }
      });

    パルス一時停止広告

    Pulseキャンペーンに「PauseAds」が設定されている場合、Pulseプラグインはコンテンツが一時停止されたときにユーザーに表示します。

    エラー処理

    以下に示すように、すべてのエラーは、EventType.AD_ERRORイベントを使用して開発者に表示されます。

    eventEmitter.on(EventType.AD_ERROR, event -> {
        Throwable error = event.getProperty(Event.ERROR, Throwable.class);
        Log.e(TAG, "AD_ERROR: ", error);
    });

    UIのカスタマイズ

    内部的には、PulseプラグインはPulseAdViewを使用してR.layout.pulse_ad_viewレイアウトID。別のレイアウトの場合は、同じ名前のレイアウトファイルを作成して、に追加できます。 res / layoutディレクトリ。これはデフォルトのレイアウトを上書きします。

    次のIDを使用して、デフォルトを置き換えます。

    Component Views
    コンポーネントビュー
    インデックス ビュータイプ IDを表示
    A テキストビュー pulse_ad_number_view
    B テキストビュー pulse_ad_countdown_view
    C テキストビュー pulse_ad_name_view
    D テキストビュー pulse_ad_learn_more_view
    E テキストビュー pulse_skip_ad_view

    完全なコードサンプル

    これは、Android用ネイティブSDKでPulseプラグインを使用するための完全なコードサンプルです。

    アクティビティ

    完全なアクティビティコードの例を次に示します。

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
          setContentView(R.layout.activity_main);
    
          final BrightcoveVideoView videoView = findViewById(R.id.video_view);
          super.onCreate(savedInstanceState);
    
          EventEmitter eventEmitter = videoView.getEventEmitter();
    
          // Pulse setup
          PulseComponent pulseComponent = new PulseComponent(
              "https://pulse-demo.videoplaza.tv",
              eventEmitter,
              videoView);
    
          pulseComponent.setListener(new PulseComponent.Listener() {
              @NonNull
              @Override
              public PulseSession onCreatePulseSession(
                    @NonNull String pulseHostUrl,
                    @NonNull Video video,
                    @NonNull ContentMetadata contentMetadata,
                    @NonNull RequestSettings requestSettings) {
                Pulse.setPulseHost(pulseHostUrl, null, null);
                contentMetadata.setCategory("skip-always");
                contentMetadata.setTags(Collections.singletonList("standard-linears"));
                contentMetadata.setIdentifier("demo");
    
                // Adding mid-rolls
                List<Float> midrollCuePoints = new ArrayList<>();
                midrollCuePoints.add(60f);
                requestSettings.setLinearPlaybackPositions(midrollCuePoints);
    
                return Pulse.createSession(
                  contentMetadata,
                  requestSettings);
              }
    
              @Override
              public void onOpenClickthrough(@NonNull PulseVideoAd ad) {
                Intent intent = new Intent(Intent.ACTION_VIEW)
                  .setData(Uri.parse(ad.getClickthroughURL().toString()));
                videoView.getContext().startActivity(intent);
                ad.adClickThroughTriggered();
              }
          });
    
          Catalog catalog = new Catalog.Builder(eventEmitter, "YourAccountId")
              .setPolicy("YourPolicyKey")
              .build();
          catalog.findVideoByID("YourVideoId", new VideoListener() {
    
            // Add the video found to the queue with add().
            // Start playback of the video with start().
            @Override
            public void onVideo(Video video) {
              videoView.add(video);
              videoView.start();
            }
          });
        }
      }

    レイアウト

    のレイアウトコードの例を次に示します。R.layout.pulse_ad_view

    <?xml version="1.0" encoding="utf-8"?>
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
    
          <RelativeLayout
              android:id="@+id/view_ad_details"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:background="@drawable/pulse_skip_button_background_selector">
    
              <TextView
                  android:id="@+id/pulse_ad_name_view"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_alignParentTop="true"
                  android:layout_marginTop="4dp"
                  android:paddingTop="4dp"
                  android:paddingStart="8dp"
                  android:paddingEnd="8dp"
                  android:textColor="@color/white"
                  android:background="@color/bmc_live"
                  android:textStyle="bold"
                  tools:text="Preroll blue"/>
    
              <TextView
                  android:id="@+id/pulse_ad_number_view"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:paddingStart="8dp"
                  android:paddingEnd="4dp"
                  android:paddingBottom="4dp"
                  android:layout_marginBottom="8dp"
                  android:layout_below="@id/pulse_ad_name_view"
                  android:textColor="@color/white"
                  android:background="@color/white_semi_trans"
                  tools:text="Ad (1 of 2)"/>
    
              <TextView
                  android:id="@+id/pulse_ad_countdown_view"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:paddingStart="4dp"
                  android:paddingEnd="4dp"
                  android:paddingBottom="4dp"
                  android:layout_marginBottom="4dp"
                  android:layout_below="@id/pulse_ad_name_view"
                  android:layout_toEndOf="@+id/pulse_ad_number_view"
                  android:textColor="@color/green_almost_opaque"
                  android:text=""
                  tools:text="00:06"/>
    
              <TextView
                  android:id="@+id/pulse_ad_learn_more_view"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_marginStart="@dimen/pulse_ad_learn_more_margin_left"
                  android:layout_marginTop="@dimen/pulse_ad_learn_more_margin_top"
                  android:layout_marginEnd="@dimen/pulse_ad_learn_more_margin_right"
                  android:layout_marginBottom="@dimen/pulse_ad_learn_more_margin_bottom"
                  android:layout_alignTop="@id/pulse_ad_name_view"
                  android:layout_alignBottom="@id/pulse_ad_countdown_view"
                  android:layout_alignParentEnd="true"
                  android:background="@drawable/pulse_learn_more_button_background"
                  android:paddingStart="12dp"
                  android:paddingEnd="12dp"
                  android:padding="@dimen/pulse_ad_learn_more_padding_default"
                  android:gravity="center"
                  android:shadowColor="@color/brightcove_semitransparent"
                  android:shadowDx="-1"
                  android:shadowDy="1"
                  android:shadowRadius="1.5"
                  android:text="@string/pulse_message_learn_more"
                  android:textColor="@color/pulse_button_text_color"
                  android:nextFocusUp="@id/pulse_skip_ad_view"
                  android:textSize="@dimen/pulse_message_text_size"
                  android:visibility="gone"
                  tools:visibility="visible" />
    
          </RelativeLayout>
    
          <TextView
              android:id="@+id/pulse_skip_ad_view"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:maxWidth="164dp"
              android:layout_alignParentEnd="true"
              android:layout_centerVertical="true"
              android:layout_marginBottom="@dimen/pulse_skip_ad_margin_bottom"
              android:background="@drawable/pulse_skip_button_background_selector"
              android:ellipsize="none"
              android:gravity="center"
              android:maxLines="2"
              android:paddingStart="@dimen/pulse_skip_ad_padding_left"
              android:paddingEnd="@dimen/pulse_skip_ad_padding_right"
              android:paddingTop="@dimen/pulse_skip_ad_padding"
              android:paddingBottom="@dimen/pulse_skip_ad_padding"
              android:scrollHorizontally="false"
              android:shadowColor="@color/brightcove_shadow"
              android:shadowDx="-1"
              android:shadowDy="1"
              android:shadowRadius="1.5"
              android:text="@string/pulse_message_skip_ad"
              android:textColor="@color/pulse_button_text_color"
              android:textSize="@dimen/pulse_message_text_size"
              android:visibility="gone"
              android:nextFocusUp="@id/pulse_ad_learn_more_view"
              android:focusable="true"
              tools:visibility="visible"/>
    
      </RelativeLayout>
      

    ページの最終更新日04 Oct 2021