Skip to content

Commit

Permalink
feat: introduce new multiformat API #688
Browse files Browse the repository at this point in the history
  • Loading branch information
ValentinPostindustria committed Sep 19, 2023
1 parent 0c59f50 commit 1c140a0
Show file tree
Hide file tree
Showing 14 changed files with 561 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;

import org.jetbrains.annotations.NotNull;
import org.prebid.mobile.api.data.AdFormat;
import org.prebid.mobile.api.data.FetchDemandResult;
import org.prebid.mobile.api.exceptions.AdException;
Expand Down Expand Up @@ -57,12 +58,16 @@ public abstract class AdUnit {
@Nullable
protected Object adObject;

AdUnit(@NonNull String configId, @NonNull EnumSet<AdFormat> adTypes) {
public AdUnit(@NotNull String configId) {
configuration.setConfigId(configId);
configuration.setAdFormats(adTypes);
configuration.setIsOriginalAdUnit(true);
}

AdUnit(@NonNull String configId, @NonNull EnumSet<AdFormat> adTypes) {
this(configId);
configuration.setAdFormats(adTypes);
}

/**
* @deprecated Please use setAutoRefreshInterval() in seconds!
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@

import androidx.annotation.Nullable;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
* Describes an <a href="https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf">OpenRTB</a> banner object
Expand All @@ -15,6 +17,12 @@ public class BannerParameters {
*/
@Nullable
private List<Signals.Api> api;
@Nullable
private Set<AdSize> adSizes;
@Nullable
private Integer interstitialMinWidthPercentage;
@Nullable
private Integer interstitialMinHeightPercentage;

@Nullable
public List<Signals.Api> getApi() {
Expand All @@ -25,4 +33,33 @@ public void setApi(@Nullable List<Signals.Api> api) {
this.api = api;
}

@Nullable
public Set<AdSize> getAdSizes() {
return adSizes;
}

public void setAdSizes(@Nullable Set<AdSize> adSizes) {
if (adSizes != null) {
this.adSizes = new HashSet<>(adSizes);
}
}

@Nullable
public Integer getInterstitialMinWidthPercentage() {
return interstitialMinWidthPercentage;
}

public void setInterstitialMinWidthPercentage(@Nullable Integer interstitialMinWidthPercentage) {
this.interstitialMinWidthPercentage = interstitialMinWidthPercentage;
}

@Nullable
public Integer getInterstitialMinHeightPercentage() {
return interstitialMinHeightPercentage;
}

public void setInterstitialMinHeightPercentage(@Nullable Integer interstitialMinHeightPercentage) {
this.interstitialMinHeightPercentage = interstitialMinHeightPercentage;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package org.prebid.mobile;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.json.JSONObject;
import org.prebid.mobile.configuration.NativeAdUnitConfiguration;

import java.util.List;

/**
* For details of the configuration of native parameters, please check this documentation:
* https://www.iab.com/wp-content/uploads/2018/03/OpenRTB-Native-Ads-Specification-Final-1.2.pdf
*/
public class NativeParameters {

private final NativeAdUnitConfiguration nativeConfiguration = new NativeAdUnitConfiguration();

public NativeParameters(
@NonNull List<NativeAsset> assets
) {
for (NativeAsset asset : assets) {
nativeConfiguration.addAsset(asset);
}
}

@Nullable
public NativeAdUnitConfiguration getNativeConfiguration() {
return nativeConfiguration;
}

public void addEventTracker(NativeEventTracker tracker) {
nativeConfiguration.addEventTracker(tracker);
}

public void setContextType(NativeAdUnit.CONTEXT_TYPE type) {
nativeConfiguration.setContextType(type);
}

public void setContextSubType(NativeAdUnit.CONTEXTSUBTYPE type) {
nativeConfiguration.setContextSubtype(type);
}

public void setPlacementType(NativeAdUnit.PLACEMENTTYPE placementType) {
nativeConfiguration.setPlacementType(placementType);
}

public void setPlacementCount(int placementCount) {
nativeConfiguration.setPlacementCount(placementCount);
}

public void setSeq(int seq) {
nativeConfiguration.setSeq(seq);
}

public void setAUrlSupport(boolean support) {
nativeConfiguration.setAUrlSupport(support);
}

public void setDUrlSupport(boolean support) {
nativeConfiguration.setDUrlSupport(support);
}

public void setPrivacy(boolean privacy) {
nativeConfiguration.setPrivacy(privacy);
}

public void setExt(Object jsonObject) {
if (jsonObject instanceof JSONObject) {
nativeConfiguration.setExt((JSONObject) jsonObject);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,9 @@ public enum ResultCode {
/**
* Missing assets requirement for native ad unit
*/
INVALID_NATIVE_REQUEST
INVALID_NATIVE_REQUEST,
/**
* Check @{@link org.prebid.mobile.api.original.PrebidRequest} object that you put into fetchDemand().
*/
INVALID_PREBID_REQUEST_OBJECT
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,25 @@

import android.os.Bundle;
import android.text.TextUtils;

import androidx.annotation.CheckResult;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.lang.reflect.Method;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;

public class Util {

Expand Down Expand Up @@ -344,7 +354,7 @@ static void apply(HashMap<String, String> bids, Object adObj) {
}
}

static void saveCacheId(
public static void saveCacheId(
@Nullable String cacheId,
Object adObject
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ public VideoParameters(List<String> mimes) {
@Nullable
private Integer linearity;

@Nullable
private AdSize adSize;


//Getters and setters
@Nullable
public List<Signals.Api> getApi() {
Expand Down Expand Up @@ -183,4 +187,14 @@ public Integer getLinearity() {
public void setLinearity(@Nullable Integer linearity) {
this.linearity = linearity;
}

@Nullable
public AdSize getAdSize() {
return adSize;
}

public void setAdSize(@Nullable AdSize adSize) {
this.adSize = adSize;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package org.prebid.mobile.api.data;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.prebid.mobile.ResultCode;

import java.util.Map;

public class BidInfo {

@NonNull
private ResultCode resultCode;
@Nullable
private Map<String, String> targetingKeywords;
@Nullable
private String nativeCacheId;
@Nullable
private Integer expirationTimeSeconds;

public BidInfo(
@NonNull ResultCode resultCode,
@Nullable Map<String, String> targetingKeywords
) {
this.resultCode = resultCode;
this.targetingKeywords = targetingKeywords;
}

public void setNativeResult(
String nativeCacheId,
Integer expirationTimeSeconds
) {
this.nativeCacheId = nativeCacheId;
this.expirationTimeSeconds = expirationTimeSeconds;
}

@NonNull
public ResultCode getResultCode() {
return resultCode;
}

@Nullable
public Map<String, String> getTargetingKeywords() {
return targetingKeywords;
}

@Nullable
public String getNativeCacheId() {
return nativeCacheId;
}

@Nullable
public Integer getExpirationTimeSeconds() {
return expirationTimeSeconds;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package org.prebid.mobile.api.original;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.jetbrains.annotations.NotNull;
import org.prebid.mobile.AdSize;
import org.prebid.mobile.AdUnit;
import org.prebid.mobile.BannerParameters;
import org.prebid.mobile.NativeParameters;
import org.prebid.mobile.OnCompleteListener;
import org.prebid.mobile.ResultCode;
import org.prebid.mobile.VideoParameters;
import org.prebid.mobile.api.data.AdFormat;
import org.prebid.mobile.api.exceptions.AdException;
import org.prebid.mobile.configuration.NativeAdUnitConfiguration;
import org.prebid.mobile.rendering.bidding.data.bid.BidResponse;
import org.prebid.mobile.rendering.bidding.listeners.BidRequesterListener;
import org.prebid.mobile.rendering.models.AdPosition;
import org.prebid.mobile.rendering.models.PlacementType;

class ConfigurableAdUnit extends AdUnit {

@Nullable
private BidResponse bidResponse;

public ConfigurableAdUnit(@NotNull String configId) {
super(configId);
}

@Override
protected BidRequesterListener createBidListener(OnCompleteListener originalListener) {
return new BidRequesterListener() {
@Override
public void onFetchCompleted(BidResponse response) {
bidResponse = response;
originalListener.onComplete(ResultCode.SUCCESS);
}

@Override
public void onError(AdException exception) {
bidResponse = null;
originalListener.onComplete(convertToResultCode(exception));
}
};
}

public void setConfigurationBasedOnRequest(
@NonNull PrebidRequest request
) {
if (request.isInterstitial()) {
configuration.setAdPosition(AdPosition.FULLSCREEN);
}

BannerParameters bannerParameters = request.getBannerParameters();
if (bannerParameters != null) {
if (request.isInterstitial()) {
configuration.addAdFormat(AdFormat.INTERSTITIAL);

Integer minWidth = bannerParameters.getInterstitialMinWidthPercentage();
Integer minHeight = bannerParameters.getInterstitialMinHeightPercentage();
if (minWidth != null && minHeight != null) {
configuration.setMinSizePercentage(new AdSize(minWidth, minHeight));
}
} else {
configuration.addAdFormat(AdFormat.BANNER);
}

configuration.setBannerParameters(bannerParameters);
configuration.addSizes(bannerParameters.getAdSizes());
}

VideoParameters videoParameters = request.getVideoParameters();
if (videoParameters != null) {
configuration.addAdFormat(AdFormat.VAST);

if (request.isInterstitial()) {
configuration.setPlacementType(PlacementType.INTERSTITIAL);
}
if (request.isRewarded()) {
configuration.setRewarded(true);
}

configuration.setVideoParameters(videoParameters);
configuration.addSize(videoParameters.getAdSize());
}

NativeParameters nativeParameters = request.getNativeParameters();
if (nativeParameters != null) {
configuration.addAdFormat(AdFormat.NATIVE);

NativeAdUnitConfiguration nativeConfig = nativeParameters.getNativeConfiguration();
configuration.setNativeConfiguration(nativeConfig);
}
}

@Nullable
public BidResponse getBidResponse() {
return bidResponse;
}

}
Loading

0 comments on commit 1c140a0

Please sign in to comment.