Integrating FeedAds in Android
This guide explains different ways to include FeedAds into your app.
You need to install & initialize the SDK based on the Getting Started guide before the following methods will work.
Basics
How you integrate FeedAds into your app, is completely up to you.
There is just one important thing to remember:
There must be only one FeedAdView
instance in the view hierarchy of an activity.
If you include multiple views at a time, it will cause unexpected behavior.
Quick Integration
This will take you about 5 to 15 minutes, depending on the complexity of your layout.
By default, FeedAds start loading and displaying as soon as a FeedAdView
becomes visible in your layout.
All you need to do, is to include it in your layout.
<com.feedad.android.FeedAdView android:id="@+id/texture_view" android:layout_width="match_parent" android:layout_height="wrap_content" app:feedadPlacementId="your-placement-id" />
Placement ID?
You can choose placement IDs yourself. A placement ID should be named after the ad position inside your product.
For example, if you want to display an ad inside a list of news articles, you could name it "ad-news-overview".
A placement ID may consist of lowercase a-z
, 0-9
, -
and _
. You do not have to manually create the placement IDs before using them.
Just specify them within the code, and they will appear in the FeedAd admin panel after the first request.
Learn more about Placement IDs and how they are grouped to play the same Creative
Ads within lists
FeedAds are meant to be displayed within scrollable content. If your layout is built using RecyclerView
or other list views
that support the display of multiple view types you can just add FeedAdView
as another view type.
Depending on the size of your content views and the screen size you should make sure that there will be only one FeedAdView
visible at any time.
Check the sizing behavior to learn how the view is measured.
Advanced Integration
If you want to make sure that an ad can be displayed before integrating a view into your layout, please follow this guide. Depending on the complexity of your layouts and the amount of activities of your app, this might take you about 30 minutes per activity.
1. Listen for Ad Loaded Event
Create a private class MyFeedAdListener
implementing FeedAdListener
in your activity:
public class MyActivity extends Activity { private FeedAdListener feedAdListener = new MyFeedAdListener(); /* ... */ private class MyFeedAdListener implements FeedAdListener { @Override public void onAdLoaded(String placementId) { } @Override public void onTagComplete(String placementId) { } @Override public void onPlacementComplete(String placementId) { } @Override public void onOpened(String placementId) { } @Override public void onError(String placementId, FeedAdError error) { } } }
2. Register the Listener
In your activity, extend the following methods:
public class MyActivity extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); FeedAd.addListener(feedAdListener); } @Override protected void onDestroy() { FeedAd.removeListener(feedAdListener); super.onDestroy(); } }
3. Create the Ad View
Create a new instance of FeedAdView
inside the onAdLoaded
method of the listener and add it to your view hierarchy:
@Override public void onAdLoaded(String placementId) { FeedAdView adView = new FeedAdView(MyActivity.this, placementId); //add view to content hierarchy }
4. Request an Ad
Manually request a placement:
public class MyActivity extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); FeedAd.addListener(feedAdListener); //manually request a new ad if there is none running for the placement if (!FeedAd.isActive(yourPlacementId) && !FeedAd.isRequesting(yourPlacementId)) { FeedAd.requestAd(yourPlacementId); } } /* ... */ }
A manual ad request via FeedAd.requestAd(...)
always starts a new request and stops the
currently playing ad, regardless if the requested Placement ID is of the same Placement Group.
Finished
Once the view created in step 3 becomes visible, it will start playing the ad.
Continuous Ad Playback
FeedAds support continuous playback across screen changes, as described in FeedAd Behavior.
To benefit from this behavior for your app, make sure that your placements are linked to the same placement group and follow the integration instructions above for each of your screens.
Passing ads between screens, is then handled by the FeedAd SDK.
FeedAdView Sizing Behavior
The FeedAdView
size is based on its layout_width
and layout_height
attributes depending on
the aspect ratio of the current ad. If no ad is playing, the fallback aspect ratio is 16:9.
Width | Height | Resulting size |
---|---|---|
match_parent |
match_parent |
Width and height of parent element. Content video is centered and scaled to fit closest side. |
match_parent |
wrap_content |
Width of parent element. Height is calculated based on aspect ratio of content video. |
wrap_content |
match_parent |
Height of parent element. Width is calculated based on aspect ratio of content video. |
wrap_content |
wrap_content |
Width and height of content video size. |
specific_dp |
specific_dp |
Width and height as specified. Content video is centered and scaled to fit closest side. |
Using FeedAds as Part of an Ad Mediation Waterfall
FeedAds have been designed with ad mediation waterfalls in mind.
We have implemented and tested FeedAd integration in major mediation networks. Read the mediation documentation to learn more about supported networks or take a look into our example app.
FeedAd will not automatically request more ads under the following conditions:
- There is no fill for the placement.
- All ads of a placement were successfully played.
- An error occurred while playing an ad.
Implement the FeedAdListener
to get notified when one of those events occurs to continue your mediation:
class MyFeedAdListener implements FeedAdListener { /* ... */ @Override public void onPlacementComplete(String placementId) { // TODO: remove all FeedAdViews // TODO: unregister all FeedAdListeners } @Override public void onError(String placementId, FeedAdError error) { boolean isNoFill = error.getErrorCode() == FeedAdErrorCode.NO_FILL; // TODO: remove all FeedAdViews // TODO: unregister all FeedAdListeners } }
Ad Request Options
You can create an optional request options object, that you can specify alongside the ad request. This object can contain information about the ad's relation to the content of your ad.
You can specify the following options:
Option | Description |
---|---|
Content URL | A deep-link that opens the screen on which the ad is shown from an external origin. |
Placement Context | The position of the ad in relation to the main content of the screen. For example, if it is a pre-roll ad shown before the use can access the content. |
Example:
AdRequestOptions requestOptions = new AdRequestOptions.Builder() .setContentUrl("deeplink//to/your/content") .setPlacementContext(PlacementContext.PRE_ROLL) .create();
You can pass those options as a second parameter to a manual ad request:
FeedAd.requestAd(yourPlacementId, requestOptions);