yandexads-flutter

Форк
0
/
YandexAdsRewardedComponent.swift 
108 строк · 3.2 Кб
1
//
2
// Created by Artem Kovardin on 09.03.2022.
3
//
4

5
import Foundation
6
import YandexMobileAds
7
import Flutter
8

9
struct RewardedData {
10
    var loader: YMARewardedAdLoader? = nil
11
    var ad: YMARewardedAd? = nil
12
}
13

14

15
class YandexAdsRewardedComponent: NSObject, YandexAdsRewarded {
16
    
17
    private var rewardeds: [String: RewardedData] = [:]
18
    
19
    private var callbacks: FlutterYandexAdsRewarded
20
    
21
    init(callbacks: FlutterYandexAdsRewarded) {
22
        self.callbacks = callbacks
23
    }
24
    
25
    func make(id: String) throws {
26
        let loader = YMARewardedAdLoader()
27
        loader.delegate = self
28
        rewardeds[id] = RewardedData(loader: loader)
29
        
30
    }
31
    
32

33
    func load(id: String) {
34
        let configuration = YMAAdRequestConfiguration(adUnitID: id)
35
        rewardeds[id]?.loader?.loadAd(with: configuration)
36
        
37
    }
38
    
39
    func show(id: String) {
40
        if let controller = UIApplication.shared.delegate?.window??.rootViewController as? FlutterViewController {
41
            rewardeds[id]?.ad?.show(from: controller)
42
        }
43
    }
44
}
45

46
extension YandexAdsRewardedComponent: YMARewardedAdLoaderDelegate {
47
    
48
    func rewardedAdLoader(_ adLoader: YMARewardedAdLoader, didLoad rewardedAd: YMARewardedAd) {
49
        let id = rewardedAd.adInfo?.adUnitId ?? ""
50
        rewardeds[id]?.ad = rewardedAd
51
        rewardeds[id]?.ad?.delegate = self
52
        callbacks.onAdLoaded(id: id) {_ in }
53
    }
54
    
55
    func rewardedAdLoader(_ adLoader: YMARewardedAdLoader, didFailToLoadWithError error: YMAAdRequestError) {
56
        callbacks.onAdFailedToLoad(
57
            id: error.adUnitId ?? "",
58
            err: RewardedError(code: 0, description: error.error.localizedDescription),
59
            completion: {_ in }
60
        )
61
    }
62
}
63

64

65
extension YandexAdsRewardedComponent: YMARewardedAdDelegate {
66
   
67
    func interstitialAd(_ rewardedAd: YMARewardedAd, didFailToShowWithError error: Error) {
68
        let id = rewardedAd.adInfo?.adUnitId ?? ""
69
        callbacks.onAdFailedToShow(
70
            id: id,
71
            err: RewardedError(code: 0, description: error.localizedDescription),
72
            completion: {_ in }
73
        )
74
    }
75

76
    func interstitialAdDidShow(_ rewardedAd: YMARewardedAd) {
77
        let id = rewardedAd.adInfo?.adUnitId ?? ""
78
        callbacks.onAdShown(id: id) {_ in }
79
    }
80

81
    func interstitialAdDidDismiss(_ rewardedAd: YMARewardedAd) {
82
        let id = rewardedAd.adInfo?.adUnitId ?? ""
83
        callbacks.onAdDismissed(id: id) {_ in }
84
    }
85

86
    func interstitialAdDidClick(_ rewardedAd: YMARewardedAd) {
87
        let id = rewardedAd.adInfo?.adUnitId ?? ""
88
        callbacks.onAdClicked(id: id) {_ in }
89
    }
90

91
    func interstitialAd(_ rewardedAd: YMARewardedAd, didTrackRewardedWith impressionData: YMAImpressionData?) {
92
        let id = rewardedAd.adInfo?.adUnitId ?? ""
93
        callbacks.onImpression(
94
            id: id,
95
            data: RewardedImpression(data: impressionData?.rawData ?? ""),
96
            completion: {_ in }
97
        )
98
    }
99
    
100
    func rewardedAd(_ rewardedAd: YMARewardedAd, didReward reward: YMAReward) {
101
        let id = rewardedAd.adInfo?.adUnitId ?? ""
102
        callbacks.onRewarded(
103
            id: id,
104
            reward: RewardedEvent(amount: Int64(reward.amount), type: reward.type),
105
            completion: {_ in }
106
        )
107
    }
108
}
109

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.