Verwendung des Pulse-Plugins mit dem Native SDK für Android

In diesem Thema erfahren Sie, wie Sie das Pulse-Plugin mit dem nativen SDK von Brightcove für Android verwenden.

Einleitung

Mit dem Pulse-Plugin von Brightcove können Sie das Pulse SDK von Invidi in das Brightcove Native SDK für Android integrieren. Pulse ist eine Video-Werbeplattform. Informationen zu Kampagnen und Konfigurationsdetails finden Sie in deren Benutzerhandbuch.

Schritte

Sobald eine Kampagne auf der Pulse-Plattform erstellt wurde, können Sie das Pulse-Plug-in für das Brightcove Native SDK für Android verwenden. Befolgen Sie diese Schritte, um das Pulse-Plugin in Ihr Projekt zu integrieren:

  1. In Ihrem Modul build.gradle Datei, fügen Sie die Pulse-Plugin-Abhängigkeit hinzu.

    dependencies {
        implementation 'com.brightcove.player:android-pulse-plugin:6.12.0'
    }
  2. Laden Sie die . herunter Pulse SDK .aar-Datei.

  3. In deiner App/Libs Ordner, öffnen Sie den build.gradle Datei aus Ihrem Modul. Ändern Sie Folgendes:

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
    }
  4. In deiner MainActivity.java Datei, initialisieren Sie das Pulse Plugin, indem Sie a . instanziieren PulseComponent mit der Pulse-Host-URL, die für Ihre Kampagne erstellt wurde.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // ...
        // Creating pulse component
        PulseComponent pulseComponent = new PulseComponent(
                "your pulse host url",
                brightcoveVideoView.getEventEmitter(),
                brightcoveVideoView);
        // ...
    }
  5. Stellen Sie die PulseComponent Hörer.

    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. Implementieren Sie die onCreatePulseSession Methode, die a . erstellt PulseSession und gibt es zurück an die PulseComponent. Es gibt drei Parameter:

    • Der Pulswirt
    • Die Inhaltsmetadateneinstellungen
    • Die Anfrageeinstellungen

    @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. Implementieren Sie die onOpenClickthrough Methode, die aufgerufen wird, wenn die erfahren Sie mehr -Schaltfläche einer linearen Anzeige angeklickt wird. Eine typische Aktion für diesen Rückruf besteht darin, den Browser mit der erwarteten URL zu öffnen.

    @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. Spielen Sie Ihre Inhalte ab

    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();
      }
    });

Pulspause-Werbung

Wenn die Pulse-Kampagne "Pause Ads" konfiguriert hat, zeigt das Pulse-Plugin dem Benutzer an, wenn der Inhalt pausiert ist.

Fehlerbehandlung

Alle Fehler werden dem Entwickler mithilfe des EventType.AD_ERROR-Ereignisses angezeigt, wie unten gezeigt:

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

UI-Anpassung

Intern bläst das Pulse-Plugin die PulseAdView Verwendung der R.layout.pulse_ad_view Layout-ID. Für ein anderes Layout können Sie eine Layoutdatei mit demselben Namen erstellen und diese zum Auflösung/Layout Verzeichnis. Dies überschreibt das Standardlayout.

Verwenden Sie die folgenden IDs, um die Standardwerte zu ersetzen:

Komponentenansichten
Komponentenansichten
Index Ansichtstyp Ansichts-ID
EIN Textvorschau pulse_ad_number_view
B Textvorschau pulse_ad_countdown_view
C Textvorschau pulse_ad_name_view
D Textvorschau pulse_ad_learn_more_view
E Textvorschau pulse_skip_ad_view

Vollständiges Codebeispiel

Hier ist ein vollständiges Codebeispiel für die Verwendung des Pulse-Plug-ins mit dem Native SDK für Android.

Aktivität

Hier ist ein Beispiel für den vollständigen Aktivitätscode:

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();
        }
      });
    }
  }

Layout

Hier ist ein Beispiel für den Layoutcode für die 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>