yandexads-flutter
108 строк · 3.3 Кб
1//
2// YandexAdsBannerComponent.swift
3// flutter_yandex_ads
4//
5// Created by Artem Kovardin on 05.12.2022.
6//
7
8import Foundation
9import YandexMobileAds
10import Flutter
11
12
13struct BannerData {
14var view: YMAAdView!
15var onAdLoaded: ((Result<Void, Error>) -> Void)? = nil
16var onAdFailed: ((Result<BannerError, Error>) -> Void)? = nil
17var onAdClickedId: ((Result<Void, Error>) -> Void)? = nil
18var onLeftApplicationId: ((Result<Void, Error>) -> Void)? = nil
19var onReturned: ((Result<Void, Error>) -> Void)? = nil
20var onImpressionId: ((Result<BannerImpression, Error>) -> Void)? = nil
21}
22
23class YandexAdsBannerComponent: NSObject, YandexAdsBanner {
24
25var banners: [String: BannerData] = [:]
26
27func make(id: String, width: Int64, height: Int64) throws {
28let banner = BannerData(
29view: YMAAdView(
30adUnitID: id,
31adSize: YMABannerAdSize.inlineSize(
32withWidth: CGFloat(width),
33maxHeight: CGFloat(height)))
34)
35
36banner.view.delegate = self
37banner.view.removeFromSuperview()
38
39banners[id] = banner
40}
41
42func load(id: String) throws {
43banners[id]?.view.loadAd()
44}
45
46func onAdLoaded(id: String, completion: @escaping (Result<Void, Error>) -> Void) {
47banners[id]?.onAdLoaded = completion
48}
49
50func onAdFailedToLoad(id: String, completion: @escaping (Result<BannerError, Error>) -> Void) {
51banners[id]?.onAdFailed = completion
52}
53
54func onAdClicked(id: String, completion: @escaping (Result<Void, Error>) -> Void) {
55banners[id]?.onAdClickedId = completion
56}
57
58func onLeftApplication(id: String, completion: @escaping (Result<Void, Error>) -> Void) {
59banners[id]?.onLeftApplicationId = completion
60}
61
62func onReturnedToApplication(id: String, completion: @escaping (Result<Void, Error>) -> Void) {
63banners[id]?.onReturned = completion
64}
65
66func onImpression(id: String, completion: @escaping (Result<BannerImpression, Error>) -> Void) {
67banners[id]?.onImpressionId = completion
68}
69}
70
71
72extension YandexAdsBannerComponent: YMAAdViewDelegate {
73func adViewDidLoad(_ adView: YMAAdView) {
74if let callback = banners[adView.adUnitID]?.onAdLoaded {
75callback(Result.success(()))
76}
77}
78
79func adViewDidFailLoading(_ adView: YMAAdView, error: Error) {
80let response = BannerError(
81code: Int64(error._code),
82description: error.localizedDescription)
83
84if let callback = banners[adView.adUnitID]?.onAdFailed {
85callback(Result.success(response))
86}
87}
88
89func adViewDidClick(_ adView: YMAAdView) {
90if let callback = banners[adView.adUnitID]?.onAdClickedId {
91callback(Result.success(()))
92}
93}
94
95func adViewWillLeaveApplication(_ adView: YMAAdView) {
96if let callback = banners[adView.adUnitID]?.onLeftApplicationId {
97callback(Result.success(()))
98}
99}
100
101func adView(_ adView: YMAAdView, didTrackImpressionWith impressionData: YMAImpressionData?) {
102let response = BannerImpression(data: impressionData?.rawData ?? "")
103
104if let callback = banners[adView.adUnitID]?.onImpressionId {
105callback(Result.success(response))
106}
107}
108}
109