Integrate Google ads.
Import the Google Mobile Advertising SDK.Before testing your ad ID begins, it's important to note that when developing and testing your app, you should make sure that you use test ads instead of the ads you actually run. Testing with ads that actually run may cause your account to be suspended.
AdMob app ID.: ca-app-pub-3940256099942544~1458002511
Banner ad test dedicated ad unit ID: ca.-app-pub-3940256099942544/2934735716
Interspersed ad test dedicated ad unit ID: ca.-app-pub-3940256099942544/4411468910
Motivate ad-specific test ad unit ID: ca.-app-pub-3940256099942544/1712485313
Native Premium Ad Test Dedicated Ad Unit ID.: ca-app-pub-3940256099942544/3986624511
CocoaPods (Preferred)
The easiest way to import the SDK into your iOS project is to use it. CocoaPods。 Open the project's Podfile and add the following line of code to the app's target:
pod 'Google-Mobile-Ads-SDK'
Then run on the command line:
pod install --repo-update
Download manually.
Download and unzip the SDK framework directly, and then import the following framework into your Xcode project:
* GoogleMobileAds.framework
* GoogleAppMeasurement.framework
* GoogleUtilities.framework
* nanopb.framework
Add the -ObjC linker tag to the build Settings of the project. Other Linker Flags In:
Update your Info.plist.
In your app's Info.plist file, add a GADApplicity 400 key with a string value of your AdMob app ID. You can find your app ID in the AdMob interface.
You can make this change programmatically:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
Initialize mobile ads.
Before loading an ad, the app should initialize the Google Mobile Advertising SDK by calling startWithCompletionHandler on GADMobileAds.sharedInstance: This will initialize the SDK and call back the handler after the initialization is complete or after a 30-second timeout. This operation only needs to be done once, preferably when the app starts, and should be called as early as possible.
@import GoogleMobileAds;
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[GADMobileAds sharedInstance] startWithCompletionHandler:nil];
return YES;
}
@end
Banner ads: Banner ads are rectangular images or text ads that occupy a place in an app layout. When users interact with the app, these ads stay on the screen and refresh automatically over time. If you're new to mobile ads, we recommend starting with banner ads.
When building and testing your app, make sure you're using test ads instead of the ads you actually run. Failure to do so may result in your account being suspended.For iOS banner ads, the easiest way to load test ads is to use the following dedicated test ad unit ID: ca-app-pub-394025609942544/2934735716.
As with all typical views, you can add GADBannerView to a storyboard or xib file. When using this method, be sure to add width and height limits to match the size of the ad you want to show. For example, when displaying a 320x50 banner ad, use a width limit of 320 points and a height limit of 50 points.
Load the ad.
Once GADBannerView has been created and configured with its properties, you are ready to load your ads. You can do this by calling loadRequest: on the GADRequest object:
To register for a banner ad event, set the delegate property on GADBannerView to the object that implements the GADBannerViewDelegate protocol. In general, the class that implements banner ads also acts as a proxy class, in which case you can set the delegate property to self.
- (void)viewDidLoad {
[super viewDidLoad];
self.bannerView = [[GADBannerView alloc]
initWithAdSize:kGADAdSizeBanner];
self.bannerView.adUnitID = @"ca-app-pub-3940256099942544/2934735716";
self.bannerView.rootViewController = self;
self.bannerView.delegate = self;
[self.view addSubview:self.bannerView];
[self.bannerView loadRequest:[GADRequest request]];
}
The GADRequest object represents a single ad request and contains attributes such as targeting information.Note that in this case, we didn't give a width or height limit because the ad size provided provides an inherent content size for banner ads to resize the view.
If you don't want to use standard dimensions defined by constants, you can use them. GADAdSizeFromCGSize
Set custom dimensions.
In order to load and display ads, you need to set the following properties for GADBannerView.
rootViewController
- This view controller is used to render overlapping ads after a user clicks on them. It should usually be set up as a view controller that contains GADBannerView.adUnitID
- Ad unit ID, through which GADBannerView should load ads.Note: Ad unit IDs are created in the AdMob interface to represent the location of ads in your app. For example, if you want to display banner ads in two view controllers, you can create an ad unit for each view controller.
Ad events.
By using GADBannerViewDelegate, you can listen for a variety of ad lifecycle events, such as when ads are turned off and when users leave the app.
Implement banner ad events.
Each method in GADBannerViewDelegate is optional and can be implemented selectively according to your needs. The following example implements each method and records a message in the console:
#pragma mark - <GADBannerViewDelegate>
I received an ad.
- (void)adViewDidReceiveAd:(GADBannerView *)adView {
NSLog("Received an ad");
}
The ad request failed.
- (void)adView:(GADBannerView *)adView didFailToReceiveAdWithError:(GADRequestError *)error {
NSLog("ad request failed Error: %", [error localizedDescription]);
}
A full-screen view is displayed in the response.
The user who clicked on the ad.
- (void)adViewWillPresentScreen:(GADBannerView *)adView {
NSLog("Full-screen view will be displayed in the response");
}
The full-screen view will be canceled.
- (void)adViewWillDismissScreen:(GADBannerView *)adView {
NSLog("Full-screen view will be cancelled");
}
Full-screen view has been canceled.
- (void)adViewDidDismissScreen:(GADBannerView *)adView {
NSLog("Canceled full-screen view");
}
A user click opens another application.
- (void)adViewWillLeaveApplication:(GADBannerView *)adView {
NSLog("User click will open another application");
}
Banner ads are not added to the view hierarchy until they are received.
You may not want to add GADBannerView to the view hierarchy until you receive your ad. To do this, you can listen to adViewDidReceiveAd: Events:
- (void)adViewDidReceiveAd:(GADBannerView *)adView {
// Add adView to view and add constraints as above.
[self addBannerViewToView:self.bannerView];
}
Animated banner ads.
After returning to a banner ad, you can also animate the ad with the adViewDidReceiveAd: event, as in the following example:
- (void)adViewDidReceiveAd:(GADBannerView *)adView {
adView.alpha = 0;
[UIView animateWithDuration:1.0 animations:^{
adView.alpha = 1;
}];
}
If you're getting overlapping ad impressions or external browser calls of all types, not just ad clicks, your app's best way to listen for the same functionality on UIViewController or UIApplication. The following table shows iOS methods that can be called at the same time as the GADBannerViewDelegate method and have the same functionality:
GADBannerViewDelegate Method iOS Method.
adViewWillPresentScreen: UIViewController 的 viewWillDisappear:
adViewWillDismissScreen: UIViewController 的 viewWillAppear:
adViewDidDismissScreen: UIViewController 的 viewDidAppear:
adViewWillLeaveApplication: UIApplicationDelegate 的 applicationDidEnterBackground:
Banner ad size.
The following table lists the standard banner ad sizes.
Dimensions (W x High, in Points) | Description. | Scope of application. | AdSize constant. |
---|---|---|---|
320x50 | Banner ads. | Phones and tablets. | kGADAdSizeBanner |
320x100 | Large banner ads. | Phones and tablets. | kGADAdSizeLargeBanner |
300x250 | Rectangle in IAB. | Phones and tablets. | kGADAdSizeMediumRectangle |
468x60 | IAB full-size banner ads. | Tablet. | kGADAdSizeFullBanner |
728x90 | IAB top banner ad. | Tablet. | kGADAdSizeLeaderboard |
The width provided x adaptive height. | Adaptive banner ads. | Phones and tablets. | No. |
Screen width x 32/50/90. | Smart banner ads. | Phones and tablets. | kGADAdSizeSmartBannerPortrait kGADAdSizeSmartBannerLandscape |
Learn more about adaptive banner ads (designed to replace smart banner ads).
Customize your ad size.
To customize the banner ad size, use . GADAdSizeFromCGSize
Set the desired size as follows:
GADAdSize size = GADAdSizeFromCGSize(CGSizeMake(300, 50));
Example on GitHub.
Example of a banner ad: Swift . . . Objective-C.
Advanced feature demo: Swift . . . Objective-C.
Banner ads on GitHub UITableView example: Swift . Objective-C.
Interspersed ads: Interspersed ads are full-screen ads that cover the entire app interface until the user shuts them down. This type of ad is best dedicated at a natural pause in the app execution process, such as between different levels of the game, or after a task has been completed.
For iOS interspersed ads, the easiest way to load test ads is to use the following test-specific ad unit ID: ca-app-pub-394025609942544/4411468910.
Create interspersed ad objects.
Interstitial ads are requested and displayed through the GAD Interstitial object. To use this object, the first step is to instantiated it and set its ad unit ID. The following example shows how. UIViewController
of the . viewDidLoad
Method to create a GAD Interstitial:
@import GoogleMobileAds;
@import UIKit;
@interface ViewController ()
@property(nonatomic, strong) GADInterstitial *interstitial;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.interstitial = [self createAndLoadInterstitial];
}
- (GADInterstitial *)createAndLoadInterstitial {
GADInterstitial *interstitial =
[[GADInterstitial alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
interstitial.delegate = self;
[interstitial loadRequest:[GADRequest request]];
return interstitial;
}
- (IBAction)doSomething:(id)sender {
if (self.interstitial.isReady) {
[self.interstitial presentFromRootViewController:self];
} else {
NSLog(@"Ad wasn't ready");
}
}
- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {
self.interstitial = [self createAndLoadInterstitial];
}
GAD Interstitial is a one-time object that loads and displays only one interstitial ad. To display multiple interstitial ads, your app needs to create a GAD Interstitial for each ad.
Ad events.
By using GAD InterstitialDelegate, you can listen for a variety of ad lifecycle events, such as when ads are turned off and when users leave the app.
Sign up to receive interspersed ad events.
To register to receive interstitial ad events, set the delegate property in GAD Interstitial to an object that implements the GAD InterstitialDelegate protocol. In general, a class that implements interspersed ads is also used as a proxy class, in which case you can set the delegate property to self, as follows:
#import "GADInterstitial.h"
#import "GADInterstitialDelegate.h"
@interface ViewController () <GADInterstitialDelegate>
@property(nonatomic, strong) GADInterstitial *interstitial;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.interstitial = [[GADInterstitial alloc] initWithAdUnitID:"ca-app-pub-3940256099942544/4411468910"];
self.interstitial.delegate = self;
}
Implement interspersed ad events.
Each method in GAD InterstitialDelegate is marked as optional, so you only need to implement the method you need. The following example implements each method and records a message in the console:
The ad request was successful.
- (void)interstitialDidReceiveAd:(GADInterstitial *)ad {
NSLog(@"interstitialDidReceiveAd");
}
The ad request failed.
- (void)interstitial:(GADInterstitial *)ad
didFailToReceiveAdWithError:(GADRequestError *)error {
NSLog(@"interstitial:didFailToReceiveAdWithError: %@", [error localizedDescription]);
}
An interspersed ad appears.
- (void)interstitialWillPresentScreen:(GADInterstitial *)ad {
NSLog(@"interstitialWillPresentScreen");
}
Interspersed ads are animatedly moved off the screen.
- (void)interstitialWillDismissScreen:(GADInterstitial *)ad {
NSLog(@"interstitialWillDismissScreen");
}
The interspersed ad has been animatedly removed from the screen.
- (void)interstitialDidDismissScreen:(GADInterstitial *)ad {
NSLog(@"interstitialDidDismissScreen");
}
click to open another application.
- (void)interstitialWillLeaveApplication:(GADInterstitial *)ad {
NSLog(@"interstitialWillLeaveApplication");
}
Some best practices.
Consider whether interspersed ads, this type of ad, are appropriate for your app.
Interspersed ads work best in apps with natural transition points. Such transition points typically exist at the end of in-app tasks, such as sharing pictures or completing a game level. Because users want to take the opportunity to take a break during the operation, showing interspersed ads at this point does not affect the user experience. Be sure to consider which points in the app process to display interspersed ads and how users might respond.
Be sure to pause when you show interspersed ads.
Interspersed ads are available in a variety of ways, including text ads, image ads, and video ads. It's important to make sure that your app also suspends certain resources for your ads when you show interspersed ads. For example, when you request to show interspersed ads, be sure to pause all audio output generated by your app.
You can find it at InterstitialDidDisms Screen.The event handling script is restored to sound playback and is called when the user ends their interaction with the ad. You should also consider pausing all resource-consuming computing tasks, such as game loops, when your ads appear. This ensures that the user does not experience image unresponsiveness, slow response, or video stuck.
Allow sufficient load time.
It's important to make sure that interspersed ads appear at the right time, as well as to make sure that users don't have to wait for ads to load.
Before you intend to call.presentFromRootViewController
before, you may wish to call.
loadRequest
Load your ads in advance to make sure your app is ready for loaded interspersed ads when ad show time comes.
Don't show too many ads to people.
While increasing the frequency of interspersed ads in your app may seem like a good way to increase revenue, doing so can impact the user experience and reduce click-through rates. Make sure that users are not frequently interrupted by ads so that they can fully enjoy using the app.
Do not use interstitialDidReceiveAd event display interstitial ads.
'This can lead to a poor user experience. Ads should be preloaded for use when you need to show them. Then check the isReady method in GAD Interstitial to see if the ad is ready to show.
Examples on GitHub
Example of interspersed ads: Swift . . . Objective-C.
(New API) Incentive Ads: Incentive Video Ads is a full-screen video ad that users can choose to watch in full-screen mode in exchange for in-app rewards. `
Prerequisites Google Mobile Ad SDK 7.42.2 or later.
For iOS incentive ads, the easiest way to load test ads is to use the following dedicated test ad unit ID: ca-app-pub-394025609942544/1712485313.
Create incentive ad objects.
Incentive ads are requested and displayed by GADRewardedAd objects. To use this object, the first step is to instantiated it and set its ad unit ID. For example, the following example shows how to create a GADRewardedAd in the viewDidLoad: method of UIViewController:
Preload the next incentive ad with GADRewardedAdDelegate.
GADRewardedAd is a one-time object. This means that after you show an incentive ad, you can no longer load another ad with that object. To request another incentive ad, you need to create a new GADRewardedAd object.
The best practice is to load another incentive ad on the rewardedAdDidDismiss on GADRewardedAdDelegate: Method to start loading the next incentive ad as soon as the last incentive ad is turned off:
@import GoogleMobileAds;
@import UIKit;
@interface ViewController ()
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.rewardedAd = [self createAndLoadRewardedAd];
}
- (GADRewardedAd *)createAndLoadRewardedAd {
GADRewardedAd *rewardedAd = [[GADRewardedAd alloc]
initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"];
GADRequest *request = [GADRequest request];
[rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
if (error) {
// Handle ad failed to load case.
} else {
// Ad successfully loaded.
}
}];
return rewardedAd;
}
- (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd {
self.rewardedAd = [self createAndLoadRewardedAd];
}
Warning: It is strongly recommended that you do not attempt to load a new ad with an ad request block when the ad load fails. If you have to complete a block load ad with an ad request, be sure to limit the number of ad load retryes to avoid consecutive ad requests failing in situations such as limited network connectivity.
Show ads.
Before you can show incentive ads to users, you must give them clear options to choose whether or not to reward them by watching incentive ads. Incentive ads must always be an experience that users can choose.
To display incentive ads, check the isReady property on GADRewardedAd to verify that the ad has finished loading, and then call PresentFromRootViewController:delegate:. The following example shows how to do this in one of UIViewController's methods of operation:
@import GoogleMobileAds;
@import UIKit;
@interface ViewController () <GADRewardedAdDelegate>
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end
@implementation ViewController
- (IBAction)doSomething:(id)sender {
...
if (self.rewardedAd.isReady) {
[self.rewardedAd presentFromRootViewController:self delegate:self];
} else {
NSLog(@"Ad wasn't ready");
}
}
Receive ad event notifications.
When an incentive ad event occurs, the presentFromRootViewController:delegate: method is called GADRewardedAdDelegate. Each method in GADRewardedAdDelegate corresponds to an event that motivates an ad life cycle. RewardedAd:userDidEarnReward: Methods need to be implemented, but all other methods of this class are optional, so you only need to implement the methods you want. The following example implements each method and logs the message to the console:
Users are rewarded.
- (void)rewardedAd:(GADRewardedAd *)rewardedAd userDidEarnReward:(GADAdReward *)reward {
// TODO: Reward the user.
NSLog(@"rewardedAd:userDidEarnReward:");
}
Show reward ads.
- (void)rewardedAdDidPresent:(GADRewardedAd *)rewardedAd {
NSLog(@"rewardedAdDidPresent:");
}
Reward ads failed to appear.
- (void)rewardedAd:(GADRewardedAd *)rewardedAd didFailToPresentWithError:(NSError *)error {
NSLog(@"rewardedAd:didFailToPresentWithError");
}
Reward ads disappear.
- (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd {
NSLog(@"rewardedAdDidDismiss:");
}
Load multiple incentive ads.
To load multiple incentive ads, follow the steps described in the Create Incentive Ads and Load Ads section for each ad you want to load. The following snippet shows how to load two incentive ads for two different ad locations.
- (void)viewDidLoad {
[super viewDidLoad];
GADRewardedAd *gameOverRewardedAd = [self
createAndLoadRewardedAdForAdUnit:@"ca-app-pub-3940256099942544/1712485313"];
GADRewardedAd *extraCoinsRewardedAd = [self
createAndLoadRewardedAdForAdUnit:@"ca-app-pub-3940256099942544/1712485313"];
}
- (GADRewardedAd *)createAndLoadRewardedAdForAdUnit:(NSString *) adUnitId {
GADRewardedAd *rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:adUnitId];
GADRequest *request = [GADRequest request];
[rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
if (error) {
// Handle ad failed to load case.
} else {
// Ad successfully loaded.
}
}];
return rewardedAd;
}
FAQs.
Can I get detailed reward information for GADRewardedAd?
Yes, if you need to. userDidEarnReward
The amount of the reward you get before the callback is triggered can be viewed. GADRewardedAd
of the . reward
Property to verify the award amount after the ad loads.
Native ads: Native ads are component-based ad formats that give you the freedom to specify how your assets will be rendered in your app. By choosing your own fonts, colors, and other details, you can deliver a natural, non-sudden display of ads that provide a richer user experience.
Native ads are creative resources that are presented to users through interface components that the platform already has. This ad is presented using the classes you've already used in Storyboard and can be presented in a form that is those that match the visual design of your app, giving users a seamless experience. When you load native ads, your app receives an ad object that contains its assets, and then the app, not the SDK, is responsible for showing them. This is different from other ad formats, and you can't adjust the look and feel of your ads when you use other ad formats.
Overall, there are two parts to successfully implant native ads: loading ads through the SDK and displaying ad content in your app. This page explains how to load ads using the SDK.
Prerequisites
Import the Google Mobile Ads SDK.For all native premium ads available on iOS, the easiest way to load test ads is to use the test-specific ad unit ID below: ca-app-pub-39402560999942544/3986624511.
Load the ad.
There are two system-defined native ad formats: app install ads and content ads.
Both ads are represented by a class:GADUnifiedNativeAd
。 Instances of this class contain footage resources for native ads. Please note that according to . GADUnifiedNativeAd
Represents the type of ad that some fields do not fill with any values (that is. nil
)。
Native ads pass. GADAdLoader
Objects are loaded, and these objects are based on . GADAdLoaderDelegate
Protocols send messages to their agents.
Initialize the ad loader.
Before you can load your ad, you must initialize the ad loader. The following code demonstrates how to initialize. GADAdLoader
After initializing GADAdLoader, you need to call its loadRequest: method to request ads:
self.adLoader = [[GADAdLoader alloc]
initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
rootViewController:rootViewController
adTypes:@[ ... ad type constants ... ]
options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;
[self.adLoader loadRequest:[GADRequest request]];
You need to specify an ad unit ID (you can use the test ID) to. adTypes
The constant passed in the array that indicates which native ad formats to request, in addition to available. options
Any options you specify in the parameters to set. About. options
For a list of desirable values for the parameters, see the Set native ad options page.
adTypes
The array should contain this constant: kGADAdLoaderAdTypeUnifiedNative
GADAdLoader
in . loadRequest:
Method accepts the same GADRequest objects as banner and interspersed ads. You can use request objects to add targeting information, just like other ad types.
Implement the ad loader agent.
Ad loader agents need to implement protocols specifically for your ad type. For unified native ads:
GADUnifiedNativeAdLoaderDelegate This agreement includes a message sent to the agent after the unified native ad loads:
Receive native ads.
- (void)adLoader:(GADAdLoader *)adLoader
didReceiveNativeAd:(GADUnifiedNativeAd *)nativeAd;
When to request an ad.
Apps that show native ads can request them before they actually appear. In many cases, this approach is recommended. For example, if an app displays a list of products with native ads, the app can load native ads throughout the list because it knows that some ads will only appear after the user scrolls through the view, and some may not show at all.
While it's good practice to pre-extract ads, don't keep old ads without showing them all the time. For any native ad object, if it still doesn't get a show after an hour of retention, it should be discarded and replaced with a new ad from a new request.
Note: When you reuse GADAdLoader, be sure to wait for each request to complete before calling loadRequest:.
Determine when the load is complete.
Called in the app. loadRequest:
, you can get the result of the request by calling:
GADAdLoaderDelegate
in .adLoader:didFailToReceiveAdWithError:
GADUnifiedNativeAdLoaderDelegate
in .adLoader:didReceiveUnifiedNativeAd:
If only a single ad is involved in a request, one of these methods is called.
If more than one ad is involved in a request, at least one callback is made to the above method, but the number of callbacks does not exceed the maximum number of ads requested.
Load multiple native ads at once.
@interface ViewController () <GADUnifiedNativeAdLoaderDelegate, GADVideoControllerDelegate>
@property(nonatomic, strong) GADAdLoader *adLoader;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
[[GADMultipleAdsAdLoaderOptions alloc] init];
multipleAdsOptions.numberOfAds = 5;
self.adLoader = [[GADAdLoader alloc] initWithAdUnitID:YOUR_AD_UNIT_ID
rootViewController:self
adTypes:@[kGADAdLoaderAdTypeUnifiedNative]
options:@[multipleAdsOptions]];
self.adLoader.delegate = self;
[self.adLoader loadRequest:[GADRequest request]];
}
Receive native advertising resources.
- (void)adLoader:(GADAdLoader *)adLoader
didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd {
// A unified native ad has loaded, and can be displayed.
}
The native ad ends loading.
- (void)adLoaderDidFinishLoading:(GADAdLoader *) adLoader {
// The adLoader has finished loading ads, and a new request can be sent.
}
The native ad failed to load.
- (void)adLoader:(GADAdLoader *)adLoader
didFailToReceiveAdWithError:(GADRequestError *)error{
}
@end
Receive notifications about native ad events.
nativeAd.delegate = self;
Native ads were played.
- (void)nativeAdDidRecordImpression:(GADUnifiedNativeAd *)nativeAd {
}
Click on the native ad.
- (void)nativeAdDidRecordClick:(GADUnifiedNativeAd *)nativeAd {
}
Native ads will have a full-screen view.
- (void)nativeAdWillPresentScreen:(GADUnifiedNativeAd *)nativeAd {
}
Native ads will cancel full-screen display.
- (void)nativeAdWillDismissScreen:(GADUnifiedNativeAd *)nativeAd {
}
Native ads do cancel full-screen viewing.
- (void)nativeAdDidDismissScreen:(GADUnifiedNativeAd *)nativeAd {
}
Open a new application.
- (void)nativeAdWillLeaveApplication:(GADUnifiedNativeAd *)nativeAd {
}
The article is compiled from Google's official documents, please contact us if there is an infringement.
Go to "Discovery" - "Take a look at "Browse" Friends Are Watching"