211 lines
11 KiB
Objective-C
Executable File
211 lines
11 KiB
Objective-C
Executable File
//
|
||
// ALIncentivizedInterstitialAd.h
|
||
// AppLovinSDK
|
||
//
|
||
// Copyright © 2020 AppLovin Corporation. All rights reserved.
|
||
//
|
||
|
||
#import "ALInterstitialAd.h"
|
||
#import "ALAdVideoPlaybackDelegate.h"
|
||
#import "ALAdDisplayDelegate.h"
|
||
#import "ALAdLoadDelegate.h"
|
||
#import "ALAdRewardDelegate.h"
|
||
|
||
NS_ASSUME_NONNULL_BEGIN
|
||
|
||
/**
|
||
* This class shows rewarded videos to the user. These differ from regular interstitials in that they allow you to provide your user virtual currency in
|
||
* exchange for watching a video.
|
||
*/
|
||
@interface ALIncentivizedInterstitialAd : NSObject
|
||
|
||
#pragma mark - Ad Delegates
|
||
|
||
/**
|
||
* An object that conforms to the @c ALAdDisplayDelegate protocol. If you provide a value for @c adDisplayDelegate in your instance, the SDK will
|
||
* notify this delegate of ad show/hide events.
|
||
*/
|
||
@property (strong, nonatomic, nullable) id<ALAdDisplayDelegate> adDisplayDelegate;
|
||
|
||
/**
|
||
* An object that conforms to the @c ALAdVideoPlaybackDelegate protocol. If you provide a value for @c adVideoPlaybackDelegate in your instance,
|
||
* the SDK will notify this delegate of video start/stop events.
|
||
*/
|
||
@property (strong, nonatomic, nullable) id<ALAdVideoPlaybackDelegate> adVideoPlaybackDelegate;
|
||
|
||
#pragma mark - Integration, Class Methods
|
||
|
||
/**
|
||
* Gets a reference to the shared instance of @c [ALIncentivizedInterstitialAd].
|
||
*
|
||
* This wraps the @code +[ALSdk shared] @endcode call, and will only work if you have set your SDK key in @code Info.plist @endcode.
|
||
*/
|
||
+ (ALIncentivizedInterstitialAd *)shared;
|
||
|
||
/**
|
||
* Pre-loads an incentivized interstitial, and notifies your provided Ad Load Delegate.
|
||
*
|
||
* Invoke this once to pre-load, then do not invoke it again until the ad has has been closed (e.g., in the
|
||
* @code -[ALAdDisplayDelegate ad:wasHiddenIn:] @endcode callback).
|
||
*
|
||
* @warning You may pass a @c nil argument to @code +[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode if you intend to use the synchronous
|
||
* (@code +[ALIncentivizedIntrstitialAd isReadyForDisplay] @endcode) flow. This is <em>not</em> recommended; AppLovin <em>highly recommends</em> that
|
||
* you use an ad load delegate.
|
||
*
|
||
* This method uses the shared instance, and will only work if you have set your SDK key in @code Info.plist @endcode.
|
||
*
|
||
* Note that AppLovin tries to pull down the next ad’s resources before you need it. Therefore, this method may complete immediately in many circumstances.
|
||
*
|
||
* @param adLoadDelegate The delegate to notify that preloading was completed. May be @c nil (see warning).
|
||
*/
|
||
+ (void)preloadAndNotify:(nullable id<ALAdLoadDelegate>)adLoadDelegate;
|
||
|
||
/**
|
||
* Whether or not an ad is currently ready on this object. You must first have called @code +[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode in order
|
||
* for this value to be meaningful.
|
||
*
|
||
* @warning It is highly recommended that you implement an asynchronous flow (using an @c ALAdLoadDelegate with
|
||
* @code -[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode) rather than checking this property. This class does not contain a queue and can
|
||
* hold only one preloaded ad at a time. Therefore, you should <em>not</em> simply call
|
||
* @code -[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode) any time this method returns @c NO; it is important to invoke only one ad load —
|
||
* then not invoke any further loads until the ad has been closed (e.g., in the @code -[ALAdDisplayDelegate ad:wasHiddenIn:] @endcode callback).
|
||
*
|
||
* @return @c YES if an ad has been loaded into this incentivized interstitial and is ready to display. @c NO otherwise.
|
||
*/
|
||
+ (BOOL)isReadyForDisplay;
|
||
|
||
/**
|
||
* Shows an incentivized interstitial over the current key window, by using the most recently pre-loaded ad.
|
||
*
|
||
* You must have called @code +[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode before you call @code +[ALIncentivizedInterstitialAd show] @endcode.
|
||
*/
|
||
+ (void)show;
|
||
|
||
/**
|
||
* Shows an incentivized interstitial over the current key window, by using the most recently pre-loaded ad.
|
||
*
|
||
* You must have called @code +[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode before you call @c showAndNotify.
|
||
*
|
||
* By using the @c ALAdRewardDelegate, you can verify with AppLovin servers that the video view is legitimate, as AppLovin will confirm whether
|
||
* the specific ad was actually served. Then AppLovin will ping your server with a URL at which you can update the user’s balance. The Reward Validation
|
||
* Delegate will tell you whether this service was able to reach AppLovin servers or not. If you receive a successful response, you should refresh the user’s
|
||
* balance from your server. For more info, see the documentation.
|
||
*
|
||
* @param adRewardDelegate The reward delegate to notify upon validating reward authenticity with AppLovin.
|
||
*
|
||
* @see <a href="https://dash.applovin.com/documentation/mediation/s2s-rewarded-callback-api">MAX Integration Guide ⇒ MAX S2S Rewarded Callback API</a>
|
||
*/
|
||
+ (void)showAndNotify:(nullable id<ALAdRewardDelegate>)adRewardDelegate;
|
||
|
||
#pragma mark - Integration, Instance Methods
|
||
|
||
/**
|
||
* Initializes an incentivized interstitial with a specific custom SDK.
|
||
*
|
||
* This is necessary if you use @code +[ALSdk sharedWithKey:] @endcode.
|
||
*
|
||
* @param sdk An SDK instance to use.
|
||
*/
|
||
- (instancetype)initWithSdk:(ALSdk *)sdk;
|
||
|
||
#pragma mark - Integration, zones
|
||
|
||
/**
|
||
* Initializes an incentivized interstitial with a zone.
|
||
*
|
||
* @param zoneIdentifier The identifier of the zone for which to load ads.
|
||
*/
|
||
- (instancetype)initWithZoneIdentifier:(NSString *)zoneIdentifier;
|
||
|
||
/**
|
||
* Initializes an incentivized interstitial with a zone and a specific custom SDK.
|
||
*
|
||
* This is necessary if you use @code +[ALSdk sharedWithKey:] @endcode.
|
||
*
|
||
* @param zoneIdentifier The identifier of the zone for which to load ads.
|
||
* @param sdk An SDK instance to use.
|
||
*/
|
||
- (instancetype)initWithZoneIdentifier:(NSString *)zoneIdentifier sdk:(ALSdk *)sdk;
|
||
|
||
/**
|
||
* The zone identifier this incentivized ad was initialized with and is loading ads for, if any.
|
||
*/
|
||
@property (copy, nonatomic, readonly, nullable) NSString *zoneIdentifier;
|
||
|
||
/**
|
||
* Pre-loads an incentivized interstitial, and notifies your provided Ad Load Delegate.
|
||
*
|
||
* Invoke this once to pre-load, then do not invoke it again until the ad has has been closed (e.g., in the
|
||
* @code -[ALAdDisplayDelegate ad:wasHiddenIn:] @endcode callback).
|
||
*
|
||
* @warning You may pass a @c nil argument to @c preloadAndNotify if you intend to use the synchronous
|
||
* (@code +[ALIncentivizedIntrstitialAd isReadyForDisplay] @endcode) flow. This is <em>not</em> recommended; AppLovin <em>highly recommends</em> that
|
||
* you use an ad load delegate.
|
||
*
|
||
* Note that AppLovin tries to pull down the next ad’s resources before you need it. Therefore, this method may complete immediately in many circumstances.
|
||
*
|
||
* @param adLoadDelegate The delegate to notify that preloading was completed. May be @c nil (see warning).
|
||
*/
|
||
- (void)preloadAndNotify:(nullable id<ALAdLoadDelegate>)adLoadDelegate;
|
||
|
||
/**
|
||
* Whether or not an ad is currently ready on this object. You must first have called @code +[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode in order
|
||
* for this value to be meaningful.
|
||
*
|
||
* @warning It is highly recommended that you implement an asynchronous flow (using an @c ALAdLoadDelegate with
|
||
* @code +[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode rather than checking this property. This class does not contain a queue and can
|
||
* hold only one preloaded ad at a time. Therefore, you should <em>not</em> simply call
|
||
* @code +[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode any time this method returns @c NO; it is important to invoke only one ad load —
|
||
* then not invoke any further loads until the ad has been closed (e.g., in the @code -[ALAdDisplayDelegate ad:wasHiddenIn:] @endcode callback).
|
||
*
|
||
* @return @c YES if an ad has been loaded into this incentivized interstitial and is ready to display. @c NO otherwise.
|
||
*/
|
||
@property (readonly, atomic, getter=isReadyForDisplay) BOOL readyForDisplay;
|
||
|
||
/**
|
||
* Shows an incentivized interstitial over the current key window, by using the most recently pre-loaded ad.
|
||
*
|
||
* You must have called @code +[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode before you call @c show.
|
||
*/
|
||
- (void)show;
|
||
|
||
/**
|
||
* Shows an incentivized interstitial over the current key window, by using the most recently pre-loaded ad.
|
||
*
|
||
* You must have called @code +[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode before you call @c showAndNotify.
|
||
*
|
||
* By using the @c ALAdRewardDelegate, you can verify with AppLovin servers that the video view is legitimate, as AppLovin will confirm whether
|
||
* the specific ad was actually served. Then AppLovin will ping your server with a URL at which you can update the user’s balance. The Reward Validation
|
||
* Delegate will tell you whether this service was able to reach AppLovin servers or not. If you receive a successful response, you should refresh the user’s
|
||
* balance from your server. For more info, see the documentation.
|
||
*
|
||
* @param adRewardDelegate The reward delegate to notify upon validating reward authenticity with AppLovin.
|
||
*
|
||
* @see <a href="https://dash.applovin.com/documentation/mediation/s2s-rewarded-callback-api">MAX Integration Guide ⇒ MAX S2S Rewarded Callback API</a>
|
||
*/
|
||
- (void)showAndNotify:(nullable id<ALAdRewardDelegate>)adRewardDelegate;
|
||
|
||
/**
|
||
* Shows an incentivized interstitial, by using the most recently pre-loaded ad.
|
||
*
|
||
* You must have called @code +[ALIncentivizedInterstitialAd preloadAndNotify:] @endcode before you call @c showAd.
|
||
*
|
||
* By using the @c ALAdRewardDelegate, you can verify with AppLovin servers that the video view is legitimate, as AppLovin will confirm whether
|
||
* the specific ad was actually served. Then AppLovin will ping your server with a URL at which you can update the user’s balance. The Reward Validation
|
||
* Delegate will tell you whether this service was able to reach AppLovin servers or not. If you receive a successful response, you should refresh the user’s
|
||
* balance from your server. For more info, see the documentation.
|
||
*
|
||
* @param ad The ad to render into this incentivized ad.
|
||
* @param adRewardDelegate The reward delegate to notify upon validating reward authenticity with AppLovin.
|
||
*
|
||
* @see <a href="https://dash.applovin.com/documentation/mediation/s2s-rewarded-callback-api">MAX Integration Guide ⇒ MAX S2S Rewarded Callback API</a>
|
||
*/
|
||
- (void)showAd:(ALAd *)ad andNotify:(nullable id<ALAdRewardDelegate>)adRewardDelegate;
|
||
|
||
- (instancetype)init __attribute__((unavailable("Use initWithSdk:, initWithZoneIdentifier:, or [ALIncentivizedInterstitialAd shared] instead.")));
|
||
+ (instancetype)new NS_UNAVAILABLE;
|
||
|
||
@end
|
||
|
||
NS_ASSUME_NONNULL_END
|