| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "FLTRewardedVideoAdWrapper.h" |
| #import "FLTRequestFactory.h" |
| #import "FirebaseAdMobPlugin.h" |
| |
| static NSDictionary *rewardedStatusToString = nil; |
| |
| @interface FLTRewardedVideoAdWrapper () <GADRewardBasedVideoAdDelegate> |
| @end |
| |
| @implementation FLTRewardedVideoAdWrapper |
| |
| FlutterMethodChannel *_rewardedChannel; |
| FLTRewardedVideoAdStatus _rewardedStatus; |
| |
| + (void)initialize { |
| if (rewardedStatusToString == nil) { |
| rewardedStatusToString = @{ |
| @(FLTRewardedVideoAdStatusCreated) : @"CREATED", |
| @(FLTRewardedVideoAdStatusLoading) : @"LOADING", |
| @(FLTRewardedVideoAdStatusFailed) : @"FAILED", |
| @(FLTRewardedVideoAdStatusLoaded) : @"LOADED" |
| }; |
| } |
| } |
| |
| + (UIViewController *)rootViewController { |
| return [UIApplication sharedApplication].delegate.window.rootViewController; |
| } |
| |
| - (instancetype)initWithChannel:(FlutterMethodChannel *)channel { |
| self = [super init]; |
| if (self) { |
| _rewardedChannel = channel; |
| _rewardedStatus = FLTRewardedVideoAdStatusCreated; |
| [GADRewardBasedVideoAd sharedInstance].delegate = self; |
| } |
| return self; |
| } |
| |
| - (FLTRewardedVideoAdStatus)status { |
| return _rewardedStatus; |
| } |
| |
| - (void)loadWithAdUnitId:(NSString *)adUnitId targetingInfo:(NSDictionary *)targetingInfo { |
| if (_rewardedStatus != FLTRewardedVideoAdStatusCreated && |
| _rewardedStatus != FLTRewardedVideoAdStatusFailed) { |
| return; |
| } |
| |
| _rewardedStatus = FLTRewardedVideoAdStatusLoading; |
| FLTRequestFactory *factory = [[FLTRequestFactory alloc] initWithTargetingInfo:targetingInfo]; |
| [[GADRewardBasedVideoAd sharedInstance] loadRequest:[factory createRequest] |
| withAdUnitID:adUnitId]; |
| } |
| |
| - (void)show { |
| [[GADRewardBasedVideoAd sharedInstance] |
| presentFromRootViewController:[FLTRewardedVideoAdWrapper rootViewController]]; |
| } |
| |
| - (NSString *)description { |
| NSString *statusString = |
| (NSString *)rewardedStatusToString[[NSNumber numberWithInt:_rewardedStatus]]; |
| return [NSString |
| stringWithFormat:@"%@ %@ FLTRewardedVideoAdWrapper", super.description, statusString]; |
| } |
| |
| - (void)rewardBasedVideoAd:(nonnull GADRewardBasedVideoAd *)rewardBasedVideoAd |
| didRewardUserWithReward:(nonnull GADAdReward *)reward { |
| NSDictionary *arguments = @{ |
| @"rewardAmount" : [NSNumber numberWithInt:[reward.amount intValue]], |
| @"rewardType" : reward.type |
| }; |
| [_rewardedChannel invokeMethod:@"onRewarded" arguments:arguments]; |
| } |
| |
| - (void)rewardBasedVideoAd:(nonnull GADRewardBasedVideoAd *)rewardBasedVideoAd |
| didFailToLoadWithError:(nonnull NSError *)error { |
| NSLog(@"interstitial:didFailToReceiveAdWithError: %@ (MobileAd %@)", [error localizedDescription], |
| self); |
| _rewardedStatus = FLTRewardedVideoAdStatusFailed; |
| [_rewardedChannel invokeMethod:@"onRewardedVideoAdFailedToLoad" arguments:@{}]; |
| } |
| |
| - (void)rewardBasedVideoAdDidReceiveAd:(nonnull GADRewardBasedVideoAd *)rewardBasedVideoAd { |
| _rewardedStatus = FLTRewardedVideoAdStatusLoaded; |
| [_rewardedChannel invokeMethod:@"onRewardedVideoAdLoaded" arguments:@{}]; |
| } |
| |
| - (void)rewardBasedVideoAdDidOpen:(nonnull GADRewardBasedVideoAd *)rewardBasedVideoAd { |
| [_rewardedChannel invokeMethod:@"onRewardedVideoAdOpened" arguments:@{}]; |
| } |
| |
| - (void)rewardBasedVideoAdDidStartPlaying:(nonnull GADRewardBasedVideoAd *)rewardBasedVideoAd { |
| [_rewardedChannel invokeMethod:@"onRewardedVideoStarted" arguments:@{}]; |
| } |
| |
| - (void)rewardBasedVideoAdDidCompletePlaying:(nonnull GADRewardBasedVideoAd *)rewardBasedVideoAd { |
| [_rewardedChannel invokeMethod:@"onRewardedVideoCompleted" arguments:@{}]; |
| } |
| |
| - (void)rewardBasedVideoAdDidClose:(nonnull GADRewardBasedVideoAd *)rewardBasedVideoAd { |
| [_rewardedChannel invokeMethod:@"onRewardedVideoAdClosed" arguments:@{}]; |
| _rewardedStatus = FLTRewardedVideoAdStatusCreated; |
| } |
| |
| - (void)rewardBasedVideoAdWillLeaveApplication:(nonnull GADRewardBasedVideoAd *)rewardBasedVideoAd { |
| [_rewardedChannel invokeMethod:@"onRewardedVideoAdLeftApplication" arguments:@{}]; |
| } |
| |
| @end |