Skip to content

Mobile: UI/UX policy #6204

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

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open

Mobile: UI/UX policy #6204

wants to merge 10 commits into from

Conversation

YuriyVelichkoPI
Copy link
Contributor

Description

This doc will serve as a public spec of Mobile SDK UI/UX policy.

It describes how UI/UX is currently implemented. What is the default behaviour and how publishers can customize it if needed.

Eventually this doc will be changed if new UI/UX features are added to the SDK.

Publishers can use this doc in two ways:

  • Study the behaviour and customization options
  • Propose new policies and features.

🏷 Type of documentation

  • [ x] new examples

📋 Checklist

Closes prebid/prebid-mobile-ios#693

Copy link

netlify bot commented Aug 12, 2025

Deploy Preview for prebid-docs-preview ready!

Name Link
🔨 Latest commit 102f464
🔍 Latest deploy log https://app.netlify.com/projects/prebid-docs-preview/deploys/689b5a791c5e2f000845de44
😎 Deploy Preview https://deploy-preview-6204--prebid-docs-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

| Policy | Behavior | Customization |
|--------|-----------|---------------|
|`Reward`|**Prebid SDK** can signal the publisher about the type and quantity of reward coins.<br><br> If the `rwdd` or `reward` object is absent in the response, by **default,** SDK will send an empty object into the respective delegate method. |**Publisher** can set the type and number of coins in the `rwdd.reward` object.|
|`Completion`|**Prebid SDK** will inform the application once the reward time has come.<br><br> If the `rwdd` or `reward` object is absent in the response, by **default,** <br><br>- **banner:** SDK triggers the completion of the banner rewarded ad after **120 seconds** on the screen.<br><br>- **video:** SDK triggers the completion of the rewarded ad once the video playback is completed. But only if the ad doesn’t have an end card. | **Publisher** can set the rule when the SDK should inform the app about the reward time. Depending on the ad format, the publisher can set different rules using `rwdd.completion.banner` and `rwdd.completion.banner` objects respectively.|
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

set different rules using rwdd.completion.banner and rwdd.completion.banner

probably you meant rwdd.completion.banner and reward.completion.banner ?

| `Rotation` | **Prebid SDK** allows the rotation of the screen for the interstitial ads. The ad content is rotated according to the screen position. SDK changes the layout of the ad control elements according to the screen orientation. <br><br> **Publisher** has nothing to do in this operation, SDK doesn't provide any events to subscribe. | Currently, there is no way to customize the rotation behavior of the interstitial ads. Open an issue or PR for the alternative approach.|
| `Close Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. | **Publisher** can customize the default SDK behavior using the [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) feature.|
| `Learn More Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. |**Publisher** can customize the default SDK behavior using [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html)|
| `Tap` | **Prebid SDK** processes the clicks, actually taps, in different ways, respectively, depending on the type of the ad. <br> **The publisher** is responsible for handling `adwillopen` delegate. |Currently, there is no way to customize the way of processing the taps on the ad. Open an issue or PR for the alternative approach.|
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

handling adwillopen delegate.

should we add link to the doc as you did for banner autorefresh property ?

Copy link
Contributor

@muuki88 muuki88 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use relative links whenever possible, so that links also properly work in stage deployments 😊

I know we have a lot of <br> tags floating around in the docs. Usually I recommend to avoid those.

{: .table .table-bordered .table-striped }
| Policy | Behavior | Customization |
|--------|-----------|---------------|
|`Autorefresh`| **Prebid SDK** refreshes the banner ad every **60 seconds**. SDK makes the bid request and changes the current creative in the ad slot if the refresh has a bid. If there is no bid, the SDK will remove the current creative from the internal ad slot and notify the publisher using the respective delegate methods. <br><br> **Publisher** is responsible for removing or collapsing the ad slot in the application layout. |**iOS**: you can change the refresh interval using [refreshInterval](https://docs.prebid.org/prebid-mobile-ios/Classes/BannerView.html#/c:@M@PrebidMobile@objc(cs)BannerView(py)refreshInterval) property. <br><br> **Android**: you can change the refresh interval using the [setAutoRefreshDelay](https://docs.prebid.org/prebid-mobile-android/org/prebid/mobile/api/rendering/BannerView.html#setAutoRefreshDelay(int)) property.|
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
|`Autorefresh`| **Prebid SDK** refreshes the banner ad every **60 seconds**. SDK makes the bid request and changes the current creative in the ad slot if the refresh has a bid. If there is no bid, the SDK will remove the current creative from the internal ad slot and notify the publisher using the respective delegate methods. <br><br> **Publisher** is responsible for removing or collapsing the ad slot in the application layout. |**iOS**: you can change the refresh interval using [refreshInterval](https://docs.prebid.org/prebid-mobile-ios/Classes/BannerView.html#/c:@M@PrebidMobile@objc(cs)BannerView(py)refreshInterval) property. <br><br> **Android**: you can change the refresh interval using the [setAutoRefreshDelay](https://docs.prebid.org/prebid-mobile-android/org/prebid/mobile/api/rendering/BannerView.html#setAutoRefreshDelay(int)) property.|
|`Autorefresh`| **Prebid SDK** refreshes the banner ad every **60 seconds**. SDK makes the bid request and changes the current creative in the ad slot if the refresh has a bid. If there is no bid, the SDK will remove the current creative from the internal ad slot and notify the publisher using the respective delegate methods. <br><br> **Publisher** is responsible for removing or collapsing the ad slot in the application layout. |**iOS**: you can change the refresh interval using [refreshInterval](/prebid-mobile-ios/Classes/BannerView.html#/c:@M@PrebidMobile@objc(cs)BannerView(py)refreshInterval) property. <br><br> **Android**: you can change the refresh interval using the [setAutoRefreshDelay](/prebid-mobile-android/org/prebid/mobile/api/rendering/BannerView.html#setAutoRefreshDelay(int)) property.|

|--------|-----------|---------------|
| `Fullscreen` | **Prebid SDK** opens the interstitial ad in the fullscreen controller that overlaps all other application content. The iOS SDK support the SKOverlay format to show the interstitial ad for the bid with respective [configuration](https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/skadnetwork.md#bid-request). <br><br> **Publisher** is responsible for implementing the callbacks for interstitial ads and managing the app state according to the ad behavior. | Currently, there is no way to customize the appearance of the interstitial ads. Open an issue or PR for the alternative approach. |
| `Rotation` | **Prebid SDK** allows the rotation of the screen for the interstitial ads. The ad content is rotated according to the screen position. SDK changes the layout of the ad control elements according to the screen orientation. <br><br> **Publisher** has nothing to do in this operation, SDK doesn't provide any events to subscribe. | Currently, there is no way to customize the rotation behavior of the interstitial ads. Open an issue or PR for the alternative approach.|
| `Close Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. | **Publisher** can customize the default SDK behavior using the [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) feature.|
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `Close Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. | **Publisher** can customize the default SDK behavior using the [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) feature.|
| `Close Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. | **Publisher** can customize the default SDK behavior using the [Ad Experience Controls](/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) feature.|
| `Learn More Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. |**Publisher** can customize the default SDK behavior using [Ad Experience Controls](/prebid-mobile/modules/rendering/combined-ad-experience-controls.html)|
| `Tap` | **Prebid SDK** processes the clicks, actually taps, in different ways, respectively, depending on the type of the ad. <br> **The publisher** is responsible for handling [interstitialDidClickAd](/prebid-mobile-ios/Protocols/InterstitialAdUnitDelegate.html#/c:@M@PrebidMobile@objc(pl)InterstitialAdUnitDelegate(im)interstitialDidClickAd:) delegate method on iOS or [onAdClicked](/prebid-mobile-android/org/prebid/mobile/api/rendering/listeners/InterstitialAdUnitListener.html#onAdClicked(org.prebid.mobile.api.rendering.InterstitialAdUnit)) listener method on Android. |Currently, there is no way to customize the way of processing the taps on the ad. Open an issue or PR for the alternative approach.|
| `Clickthrough` | **Prebid SDK** opens a click URL in the external browser on the platform. Typically, it is the default browser for a particular user's device. <br> **Publisher** is responsible for processing SDK events and managing the application state, respectively. |Currently, customization is not available. Open an issue or PR for the alternative approach.|

| `Fullscreen` | **Prebid SDK** opens the interstitial ad in the fullscreen controller that overlaps all other application content. The iOS SDK support the SKOverlay format to show the interstitial ad for the bid with respective [configuration](https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/skadnetwork.md#bid-request). <br><br> **Publisher** is responsible for implementing the callbacks for interstitial ads and managing the app state according to the ad behavior. | Currently, there is no way to customize the appearance of the interstitial ads. Open an issue or PR for the alternative approach. |
| `Rotation` | **Prebid SDK** allows the rotation of the screen for the interstitial ads. The ad content is rotated according to the screen position. SDK changes the layout of the ad control elements according to the screen orientation. <br><br> **Publisher** has nothing to do in this operation, SDK doesn't provide any events to subscribe. | Currently, there is no way to customize the rotation behavior of the interstitial ads. Open an issue or PR for the alternative approach.|
| `Close Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. | **Publisher** can customize the default SDK behavior using the [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) feature.|
| `Learn More Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. |**Publisher** can customize the default SDK behavior using [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html)|
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `Learn More Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. |**Publisher** can customize the default SDK behavior using [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html)|
| `Learn More Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. |**Publisher** can customize the default SDK behavior using [Ad Experience Controls](/prebid-mobile/modules/rendering/combined-ad-experience-controls.html)|

| `Rotation` | **Prebid SDK** allows the rotation of the screen for the interstitial ads. The ad content is rotated according to the screen position. SDK changes the layout of the ad control elements according to the screen orientation. <br><br> **Publisher** has nothing to do in this operation, SDK doesn't provide any events to subscribe. | Currently, there is no way to customize the rotation behavior of the interstitial ads. Open an issue or PR for the alternative approach.|
| `Close Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. | **Publisher** can customize the default SDK behavior using the [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) feature.|
| `Learn More Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay. <br><br> **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. |**Publisher** can customize the default SDK behavior using [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html)|
| `Tap` | **Prebid SDK** processes the clicks, actually taps, in different ways, respectively, depending on the type of the ad. <br> **The publisher** is responsible for handling [interstitialDidClickAd](https://docs.prebid.org/prebid-mobile-ios/Protocols/InterstitialAdUnitDelegate.html#/c:@M@PrebidMobile@objc(pl)InterstitialAdUnitDelegate(im)interstitialDidClickAd:) delegate method on iOS or [onAdClicked](https://docs.prebid.org/prebid-mobile-android/org/prebid/mobile/api/rendering/listeners/InterstitialAdUnitListener.html#onAdClicked(org.prebid.mobile.api.rendering.InterstitialAdUnit)) listener method on Android. |Currently, there is no way to customize the way of processing the taps on the ad. Open an issue or PR for the alternative approach.|
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `Tap` | **Prebid SDK** processes the clicks, actually taps, in different ways, respectively, depending on the type of the ad. <br> **The publisher** is responsible for handling [interstitialDidClickAd](https://docs.prebid.org/prebid-mobile-ios/Protocols/InterstitialAdUnitDelegate.html#/c:@M@PrebidMobile@objc(pl)InterstitialAdUnitDelegate(im)interstitialDidClickAd:) delegate method on iOS or [onAdClicked](https://docs.prebid.org/prebid-mobile-android/org/prebid/mobile/api/rendering/listeners/InterstitialAdUnitListener.html#onAdClicked(org.prebid.mobile.api.rendering.InterstitialAdUnit)) listener method on Android. |Currently, there is no way to customize the way of processing the taps on the ad. Open an issue or PR for the alternative approach.|
| `Tap` | **Prebid SDK** processes the clicks, actually taps, in different ways, respectively, depending on the type of the ad. <br> **The publisher** is responsible for handling [interstitialDidClickAd](/prebid-mobile-ios/Protocols/InterstitialAdUnitDelegate.html#/c:@M@PrebidMobile@objc(pl)InterstitialAdUnitDelegate(im)interstitialDidClickAd:) delegate method on iOS or [onAdClicked](/prebid-mobile-android/org/prebid/mobile/api/rendering/listeners/InterstitialAdUnitListener.html#onAdClicked(org.prebid.mobile.api.rendering.InterstitialAdUnit)) listener method on Android. |Currently, there is no way to customize the way of processing the taps on the ad. Open an issue or PR for the alternative approach.|

| `Tap` | **Prebid SDK** processes the clicks, actually taps, in different ways, respectively, depending on the type of the ad. <br> **The publisher** is responsible for handling [interstitialDidClickAd](https://docs.prebid.org/prebid-mobile-ios/Protocols/InterstitialAdUnitDelegate.html#/c:@M@PrebidMobile@objc(pl)InterstitialAdUnitDelegate(im)interstitialDidClickAd:) delegate method on iOS or [onAdClicked](https://docs.prebid.org/prebid-mobile-android/org/prebid/mobile/api/rendering/listeners/InterstitialAdUnitListener.html#onAdClicked(org.prebid.mobile.api.rendering.InterstitialAdUnit)) listener method on Android. |Currently, there is no way to customize the way of processing the taps on the ad. Open an issue or PR for the alternative approach.|
| `Clickthrough` | **Prebid SDK** opens a click URL in the external browser on the platform. Typically, it is the default browser for a particular user's device. <br> **Publisher** is responsible for processing SDK events and managing the application state, respectively. |Currently, customization is not available. Open an issue or PR for the alternative approach.|
|`Playback`| **Prebid SDK** starts playback only when the ad appears on the app screen. Once the ad is removed or scrolled off the screen, the playback will be stopped. <br> <br> **Publisher** is responsible for removing or collapsing the ad slot in the application layout. |Currently, there is no public API to customize this behavior. Open an issue or PR for the alternative approach.|
|`Sound`| **Prebid SDK** Prebid SDK plays instream video with sound enabled. | **Publisher** can customize the default SDK behavior using [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
|`Sound`| **Prebid SDK** Prebid SDK plays instream video with sound enabled. | **Publisher** can customize the default SDK behavior using [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) |
|`Sound`| **Prebid SDK** Prebid SDK plays instream video with sound enabled. | **Publisher** can customize the default SDK behavior using [Ad Experience Controls](/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) |

|`Completion`|**Prebid SDK** will inform the application once the reward time has come.<br><br> If the `rwdd` or `reward` object is absent in the response, by **default,** <br><br>- **banner:** SDK triggers the completion of the banner rewarded ad after **120 seconds** on the screen.<br><br>- **video:** SDK triggers the completion of the rewarded ad once the video playback is completed. But only if the ad doesn’t have an end card. | **Publisher** can set the rule when the SDK should inform the app about the reward time. Depending on the ad format, the publisher can set different rules using `rwdd.completion.banner` and `rwdd.completion.video` objects respectively.|
|`Close`|**Prebid SDK** will close the interstitial controller with rewarded ad according to the configuration passed in the response.<br><br> If the `rwdd` or `reward` object is absent in the response, by **default,** SDK will display the **close button** on the interstitial once the completion criteria are met.| **Publisher** can set the rule on how the SDK should behave once the user earns the reward, and the interstitial ad can be dismissed from the app screen. <br><br>The `rwdd.close.postrewardtime` describes how much time the SDK should wait until performing the `action`. <br><br>The action itself is described in `rwdd.close.action` object. Currently, two actions are supported:<br><br>- `autoclose` means that the ad will be dismissed without user interaction.<br><br>- `closebutton` means that the SDK will display the close button on top of the ad, and the user will have to tap on it to dismiss the ad.|

Note: [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) of the rewarded ad can be configured in the same way as for the interstitial ad.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Note: [Ad Experience Controls](https://docs.prebid.org/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) of the rewarded ad can be configured in the same way as for the interstitial ad.
Note: [Ad Experience Controls](/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) of the rewarded ad can be configured in the same way as for the interstitial ad.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[DOC] Public policy for UI/UX appearance and behaviour
3 participants