Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for Seller-Defined Audiences for First Party Data #366

Merged
merged 3 commits into from
Mar 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public abstract class AdUnit {
private final Map<String, Set<String>> contextDataDictionary;
private final Set<String> contextKeywordsSet;
private ContentObject content;
private final ArrayList<DataObject> userDataObjects = new ArrayList<>();

private String pbAdSlot;

Expand Down Expand Up @@ -173,7 +174,7 @@ public void fetchDemand(@NonNull Object adObj, @NonNull OnCompleteListener liste

if (Util.supportedAdObject(adObj)) {
fetcher = new DemandFetcher(adObj);
RequestParams requestParams = new RequestParams(configId, adType, sizes, contextDataDictionary, contextKeywordsSet, minSizePerc, pbAdSlot, bannerParameters, videoParameters, content);
RequestParams requestParams = new RequestParams(configId, adType, sizes, contextDataDictionary, contextKeywordsSet, minSizePerc, pbAdSlot, bannerParameters, videoParameters, content, userDataObjects);
if (this.adType.equals(AdType.NATIVE)) {
requestParams.setNativeRequestParams(((NativeAdUnit) this).params);
}
Expand Down Expand Up @@ -249,11 +250,26 @@ public void addContextKeywords(Set<String> keywords) {
/**
* This method obtains the content for adunit, content, in which impression will appear
*/
// TODO: Rename to set
public void addContent(ContentObject content) {
public void setAppContent(ContentObject content) {
this.content = content;
}

public ContentObject getAppContent() {
return content;
}

public void addUserData(DataObject dataObject) {
userDataObjects.add(dataObject);
}

public ArrayList<DataObject> getUserData() {
return userDataObjects;
}

public void clearUserData() {
userDataObjects.clear();
}

/**
* This method allows to remove specific context keyword from adunit context targeting
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.prebid.mobile;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.json.JSONArray;
import org.json.JSONException;
Expand Down Expand Up @@ -73,7 +74,7 @@ public class ContentObject {
/**
* Array of IAB content categories that describe the content producer.
*/
@Nullable
@NonNull
private ArrayList<String> categories = new ArrayList<>();

/**
Expand Down Expand Up @@ -145,14 +146,14 @@ public class ContentObject {
/**
* Additional content data.
*/
@Nullable
private ArrayList<ContentDataObject> contentDataObjects = new ArrayList<>();
@NonNull
private ArrayList<DataObject> dataObjects = new ArrayList<>();

/**
* This object defines the producer of the content in which the ad will be shown.
*/
@Nullable
private ContentProducerObject contentProducerObject;
private ProducerObject producerObject;

/**
* @return JSONObject if at least one parameter was set; otherwise null.
Expand Down Expand Up @@ -183,21 +184,21 @@ public JSONObject getJsonObject() {
result.putOpt("language", language);
result.putOpt("embeddable", embeddable);

if (contentProducerObject != null) {
result.putOpt("producer", contentProducerObject.getJsonObject());
if (producerObject != null) {
result.putOpt("producer", producerObject.getJsonObject());
}

if (categories != null && !categories.isEmpty()) {
if (!categories.isEmpty()) {
JSONArray jsonCategories = new JSONArray();
for (String category : categories) {
jsonCategories.put(category);
}
result.putOpt("cat", jsonCategories);
}

if (contentDataObjects != null && !contentDataObjects.isEmpty()) {
if (!dataObjects.isEmpty()) {
JSONArray dataJson = new JSONArray();
for (ContentDataObject dataObject : contentDataObjects) {
for (DataObject dataObject : dataObjects) {
dataJson.put(dataObject.getJsonObject());
}
result.put("data", dataJson);
Expand Down Expand Up @@ -303,18 +304,16 @@ public void setUrl(@Nullable String url) {
this.url = url;
}

public void addCategory(@Nullable String category) {
if (categories != null && category != null) {
categories.add(category);
}
public void addCategory(@NonNull String category) {
categories.add(category);
}

@Nullable
@NonNull
public ArrayList<String> getCategories() {
return categories;
}

public void setCategories(@Nullable ArrayList<String> categories) {
public void setCategories(@NonNull ArrayList<String> categories) {
this.categories = categories;
}

Expand Down Expand Up @@ -417,106 +416,33 @@ public void setEmbeddable(@Nullable Integer embeddable) {
this.embeddable = embeddable;
}

public void addContentDataObject(@Nullable ContentDataObject contentDataObject) {
if (contentDataObjects != null && contentDataObject != null) {
contentDataObjects.add(contentDataObject);
}
public void addData(@NonNull DataObject dataObject) {
dataObjects.add(dataObject);
}

@Nullable
public ArrayList<ContentDataObject> getContentDataObjects() {
return contentDataObjects;
@NonNull
public ArrayList<DataObject> getDataList() {
return dataObjects;
}

public void setContentDataObjects(@Nullable ArrayList<ContentDataObject> contentDataObjects) {
this.contentDataObjects = contentDataObjects;
public void setDataList(@NonNull ArrayList<DataObject> dataObjects) {
this.dataObjects = dataObjects;
}

@Nullable
public ContentProducerObject getContentProducerObject() {
return contentProducerObject;
public void clearDataList() {
dataObjects.clear();
}

public void setContentProducerObject(@Nullable ContentProducerObject contentProducerObject) {
this.contentProducerObject = contentProducerObject;
@Nullable
public ProducerObject getProducer() {
return producerObject;
}

public static class ContentDataObject {

/**
* Exchange-specific ID for the data provider.
*/
@Nullable
private String id;

/**
* Exchange-specific name for the data provider.
*/
@Nullable
private String name;

/**
* Segment objects are essentially key-value pairs that convey specific units of data.
*/
@Nullable
private ArrayList<ContentSegmentObject> segments = new ArrayList<>();

public JSONObject getJsonObject() {
JSONObject result = new JSONObject();

try {
result.putOpt("id", id);
result.putOpt("name", name);

if (segments != null && !segments.isEmpty()) {
JSONArray segmentsJson = new JSONArray();
for (ContentSegmentObject segment : segments) {
segmentsJson.put(segment.getJsonObject());
}
result.put("segment", segmentsJson);
}
} catch (JSONException exception) {
LogUtil.e("ContentObject", "Can't create json data content object.");
}

return result;
}

@Nullable
public String getId() {
return id;
}

public void setId(@Nullable String id) {
this.id = id;
}

@Nullable
public String getName() {
return name;
}

public void setName(@Nullable String name) {
this.name = name;
}

public void addSegment(ContentSegmentObject contentSegmentObject) {
if (segments != null) {
segments.add(contentSegmentObject);
}
}

@Nullable
public ArrayList<ContentSegmentObject> getSegments() {
return segments;
}

public void setSegments(@Nullable ArrayList<ContentSegmentObject> segments) {
this.segments = segments;
}
public void setProducer(@Nullable ProducerObject producerObject) {
this.producerObject = producerObject;
}

public static class ContentProducerObject {
public static class ProducerObject {

/**
* Content producer or originator ID.
Expand All @@ -533,8 +459,8 @@ public static class ContentProducerObject {
/**
* Array of IAB content categories that describe the content producer.
*/
@Nullable
private List<String> categories;
@NonNull
private ArrayList<String> categories = new ArrayList<>();

/**
* Highest level domain of the content producer (e.g., “producer.com”).
Expand All @@ -551,7 +477,7 @@ public JSONObject getJsonObject() {
result.putOpt("name", name);
result.putOpt("domain", domain);

if (categories != null && !categories.isEmpty()) {
if (!categories.isEmpty()) {
JSONArray categoriesJson = new JSONArray();
for (String category : categories) {
categoriesJson.put(category);
Expand Down Expand Up @@ -584,18 +510,16 @@ public void setName(@Nullable String name) {
this.name = name;
}

public void addCategory(@Nullable String category) {
if (category != null && categories != null) {
categories.add(category);
}
public void addCategory(@NonNull String category) {
categories.add(category);
}

@Nullable
@NonNull
public List<String> getCategories() {
return categories;
}

public void setCategories(@Nullable List<String> categories) {
public void setCategories(@NonNull ArrayList<String> categories) {
this.categories = categories;
}

Expand All @@ -610,67 +534,4 @@ public void setDomain(@Nullable String domain) {

}

public static class ContentSegmentObject {

/**
* ID of the data segment specific to the data provider.
*/
@Nullable
private String id;

/**
* Name of the data segment specific to the data provider.
*/
@Nullable
private String name;

/**
* String representation of the data segment value.
*/
@Nullable
private String value;

@Nullable
public JSONObject getJsonObject() {
JSONObject result = new JSONObject();

try {
result.putOpt("id", id);
result.putOpt("name", name);
result.putOpt("value", value);
} catch (JSONException exception) {
LogUtil.e("ContentObject", "Can't create json segment content object.");
}

return result;
}

@Nullable
public String getId() {
return id;
}

public void setId(@Nullable String id) {
this.id = id;
}

@Nullable
public String getName() {
return name;
}

public void setName(@Nullable String name) {
this.name = name;
}

@Nullable
public String getValue() {
return value;
}

public void setValue(@Nullable String value) {
this.value = value;
}
}

}
Loading