blob: c05345eb92aff2954e966b3e1dc3a9bbaa210d46 [file] [log] [blame]
// 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