Skip to content

Commit

Permalink
Release new version: 5.0.21
Browse files Browse the repository at this point in the history
runner authored and runner committed Nov 24, 2022
1 parent 1bb1d91 commit ae3486a
Showing 59 changed files with 1,565 additions and 3,423 deletions.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -58,7 +58,7 @@
</data>
<key>Info.plist</key>
<data>
UC30bI7c6k0uanEVuRf8PBhEUOk=
gP5XSViFaQ1TLkB5UiddfGTtZYY=
</data>
<key>Modules/module.modulemap</key>
<data>
14 changes: 7 additions & 7 deletions Frameworks/TeadsSDK.xcframework/Info.plist
Original file line number Diff line number Diff line change
@@ -6,32 +6,32 @@
<array>
<dict>
<key>LibraryIdentifier</key>
<string>ios-arm64_i386_x86_64-simulator</string>
<string>ios-arm64_armv7</string>
<key>LibraryPath</key>
<string>TeadsSDK.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>i386</string>
<string>x86_64</string>
<string>armv7</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>LibraryIdentifier</key>
<string>ios-arm64_armv7</string>
<string>ios-arm64_i386_x86_64-simulator</string>
<key>LibraryPath</key>
<string>TeadsSDK.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>armv7</string>
<string>i386</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)
// Generated by Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
#ifndef TEADSSDK_SWIFT_H
#define TEADSSDK_SWIFT_H
#pragma clang diagnostic push
@@ -186,6 +186,13 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
# define SWIFT_EXTERN extern "C"
# else
# define SWIFT_EXTERN extern
# endif
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
@@ -301,7 +308,6 @@ SWIFT_CLASS("_TtC8TeadsSDK18ContainerComponent")



@class NSNumber;
@class UIImage;

/// Native image component containing image url
@@ -1139,7 +1145,7 @@ SWIFT_CLASS("_TtC8TeadsSDK14VideoComponent")
#endif

#elif defined(__ARM_ARCH_7A__) && __ARM_ARCH_7A__
// Generated by Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)
// Generated by Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
#ifndef TEADSSDK_SWIFT_H
#define TEADSSDK_SWIFT_H
#pragma clang diagnostic push
@@ -1325,6 +1331,13 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
# define SWIFT_EXTERN extern "C"
# else
# define SWIFT_EXTERN extern
# endif
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
@@ -1440,7 +1453,6 @@ SWIFT_CLASS("_TtC8TeadsSDK18ContainerComponent")



@class NSNumber;
@class UIImage;

/// Native image component containing image url
Binary file not shown.
Binary file not shown.

This file was deleted.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)
// swift-compiler-version: Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
// swift-module-flags: -target arm64-apple-ios10.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name TeadsSDK
import ARKit
import AVFoundation
Binary file not shown.

This file was deleted.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)
// swift-compiler-version: Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
// swift-module-flags: -target armv7-apple-ios10.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name TeadsSDK
import ARKit
import AVFoundation
Binary file not shown.

This file was deleted.

Binary file not shown.
Binary file not shown.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)
// Generated by Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
#ifndef TEADSSDK_SWIFT_H
#define TEADSSDK_SWIFT_H
#pragma clang diagnostic push
@@ -186,6 +186,13 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
# define SWIFT_EXTERN extern "C"
# else
# define SWIFT_EXTERN extern
# endif
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
@@ -301,7 +308,6 @@ SWIFT_CLASS("_TtC8TeadsSDK18ContainerComponent")



@class NSNumber;
@class UIImage;

/// Native image component containing image url
@@ -1139,7 +1145,7 @@ SWIFT_CLASS("_TtC8TeadsSDK14VideoComponent")
#endif

#elif defined(__x86_64__) && __x86_64__
// Generated by Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)
// Generated by Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
#ifndef TEADSSDK_SWIFT_H
#define TEADSSDK_SWIFT_H
#pragma clang diagnostic push
@@ -1325,6 +1331,13 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
# define SWIFT_EXTERN extern "C"
# else
# define SWIFT_EXTERN extern
# endif
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
@@ -1440,7 +1453,6 @@ SWIFT_CLASS("_TtC8TeadsSDK18ContainerComponent")



@class NSNumber;
@class UIImage;

/// Native image component containing image url
@@ -2278,7 +2290,7 @@ SWIFT_CLASS("_TtC8TeadsSDK14VideoComponent")
#endif

#elif defined(__i386__) && __i386__
// Generated by Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)
// Generated by Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
#ifndef TEADSSDK_SWIFT_H
#define TEADSSDK_SWIFT_H
#pragma clang diagnostic push
@@ -2464,6 +2476,13 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
# define SWIFT_EXTERN extern "C"
# else
# define SWIFT_EXTERN extern
# endif
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
@@ -2579,7 +2598,6 @@ SWIFT_CLASS("_TtC8TeadsSDK18ContainerComponent")



@class NSNumber;
@class UIImage;

/// Native image component containing image url
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)
// swift-compiler-version: Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
// swift-module-flags: -target arm64-apple-ios10.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name TeadsSDK
import ARKit
import AVFoundation
Binary file not shown.

This file was deleted.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)
// swift-compiler-version: Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
// swift-module-flags: -target i386-apple-ios10.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name TeadsSDK
import ARKit
import AVFoundation
Binary file not shown.

This file was deleted.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1)
// swift-compiler-version: Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
// swift-module-flags: -target x86_64-apple-ios10.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name TeadsSDK
import ARKit
import AVFoundation
Binary file not shown.

This file was deleted.

Binary file not shown.

Large diffs are not rendered by default.

Binary file not shown.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -10,86 +10,14 @@ import GoogleMobileAds
import TeadsSDK

@objc(GADMAdapterTeadsBanner)
public final class GADMAdapterTeadsBanner: NSObject, GADCustomEventBanner {
private var currentBanner: TeadsInReadAdView?
private var placement: TeadsInReadAdPlacement?
@objc override public required init() {
super.init()
}

@objc public weak var delegate: GADCustomEventBannerDelegate?
public final class GADMAdapterTeadsBanner: GADMAdapterTeadsCustomEvent {
fileprivate var bannerAd: GADMAdapterTeadsBannerAd?

@objc public func requestAd(
_ adSize: GADAdSize,
parameter serverParameter: String?,
label _: String?,
request: GADCustomEventRequest
public func loadBanner(
for adConfiguration: GADMediationBannerAdConfiguration,
completionHandler: @escaping GADMediationBannerLoadCompletionHandler
) {
// Check PID
guard let rawPid = serverParameter, let pid = Int(rawPid) else {
delegate?.customEventBanner(self, didFailAd: TeadsAdapterErrorCode.pidNotFound)
return
}

// Prepare ad settings
let adSettings = (try? TeadsAdapterSettings.instance(fromAdmobParameters: request.additionalParameters)) ?? TeadsAdapterSettings()

currentBanner = TeadsInReadAdView(frame: CGRect(origin: CGPoint.zero, size: Helper.bannerSize(for: adSize.size.width)))

placement = Teads.createInReadPlacement(pid: pid, settings: adSettings.adPlacementSettings, delegate: self)
placement?.requestAd(requestSettings: adSettings.adRequestSettings)
}
}

extension GADMAdapterTeadsBanner: TeadsInReadAdPlacementDelegate {
public func didReceiveAd(ad: TeadsInReadAd, adRatio: TeadsAdRatio) {
ad.delegate = self
currentBanner?.bind(ad)
currentBanner?.updateHeight(with: adRatio)
if let adBanner = currentBanner {
delegate?.customEventBanner(self, didReceiveAd: adBanner)
}
}

public func didFailToReceiveAd(reason: AdFailReason) {
delegate?.customEventBanner(self, didFailAd: reason)
}

public func adOpportunityTrackerView(trackerView _: TeadsAdOpportunityTrackerView) {
// adOpportunityTrackerView is handled by TeadsSDK
}

public func didUpdateRatio(ad _: TeadsInReadAd, adRatio: TeadsAdRatio) {
currentBanner?.updateHeight(with: adRatio)
}
}

extension GADMAdapterTeadsBanner: TeadsAdDelegate {
public func didRecordImpression(ad _: TeadsAd) {
// not handled by GoogleMobileAds
}

public func didRecordClick(ad _: TeadsAd) {
delegate?.customEventBannerWasClicked(self)
}

public func willPresentModalView(ad _: TeadsAd) -> UIViewController? {
return delegate?.viewControllerForPresentingModalView
}

public func didCatchError(ad _: TeadsAd, error: Error) {
delegate?.customEventBanner(self, didFailAd: error)
}

public func didClose(ad _: TeadsAd) {
// not handled by GAD
}

public func didExpandedToFullscreen(ad _: TeadsAd) {
delegate?.customEventBannerWillPresentModal(self)
}

public func didCollapsedFromFullscreen(ad _: TeadsAd) {
delegate?.customEventBannerDidDismissModal(self)
bannerAd = GADMAdapterTeadsBannerAd()
bannerAd?.loadBanner(for: adConfiguration, completionHandler: completionHandler)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
//
// GADMAdapterTeadsBannerAd.swift
// TeadsAdMobAdapter
//
// Created by Thibaud Saint-Etienne on 27/10/2022.
//

import Foundation
import GoogleMobileAds
import TeadsSDK

@objc(GADMAdapterTeadsBannerAd)
public final class GADMAdapterTeadsBannerAd: NSObject, GADMediationBannerAd {
/// The Teads Ad network InRead AdView
var bannerAd: TeadsInReadAdView?

/// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK.
var delegate: GADMediationBannerAdEventDelegate?

/// Completion handler called after ad load
var completionHandler: GADMediationBannerLoadCompletionHandler?

public var view: UIView {
bannerAd ?? UIView()
}

private var placement: TeadsInReadAdPlacement?
private var adConfiguration: GADMediationBannerAdConfiguration?

public func loadBanner(
for adConfiguration: GADMediationBannerAdConfiguration,
completionHandler: @escaping GADMediationBannerLoadCompletionHandler
) {
// Check PID
guard let rawPid = adConfiguration.credentials.settings["parameter"] as? String, let pid = Int(rawPid) else {
delegate = completionHandler(nil, TeadsAdapterErrorCode.pidNotFound)
return
}

self.completionHandler = completionHandler
self.adConfiguration = adConfiguration

// Prepare ad settings
let adSettings = (adConfiguration.extras as? TeadsAdapterSettings) ?? TeadsAdapterSettings()
adSettings.setIntegation(TeadsAdapterSettings.integrationAdmob, version: GADMobileAds.sharedInstance().sdkVersion)

let adSize = adConfiguration.adSize
bannerAd = TeadsInReadAdView(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: adSize.size.width, height: adSize.size.height)))

placement = Teads.createInReadPlacement(pid: pid, settings: adSettings.adPlacementSettings, delegate: self)
placement?.requestAd(requestSettings: adSettings.adRequestSettings)
}
}

extension GADMAdapterTeadsBannerAd: TeadsInReadAdPlacementDelegate {
public func didReceiveAd(ad: TeadsInReadAd, adRatio: TeadsAdRatio) {
ad.delegate = self
bannerAd?.bind(ad)
bannerAd?.updateHeight(with: adRatio)
delegate = completionHandler?(self, nil)
completionHandler = nil
}

public func didFailToReceiveAd(reason: AdFailReason) {
delegate = completionHandler?(nil, reason)
completionHandler = nil
}

public func adOpportunityTrackerView(trackerView _: TeadsAdOpportunityTrackerView) {
// adOpportunityTrackerView is handled by TeadsSDK
}

public func didUpdateRatio(ad _: TeadsInReadAd, adRatio: TeadsAdRatio) {
bannerAd?.updateHeight(with: adRatio)
}
}

extension GADMAdapterTeadsBannerAd: TeadsAdDelegate {
public func didRecordImpression(ad _: TeadsAd) {
delegate?.reportImpression()
}

public func didRecordClick(ad _: TeadsAd) {
delegate?.reportClick()
}

public func willPresentModalView(ad _: TeadsAd) -> UIViewController? {
delegate?.willPresentFullScreenView()
return adConfiguration?.topViewController
}

public func didCatchError(ad _: TeadsAd, error: Error) {
delegate?.didFailToPresentWithError(error)
}

public func didExpandedToFullscreen(ad _: TeadsAd) {
delegate?.willPresentFullScreenView()
}

public func didCollapsedFromFullscreen(ad _: TeadsAd) {
delegate?.didDismissFullScreenView()
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
//
// GADMAdapterTeadsCustomEvent.swift
// TeadsAdMobAdapter
//
// Created by Thibaud Saint-Etienne on 26/10/2022.
//

import Foundation
import GoogleMobileAds
import TeadsSDK

@objc(GADMAdapterTeadsCustomEvent)
public class GADMAdapterTeadsCustomEvent: NSObject, GADMediationAdapter {
public static func adSDKVersion() -> GADVersionNumber {
let versionComponents = String(Teads.sdkVersion).components(
separatedBy: ".")

if versionComponents.count >= 3 {
let majorVersion = Int(versionComponents[0]) ?? 0
let minorVersion = Int(versionComponents[1]) ?? 0
let patchVersion = Int(versionComponents[2]) ?? 0

return GADVersionNumber(
majorVersion: majorVersion, minorVersion: minorVersion, patchVersion: patchVersion
)
}

return GADVersionNumber()
}

public static func adapterVersion() -> GADVersionNumber {
adSDKVersion()
}

public static func networkExtrasClass() -> GADAdNetworkExtras.Type? {
TeadsAdapterSettings.self
}

public static func setUpWith(
_: GADMediationServerConfiguration,
completionHandler: @escaping GADMediationAdapterSetUpCompletionBlock
) {
Teads.configure()
completionHandler(nil)
}

override public required init() {
super.init()
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -10,62 +10,14 @@ import TeadsSDK
import UIKit

@objc(GADMAdapterTeadsNative)
final class GADMAdapterTeadsNative: NSObject, GADCustomEventNativeAd {
weak var delegate: GADCustomEventNativeAdDelegate?
private var placement: TeadsNativeAdPlacement?
private var nativeAd: TeadsNativeAd?
private var adOpportunityView: TeadsAdOpportunityTrackerView?
private var adSettings: TeadsAdapterSettings?

@objc override public required init() {
super.init()
}

func request(withParameter serverParameter: String, request: GADCustomEventRequest, adTypes _: [Any], options _: [Any], rootViewController _: UIViewController) {
// Check PID
guard let pid = Int(serverParameter) else {
delegate?.customEventNativeAd(self, didFailToLoadWithError: TeadsAdapterErrorCode.pidNotFound)
return
}

// Prepare ad settings
guard let adSettings = try? TeadsAdapterSettings.instance(fromAdmobParameters: request.additionalParameters) else {
delegate?.customEventNativeAd(self, didFailToLoadWithError: TeadsAdapterErrorCode.serverParameterError)
return
}
placement = Teads.createNativePlacement(pid: pid, settings: adSettings.adPlacementSettings, delegate: self)
placement?.requestAd(requestSettings: adSettings.adRequestSettings)
self.adSettings = adSettings
}

func handlesUserClicks() -> Bool {
// Let Teads SDK tracks clicks
return true
}

func handlesUserImpressions() -> Bool {
// Let Teads SDK tracks impressions
return true
}
}

extension GADMAdapterTeadsNative: TeadsNativeAdPlacementDelegate {
func didReceiveAd(ad: TeadsNativeAd) {
nativeAd = ad
let mediatedNativeAd = GADMAdapterTeadsMediatedNativeAd(teadsNativeAd: ad, adOpportunityView: adOpportunityView, adSettings: adSettings)
nativeAd?.delegate = mediatedNativeAd
nativeAd?.playbackDelegate = mediatedNativeAd

delegate?.customEventNativeAd(self, didReceive: mediatedNativeAd)
placement = nil
adOpportunityView = nil
}

func didFailToReceiveAd(reason: AdFailReason) {
delegate?.customEventNativeAd(self, didFailToLoadWithError: reason)
}

func adOpportunityTrackerView(trackerView: TeadsAdOpportunityTrackerView) {
adOpportunityView = trackerView
public final class GADMAdapterTeadsNative: GADMAdapterTeadsCustomEvent {
fileprivate var nativeAd: GADMAdapterTeadsNativeAd?

public func loadNativeAd(
for adConfiguration: GADMediationNativeAdConfiguration,
completionHandler: @escaping GADMediationNativeLoadCompletionHandler
) {
nativeAd = GADMAdapterTeadsNativeAd()
nativeAd?.loadNativeAd(for: adConfiguration, completionHandler: completionHandler)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
//
// GADMAdapterTeadsNativeAd.swift
// TeadsAdMobAdapter
//
// Created by Thibaud Saint-Etienne on 27/10/2022.
//

import GoogleMobileAds
import TeadsSDK
import UIKit

@objc(GADMAdapterTeadsNativeAd)
final class GADMAdapterTeadsNativeAd: NSObject, GADMediationNativeAd {
/// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK.
var delegate: GADMediationNativeAdEventDelegate?

/// Completion handler called after ad load
var completionHandler: GADMediationNativeLoadCompletionHandler?

private var placement: TeadsNativeAdPlacement?
private var adConfiguration: GADMediationNativeAdConfiguration?
private var adOpportunityView: TeadsAdOpportunityTrackerView?

private var mappedImages = [GADNativeAdImage]()
private var mappedIcon: GADNativeAdImage?
private var teadsMediaView: TeadsMediaView?
private var adSettings: TeadsAdapterSettings?

private weak var viewController: UIViewController?

var nativeAd: TeadsNativeAd?

var headline: String? {
nativeAd?.title?.text
}

var images: [GADNativeAdImage]? {
mappedImages
}

var body: String? {
nativeAd?.content?.text
}

var icon: GADNativeAdImage? {
mappedIcon
}

var callToAction: String? {
nativeAd?.callToAction?.text
}

var starRating: NSDecimalNumber? {
guard let stringValue = nativeAd?.rating?.text else {
return nil
}
return NSDecimalNumber(string: stringValue)
}

var store: String? {
nil
}

var price: String? {
nativeAd?.price?.text
}

var advertiser: String? {
nativeAd?.sponsored?.text
}

var extraAssets: [String: Any]? {
nil
}

var adChoicesView: UIView? {
TeadsAdChoicesView(binding: nativeAd?.adChoices)
}

var mediaView: UIView? {
// Used to return the mediaView if video content.
teadsMediaView
}

var mediaContentAspectRatio: CGFloat {
nativeAd?.video?.contentAspectRatio ?? 0
}

var hasVideoContent: Bool {
nativeAd?.video != nil
}

override required init() {
super.init()
}

func loadNativeAd(
for adConfiguration: GADMediationNativeAdConfiguration,
completionHandler: @escaping GADMediationNativeLoadCompletionHandler
) {
// Check PID
guard let rawPid = adConfiguration.credentials.settings["parameter"] as? String, let pid = Int(rawPid) else {
delegate = completionHandler(nil, TeadsAdapterErrorCode.pidNotFound)
return
}

self.completionHandler = completionHandler
self.adConfiguration = adConfiguration

// Prepare ad settings
let adSettings = (adConfiguration.extras as? TeadsAdapterSettings) ?? TeadsAdapterSettings()
adSettings.setIntegation(TeadsAdapterSettings.integrationAdmob, version: GADMobileAds.sharedInstance().sdkVersion)
self.adSettings = adSettings
placement = Teads.createNativePlacement(pid: pid, settings: adSettings.adPlacementSettings, delegate: self)
placement?.requestAd(requestSettings: adSettings.adRequestSettings)
}

func handlesUserClicks() -> Bool {
// Let Teads SDK tracks clicks
true
}

func handlesUserImpressions() -> Bool {
// Let Teads SDK tracks impressions
true
}

func didRender(
in view: UIView,
clickableAssetViews: [GADNativeAssetIdentifier: UIView],
nonclickableAssetViews _: [GADNativeAssetIdentifier: UIView],
viewController: UIViewController
) {
self.viewController = viewController
nativeAd?.register(containerView: view)
if let adOpportunityView = adOpportunityView {
view.addSubview(adOpportunityView)
self.adOpportunityView = nil
}
clickableAssetViews.forEach { key, assetView in
switch key {
case .headlineAsset:
assetView.bind(component: nativeAd?.title)
case .callToActionAsset:
assetView.bind(component: nativeAd?.callToAction)
case .iconAsset:
assetView.bind(component: nativeAd?.icon)
case .bodyAsset:
assetView.bind(component: nativeAd?.content)
case .priceAsset:
assetView.bind(component: nativeAd?.price)
case .imageAsset:
assetView.bind(component: nativeAd?.image)
case .mediaViewAsset:
assetView.bind(component: nativeAd?.video)
case .starRatingAsset:
assetView.bind(component: nativeAd?.rating)
case .advertiserAsset:
assetView.bind(component: nativeAd?.sponsored)
default:
break
}
}
}

private func loadNativeImages() {
if let video = nativeAd?.video {
teadsMediaView = TeadsMediaView(videoComponent: video)
if let mediaScale = adSettings?.mediaScale {
teadsMediaView?.mediaScale = mediaScale
}
}
nativeAd?.image?.loadImage(async: false) { [weak self] image in
self?.mappedImages = [GADNativeAdImage(image: image)]
}

nativeAd?.icon?.loadImage(async: false) { [weak self] image in
self?.mappedIcon = GADNativeAdImage(image: image)
}
}
}

extension GADMAdapterTeadsNativeAd: TeadsNativeAdPlacementDelegate {
func didReceiveAd(ad: TeadsNativeAd) {
nativeAd = ad
nativeAd?.delegate = self
nativeAd?.playbackDelegate = self
loadNativeImages()
delegate = completionHandler?(self, nil)
completionHandler = nil
placement = nil
adOpportunityView = nil
}

func didFailToReceiveAd(reason: AdFailReason) {
delegate = completionHandler?(nil, reason)
completionHandler = nil
placement = nil
}

func adOpportunityTrackerView(trackerView: TeadsAdOpportunityTrackerView) {
adOpportunityView = trackerView
}
}

extension GADMAdapterTeadsNativeAd: TeadsAdDelegate {
public func didRecordImpression(ad _: TeadsAd) {
delegate?.reportImpression()
}

public func didRecordClick(ad _: TeadsAd) {
delegate?.reportClick()
}

public func willPresentModalView(ad _: TeadsAd) -> UIViewController? {
delegate?.willPresentFullScreenView()
return viewController
}

public func didCatchError(ad _: TeadsAd, error: Error) {
delegate?.didFailToPresentWithError(error)
}

public func didExpandedToFullscreen(ad _: TeadsAd) {
delegate?.willPresentFullScreenView()
}

public func didCollapsedFromFullscreen(ad _: TeadsAd) {
delegate?.didDismissFullScreenView()
}
}

extension GADMAdapterTeadsNativeAd: TeadsPlaybackDelegate {
func didPlay(_: TeadsAd) {
delegate?.didPlayVideo()
}

func didPause(_: TeadsAd) {
delegate?.didPauseVideo()
}

func didComplete(_: TeadsAd) {
delegate?.didEndVideo()
}

func adStartPlayingAudio(_: TeadsAd) {
delegate?.didUnmuteVideo()
}

func adStopPlayingAudio(_: TeadsAd) {
delegate?.didMuteVideo()
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
//
// TeadsAdapterSettings+GADAdNetworkExtras.swift
// TeadsAdMobAdapter
//
// Created by Thibaud Saint-Etienne on 27/10/2022.
//

import Foundation
import GoogleMobileAds
import TeadsSDK

@objc public final class GADMAdapterTeads: NSObject {
@available(*, deprecated, message: "defaultLabel is not used anymore please pass your label value as parameter of the customEventExtra method")
@objc public static let defaultLabel = "Teads"

/// customEventExtra is a method used to create GADCustomEventExtras based on teadsAdSettings
/// - Parameters:
/// - teadsAdSettings: the TeadsAdapterSettings that you will pass as extra parameters for the mediation.
/// - label: the same label as it registered on your Google dashboard, default value is Teads.
///
/// - Important:
///
/// This method is deprecated if favor of registering directly ``TeadsSDK.TeadsAdapterSettings``
/// ```
/// import TeadsAdMobAdapter
///
/// let request = GADRequest()
/// let adSettings = TeadsAdapterSettings { (settings) in
/// settings.pageUrl("http://page.com/article1")
/// settings.registerAdView(admobAdView, delegate: self)
/// }
/// request.register(adSettings)
/// ```
@available(*, unavailable, message: "customEventExtra is not available anymore, you can register TeadsAdapterSettings directly calling `GADRequest.register(_ )")
@objc public class func customEventExtra(with teadsAdSettings: TeadsAdapterSettings, for label: String) -> GADCustomEventExtras {
let customEventExtras = GADCustomEventExtras()
if let parameters = try? teadsAdSettings.toDictionary() {
customEventExtras.setExtras(parameters, forLabel: label)
}
return customEventExtras
}
}

extension TeadsAdapterSettings: GADAdNetworkExtras {}
Original file line number Diff line number Diff line change
@@ -27,7 +27,7 @@ final class TeadsMediationAdapter: ALMediationAdapter {

@objc override func initialize(with _: MAAdapterInitializationParameters, completionHandler: @escaping (MAAdapterInitializationStatus, String?) -> Void) {
Teads.configure()
completionHandler(.doesNotApply, nil)
completionHandler(.initializedSuccess, nil)
}

@objc override var sdkVersion: String {
116 changes: 61 additions & 55 deletions Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,45 +1,45 @@
PODS:
- AppLovinSDK (11.4.4)
- Google-Mobile-Ads-SDK (9.10.0):
- GoogleAppMeasurement (< 10.0, >= 7.0)
- AppLovinSDK (11.5.5)
- Google-Mobile-Ads-SDK (9.13.0):
- GoogleAppMeasurement (< 11.0, >= 7.0)
- GoogleUserMessagingPlatform (>= 1.1)
- GoogleAppMeasurement (9.5.0):
- GoogleAppMeasurement/AdIdSupport (= 9.5.0)
- GoogleUtilities/AppDelegateSwizzler (~> 7.7)
- GoogleUtilities/MethodSwizzler (~> 7.7)
- GoogleUtilities/Network (~> 7.7)
- "GoogleUtilities/NSData+zlib (~> 7.7)"
- GoogleAppMeasurement (10.2.0):
- GoogleAppMeasurement/AdIdSupport (= 10.2.0)
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- GoogleUtilities/MethodSwizzler (~> 7.8)
- GoogleUtilities/Network (~> 7.8)
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- nanopb (< 2.30910.0, >= 2.30908.0)
- GoogleAppMeasurement/AdIdSupport (9.5.0):
- GoogleAppMeasurement/WithoutAdIdSupport (= 9.5.0)
- GoogleUtilities/AppDelegateSwizzler (~> 7.7)
- GoogleUtilities/MethodSwizzler (~> 7.7)
- GoogleUtilities/Network (~> 7.7)
- "GoogleUtilities/NSData+zlib (~> 7.7)"
- GoogleAppMeasurement/AdIdSupport (10.2.0):
- GoogleAppMeasurement/WithoutAdIdSupport (= 10.2.0)
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- GoogleUtilities/MethodSwizzler (~> 7.8)
- GoogleUtilities/Network (~> 7.8)
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- nanopb (< 2.30910.0, >= 2.30908.0)
- GoogleAppMeasurement/WithoutAdIdSupport (9.5.0):
- GoogleUtilities/AppDelegateSwizzler (~> 7.7)
- GoogleUtilities/MethodSwizzler (~> 7.7)
- GoogleUtilities/Network (~> 7.7)
- "GoogleUtilities/NSData+zlib (~> 7.7)"
- GoogleAppMeasurement/WithoutAdIdSupport (10.2.0):
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- GoogleUtilities/MethodSwizzler (~> 7.8)
- GoogleUtilities/Network (~> 7.8)
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- nanopb (< 2.30910.0, >= 2.30908.0)
- GoogleUserMessagingPlatform (2.0.0)
- GoogleUtilities/AppDelegateSwizzler (7.7.0):
- GoogleUserMessagingPlatform (2.0.1)
- GoogleUtilities/AppDelegateSwizzler (7.10.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.7.0):
- GoogleUtilities/Environment (7.10.0):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.7.0):
- GoogleUtilities/Logger (7.10.0):
- GoogleUtilities/Environment
- GoogleUtilities/MethodSwizzler (7.7.0):
- GoogleUtilities/MethodSwizzler (7.10.0):
- GoogleUtilities/Logger
- GoogleUtilities/Network (7.7.0):
- GoogleUtilities/Network (7.10.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.7.0)"
- GoogleUtilities/Reachability (7.7.0):
- "GoogleUtilities/NSData+zlib (7.10.0)"
- GoogleUtilities/Reachability (7.10.0):
- GoogleUtilities/Logger
- nanopb (2.30909.0):
- nanopb/decode (= 2.30909.0)
@@ -51,25 +51,25 @@ PODS:
- Smart-Display-SDK (7.18.0):
- Smart-Core-SDK (~> 7.18)
- SwiftFormat/CLI (0.49.18)
- TeadsAdMobAdapter (5.0.20):
- TeadsAdMobAdapter (5.0.21):
- Google-Mobile-Ads-SDK (>= 8.0)
- TeadsSDK (= 5.0.20)
- TeadsAppLovinAdapter (5.0.20):
- TeadsSDK (= 5.0.21)
- TeadsAppLovinAdapter (5.0.21):
- AppLovinSDK (>= 11.2.1)
- TeadsSDK (= 5.0.20)
- TeadsSASAdapter (5.0.20):
- TeadsSDK (= 5.0.21)
- TeadsSASAdapter (5.0.21):
- Smart-Display-SDK (>= 7.6.2)
- TeadsSDK (= 5.0.20)
- TeadsSDK (5.0.20):
- TeadsSDK/Core (= 5.0.20)
- TeadsSDK/Core (5.0.20)
- TeadsSDK (= 5.0.21)
- TeadsSDK (5.0.21):
- TeadsSDK/Core (= 5.0.21)
- TeadsSDK/Core (5.0.21)

DEPENDENCIES:
- SwiftFormat/CLI
- TeadsAdMobAdapter (~> 5.0)
- TeadsAppLovinAdapter (~> 5.0)
- TeadsSASAdapter (~> 5.0)
- TeadsSDK (~> 5.0)
- TeadsAdMobAdapter (from `./`)
- TeadsAppLovinAdapter (from `./`)
- TeadsSASAdapter (from `./`)
- TeadsSDK (from `./`)

SPEC REPOS:
trunk:
@@ -83,27 +83,33 @@ SPEC REPOS:
- Smart-Core-SDK
- Smart-Display-SDK
- SwiftFormat
- TeadsAdMobAdapter
- TeadsAppLovinAdapter
- TeadsSASAdapter
- TeadsSDK

EXTERNAL SOURCES:
TeadsAdMobAdapter:
:path: "./"
TeadsAppLovinAdapter:
:path: "./"
TeadsSASAdapter:
:path: "./"
TeadsSDK:
:path: "./"

SPEC CHECKSUMS:
AppLovinSDK: 347d9d039d499acbc3c3f616c669d010b2269334
Google-Mobile-Ads-SDK: eb398023f0d97cdd259b171052f1eb433de00c87
GoogleAppMeasurement: 6ee231473fbd75c11221dfce489894334024eead
GoogleUserMessagingPlatform: ab890ce5f6620f293a21b6bdd82e416a2c73aeca
GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1
AppLovinSDK: 0fa20cde9b6d2e00a39a714b9da115ef7f39e6a3
Google-Mobile-Ads-SDK: 465532d33dfc878f2f9aca281fddbcd4bf9c0197
GoogleAppMeasurement: 3bc3a6484b7bb20dd8489242c4dd3c92a3e5107b
GoogleUserMessagingPlatform: 5f8b30daf181805317b6b985bb51c1ff3beca054
GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
Smart-Core-SDK: 7f2b321a2f8a4233481db716a30a2715d2fafbd1
Smart-Display-SDK: 83450dd0befaa55f08779a8c67c30bd6d8e80ee9
SwiftFormat: 2402d29b26746f169cce5454d5af88314cbb2e35
TeadsAdMobAdapter: 84d7a53f5a3d5411b6710bf3741f6ebf1598b0ee
TeadsAppLovinAdapter: 47c7a5434a409710307242c33f471827dea70c11
TeadsSASAdapter: 16ce14539cec78eb1a6b0b12bc491c31cfca316c
TeadsSDK: 9b1604339860b937a623e38c1a53ed42d38260c5
TeadsAdMobAdapter: 083b12d8d21878e09932a0c55df4e5339135e128
TeadsAppLovinAdapter: 74462a3b9758e35b0d753159ec48d6f9b0340bbc
TeadsSASAdapter: b45328df00e3e8ec2a855909d14a947359b927c0
TeadsSDK: 72056b3d47f2f5824f1e039c299ed6e772f7b51c

PODFILE CHECKSUM: beb81518548cc9368141d14b897874d07ca0e6a7
PODFILE CHECKSUM: 5651f83796a684bc909c284b8e9640ea9d7bafce

COCOAPODS: 1.11.2
2 changes: 1 addition & 1 deletion TeadsAdMobAdapter.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|

s.name = 'TeadsAdMobAdapter'
s.version = '5.0.20'
s.version = '5.0.21'
s.summary = "AdMob Adapter for Teads' iOS SDK"
s.module_name = 'TeadsAdMobAdapter'
s.description = <<-DESC
2 changes: 1 addition & 1 deletion TeadsAppLovinAdapter.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|

s.name = 'TeadsAppLovinAdapter'
s.version = '5.0.20'
s.version = '5.0.21'
s.summary = "AppLovin MAX Adapter for Teads' iOS SDK"
s.module_name = 'TeadsAppLovinAdapter'
s.description = <<-DESC
2 changes: 1 addition & 1 deletion TeadsSASAdapter.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|

s.name = 'TeadsSASAdapter'
s.version = '5.0.20'
s.version = '5.0.21'
s.summary = "SAS Adapter for Teads' iOS SDK"
s.module_name = 'TeadsSASAdapter'
s.description = <<-DESC
2 changes: 1 addition & 1 deletion TeadsSDK.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|

s.name = "TeadsSDK"
s.version = '5.0.20'
s.version = '5.0.21'
s.summary = "Teads' iOS SDK"
s.module_name = s.name
s.description = <<-DESC
2 changes: 1 addition & 1 deletion TeadsSampleApp.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
@@ -685,7 +685,7 @@
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-TeadsSampleApp/Pods-TeadsSampleApp-resources.sh",
"${PODS_ROOT}/AppLovinSDK/applovin-ios-sdk-11.4.4/AppLovinSDKResources.bundle",
"${PODS_ROOT}/AppLovinSDK/applovin-ios-sdk-11.5.5/AppLovinSDKResources.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (

0 comments on commit ae3486a

Please sign in to comment.