Releases: solutionarchitectstech/mobile_sdk_release_ios
1.0.2
-
Extended
customParams
in theCreativeQuery
and in the ``. You can pass complex JSON object now. See more details in the CreativeQuery. ProductCreativeQuery. An example:creativeView.query = CreativeQuery( sizes: [sizes.randomElement()!], markupType: .BANNER, customParams: [ "object": [ "id": "ID00001", "name": "MyObjectName" ], "string": "MyString", "int": 199, "float": 3.14, "objectList": [ [ "property": "item", "value": "lego bricks" ], [ "property": "amount", "value": 3001 ], [ "property": "price", "value": 12.99 ] ], "integerList": [11, 12, -13, -14], "nonTypicalList": ["some string", 3.14, 199], "emptyList": [] ] )
1.0.1
1.0.0
- Implemented OpenRTB 2.6 as a "Layer-3 Transaction" protocol based on AdCOM v1.0 specification. SDK currently supports the following transaction protocols (to retrieve Ads):
- CUSTOM - Internal custom protocol (used by default).
- OPEN_RTB - OpenRTB 2.6
- See more details in the SDK doc: https://docs.ad4tech.net/sdk-ads-ios.html
- Bug fixes.
0.10.0
- Creatives in dynamic lists:
- Fixed some memory leaks while runtime scrolling in dynamic lists of creatives.
CreativeHolder
has been removed from SDK. See SingleCollectionCreativeViewController.swift as an example how to implement dynamic lists now.- Fixed BUG: Sometimes, there are wrong banner sizes shown in scrollable cells.
- VAST fixes:
- Concurrency optimisation while VAST loading/parsing/flow.
- VAST tracking is fixed to work in parallel job.
- Fixed some bugs while VAST parsing.
- Designated initializers in the
CreativeView
have been marked as public (due UIKit specification). - Removed
CreativeView.closeAxis
property. - BUG fixes in API calls.
- 'Refresh' feature in multi-impressions. Currently, each creative is refreshed independently, based on 'refresh' value retrieved from server. No batch refreshing (per all creatives) anymore.
0.9.0
0.8.2
0.8.1
- Fixed BUG (loosing css in fullscreen mode of HTMLBanner)
- Fixed BUG: Linear Creative (obtained from wrapped VAST) wasn't merged into final Creative. As a result, medias (obtained from wrapped VAST) were never shown in the player.
- Fixed BUG (concurrency related) in the 'refresh' flow of common creative.
- 'Close' banner button has been fixed. COUNTDOWN timer is shown only if
skipTime
value retrieved from server response. In this case we show timer first then close button. Otherwise, close button never be shown at all. - Fixed BUG in 'refresh' capability if multi-impression request (the minimal 'refresh' value is used from bids collection retrieved from server).
- Fixed BUGs specific for adaptive UI (in common creative view):
scaleToFit
,isScrollEnabled
. - Fixed BUG specific for
fullscreenMode
in banner views. - Fixed BUG in common creative view (was shown HTML Banner instead of Image Banner even if IMAGE banner retrieved from server response).
- Fixed BUG in Media Banner view - 'skipTime' now is connected to value retrieved from server (instead of previously hardcoded 5.0 sec).
0.8.0
-
Renaming
creativeUrl
->bannerUrl
in the SDK init options. -
Renaming
productCreativeUrl
->productUrl
in the SDK init options.
TechAdvertising.initialize(options: TechAdvertisingOptions(
sessionId: "YOUR_SESSION_ID",
storeUrl: "https://apps.apple.com/us/app/myapp/id12345678",
initConfig: .init(
core: .init(
bannerUrl: "YOUR_BANNER_CREATIVE_ENDPOINT",
productUrl: "YOUR_PRODUCT_CREATIVE_ENDPOINT"
)
),
remoteConfigUrl = "https://my.configuration.server.com"
debugMode: true,
httpHeaders: [
"Authorization": "Bearer CUSTOM_AUTH_TOKEN",
"User-Agent": "YOUR_CUSTOM_USER_AGENT"
]
))
-
Removed OpenRTB protocol from Standard SDK distribution.
-
Common Banner Creative: We combined
HTMLBannerView / HTMLBannerCreative
,ImageBannerView / ImageBannerCreative
,MediaView / MediaCreative
to one commonCreativeView / Creative
solution. Now, SDK constructs UI layout based on type of creative which retrieved from backend. Host developer no need to manage different creatives manually in the code. SDK supports the following creative types automatically (transparently for host developer):- HTML Banner (html specific ad) - SDK injects HTML page into
CreativeView
.
Underhood, there is embeddedWebKit > WKWebView
(embedded browser engine) where HTML banner page loaded and rendered in. - (Experimental) Image Banner (image specific ad) - this kind of banner uses simple image underhood. No embedded browser engine at all.
- Media Banner (video, audio) - as a content
CreativeView
uses Ads media content based on VAST specification. - Here is an example how to use common Banner Creative API now:
- HTML Banner (html specific ad) - SDK injects HTML page into
class MyViewController: UIViewController {
@IBOutlet weak var creativeView: CreativeView!
private var creative: Creative!
override func viewDidLoad() {
super.viewDidLoad()
// Optionally, you can enable or disable adaptive UI using the following property.
// This option fits banner content to aspect ratio of your `CreativeView` frame.
// 'true' is used by default.
creativeView.scaleToFit = true
// Optionally, you can enable or disable vertical and horizontal scrolling
// of HTML content inside of `CreativeView` frame.
// Eg: if you use complex HTML content as a banner creative, but your
// app UI doesn't provide enough frame size to show whole HTML content.
// So, you can enable this option to give capability to your users to scroll
// the HTML content to see it.
// 'false' is used by default.
creativeView.isScrollEnabled = false
// Optionally, you can setup the axis which used to collapse (to hide) a banner
// if any error occurred or if creative is closed.
// There are .vertical, .horizontal available values.
creativeView.closeAxis = .vertical
// Let's setup creative query
self.creativeView.query = CreativeQuery(
placementId: "YOUR_PLACEMENT_ID",
sizes: [SizeEntity(width: 260, height: 106)],
floorPrice: 2.0,
currency: "RUB",
customParams: [
"skuId": "LG00001",
"skuName": "Leggo bricks (speed boat)",
"category": "Kids",
"subCategory": "Lego",
"gdprConsent": "CPsmEWIPsmEWIABAMBFRACBsABEAAAAgEIYgACJAAYiAAA.QRXwAgAAgivA",
"ccpa": "1YNN",
"coppa": "1"
]
)
// Let's init Creative controller
self.creative = .init(creativeViews: [creativeView])
// Here, we setup creative delegate
self.creative.delegate = self
// Finally, let's load creatives
self.creative.load()
}
}
extension MyViewController: CreativeDelegate {
public func onLoadDataSuccess(creativeView: CreativeView) {
let placementId = creativeView.query?.placementId
print("Creative.onLoadDataSuccess[\(String(describing: placementId))]")
}
public func onLoadDataFail(creativeView: CreativeView, error: Error) {
let placementId = creativeView.query?.placementId
print("Creative.onLoadDataFail[\(String(describing: placementId))]: \(error.localizedDescription)")
}
public func onLoadContentSuccess(creativeView: CreativeView) {
let placementId = creativeView.query?.placementId
print("Creative.onLoadContentSuccess[\(String(describing: placementId))]")
}
public func onLoadContentFail(creativeView: CreativeView, error: Error) {
let placementId = creativeView.query?.placementId
print("Creative.onLoadContentFail[\(String(describing: placementId))]: \(error.localizedDescription)")
}
public func onNoAdContent(creativeView: CreativeView) {
let placementId = creativeView.query?.placementId
print("Creative.onNoAdContent[\(String(describing: placementId))]")
}
public func onClose(creativeView: CreativeView) {
let placementId = creativeView.query?.placementId
print("Creative.onClose[\(String(describing: placementId))]")
}
}
NOTICE: See detailed info in the official doc: https://docs.ad4tech.net/sdk-ads-ios.html
0.7.3
- Implemented (redesigned) MediaCreative. Non @experimental at this moment.
- Improvements in the UI of MediaPlayer.
- Added support for VAST version 4.X
- Improvements in the public API (callbacks), specific for BannerCreative, ProductCreative, MediaCreative as well.
0.7.2
- New public property
advertiser
forProductCreative
. You can access it like following:
extension SingleProductCreativeViewController: ProductCreativeDelegate {
...
func onLoadContentSuccess(entity: ProductCreativeEntity) {
entity.advertiser // <-- advertiser string (nullable)
}
...
}