Skip to content

Releases: solutionarchitectstech/mobile_sdk_release_ios

1.0.2

09 Dec 06:57
9350ccb
Compare
Choose a tag to compare
  • Extended customParams in the CreativeQuery 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

12 Aug 07:01
3df798e
Compare
Choose a tag to compare
  • Performance improvement.

1.0.0

22 Jul 07:12
a124af4
Compare
Choose a tag to compare

0.10.0

28 May 12:19
3836dbe
Compare
Choose a tag to compare
  • 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

25 Apr 08:43
dbb9281
Compare
Choose a tag to compare
  • Fix 'refresh' flow in the multi-impression
    • Implemented 'refresh' flow specific for multi-impression.
    • Each placement will be refreshed independently (based on 'refresh' value returned from server)
    • No batch-refreshing in multi-impression at all.

0.8.2

14 Mar 02:54
Compare
Choose a tag to compare
  • Bug fixes

0.8.1

01 Feb 01:18
fa9261b
Compare
Choose a tag to compare
  • 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

20 Dec 14:58
51aff5d
Compare
Choose a tag to compare
  • 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 common CreativeView / 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 embedded WebKit > 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:
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

12 Oct 13:01
989974d
Compare
Choose a tag to compare
  • 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

28 Sep 10:39
cc1305b
Compare
Choose a tag to compare
  • New public property advertiser for ProductCreative. You can access it like following:
extension SingleProductCreativeViewController: ProductCreativeDelegate {

    ...
 
    func onLoadContentSuccess(entity: ProductCreativeEntity) {
       entity.advertiser //  <-- advertiser string (nullable)
    }
    
    ...
}