接入前创建好应用ID和广告位ID
广告位 | ID |
---|---|
测试应用ID | WG_ios123 |
开屏 | SJM_S001 ,SJM_S002,SJM_S003 |
激励视频 | SJM_R001 、SJM_R003 、SJM_R002 |
banner | SJM_B001、SJM_B003、SJM_B002 |
插屏 | SJM_I001、SJM_I101 |
信息流 | SJM_F001、SJM_F002、SJM_F003 |
全屏视频 | SJM_FV001、SJM_FV002 |
视频流 | SJM_V001、SJM_V002、SJM_V003 |
短视频内容 | K90010005 |
pod 'WGAdMobile'
执行 pod install 或 pod update
将 WGAdMobile 文件夹和 WGAdMobile.podspec文件拖入到项目中,然后再在Podfile中输入
pod 'WGAdMobile', :path =>"../" # podspec 所在路径
执行 pod install 或 pod update
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
从iOS 14.5开始,只有在获得用户明确许可的前提下,应用才可以访问用户的IDFA数据并向用户投放定向广告。在应用程序调用 App Tracking Transparency 框架向最终用户提出应用程序跟踪授权请求之前,IDFA将不可用。如果某个应用未提出此请求,则读取到的IDFA将返回全为0的字符串。
1.获取 ATT 权限,请更新您的 Info.plist,添加 NSUserTrackingUsageDescription 字段和自定义文案描述。代码示例:
<key>NSUserTrackingUsageDescription</key>
<string>需要获取您设备的广告标识符,以为您提供更好的广告体验</string>
2.向用户申请权限时,请调用 requestTrackingAuthorizationWithCompletionHandler:方法。我们建议您申请权限后再请求广告,以便广告能准确的获得用户授权状态。
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>
- (void)requestIDFA {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// [self loadAd];
}];
}
iOS 15.0 中,如果是在启动方法中调用授权,不会弹出授权提示框,可以参考:https://juejin.cn/post/7018126149553225741
支持了 Apple 官方的 SKAdNetwork 框架的渠道,会在获取不到IDFA的时候,正常获取转化。为了实现这个功能,需要在info.plist添加对应的SKAdNetworkItems。
部分常用 SKAdNetworkIdentifier:
SKAdNetworkIdentifier |
---|
238da6jt44.skadnetwork |
x2jnk7ly8j.skadnetwork |
22mmun2rn5.skadnetwor |
f7s53z58qe.skadnetwork |
r3y5dwb26t.skadnetwork |
58922nb4gd.skadnetwork |
f7s53z58qe.skadnetwork |
27a282f54n.skadnetwork |
kbd757ywx3.skadnetwork |
mls7yz5dvl.skadnetwork |
4fzdc2evr5.skadnetwork |
4pfyvq9l8r.skadnetwork |
ydx93a7ass.skadnetwork |
cg4yq2srnc.skadnetwork |
p78axxw29g.skadnetwork |
示例:
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>238da6jt44.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>x2jnk7ly8j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f7s53z58qe.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>r3y5dwb26t.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>58922nb4gd.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f7s53z58qe.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>27a282f54n.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mls7yz5dvl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4fzdc2evr5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4pfyvq9l8r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cg4yq2srnc.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
</array>
1.OC
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WGAdSDKManager registerAppId:@"WG_ios123"];
return YES;
}
2.Swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
WGAdSDKManager.registerAppId("WG_ios123")
return true
}
广告接入具体师范可以参照WGAdMobileDemo
###1.开屏广告
/**
* 开屏广告素材加载成功
*/
-(void)WG_splashAdDidLoad:(WGSplashAd *)splashAd;
/**
* 开屏广告成功展示
*/
-(void)WG_splashAdSuccessPresentScreen:(WGSplashAd *)splashAd;
/**
* 开屏广告点击回调
*/
- (void)WG_splashAdClicked:(WGSplashAd *)splashAd;
/**
* 开屏广告关闭回调
*/
- (void)WG_splashAdClosed:(WGSplashAd *)splashAd;
/**
* 应用进入后台时回调
* 详解: 当点击下载应用时会调用系统程序打开,应用切换到后台
*/
- (void)WG_splashAdApplicationWillEnterBackground:(WGSplashAd *)splashAd;
/**
* 开屏广告倒记时结束
*/
- (void)WG_splashAdCountdownEnd:(WGSplashAd*)splashAd;
/**
* 开屏广告错误
*/
- (void)WG_splashAdError:(WGSplashAd *)splashAd withError:(NSError *)error;
_splashAd = [[WGSplashAd alloc]initWithPlacementId:adId];
_splashAd.fetchDelay = 5;
_splashAd.delegate = self;
[_splashAd loadAd];
/**
广告数据加载成功回调
@param rewardedVideoAd WGRewardVideoAd 实例
*/
- (void)WG_rewardVideoAdDidLoad:(WGRewardVideoAd *)rewardedVideoAd;
/**
视频数据下载成功回调,已经下载过的视频会直接回调
@param rewardedVideoAd WGRewardVideoAd 实例
*/
- (void)WG_rewardVideoAdVideoDidLoad:(WGRewardVideoAd *)rewardedVideoAd;
/**
视频广告展示
@param rewardedVideoAd WGRewardVideoAd 实例
*/
- (void)WG_rewardVideoAdDidShow:(WGRewardVideoAd *)rewardedVideoAd;
/**
视频播放页关闭
@param rewardedVideoAd WGRewardVideoAd 实例
*/
- (void)WG_rewardVideoAdDidClose:(WGRewardVideoAd *)rewardedVideoAd;
/**
视频广告信息点击
@param rewardedVideoAd WGRewardVideoAd 实例
*/
- (void)WG_rewardVideoAdDidClicked:(WGRewardVideoAd *)rewardedVideoAd;
//奖励触发
- (void)WG_rewardVideoAdDidRewardEffective:(WGRewardVideoAd *)rewardedVideoAd;
/**
视频广告视频播放完成
@param rewardedVideoAd WGRewardVideoAd 实例
*/
- (void)WG_rewardVideoAdDidPlayFinish:(WGRewardVideoAd *)rewardedVideoAd;
/**
视频广告各种错误信息回调
@param rewardedVideoAd WGRewardVideoAd 实例
@param error 具体错误信息
*/
- (void)WG_rewardVideoAd:(WGRewardVideoAd *)rewardedVideoAd didFailWithError:(NSError *)error;
WGRewardVideoModel *model = [[WGRewardVideoModel alloc]init];
model.userId = @"testId123";
model.reward_name = @"奖励";
model.reward_amount = 10;
self.rewardVideoAd = [[WGRewardVideoAd alloc] initWithPlacementId:adId rewardedVideoModel:model];
self.rewardVideoAd.delegate = self;
[self.rewardVideoAd loadAd];
/**
插屏广告加载成功
*/
- (void) WG_interstitialAdDidLoad:(WGInterstitialAd*) ad;
/**
插屏广告加载失败
*/
- (void) WG_interstitialAdDidLoadFail:(WGInterstitialAd*) ad error:(NSError * __nullable)error;
/**
插屏广告展示成功
*/
- (void) WG_interstitialAdDidPresentScreen:(WGInterstitialAd*) ad;
/**
插屏广告点击
*/
- (void) WG_interstitialAdDidClick:(WGInterstitialAd*) ad;
/**
插屏广告关闭
*/
- (void) WG_interstitialAdDidClose:(WGInterstitialAd*) ad;
/**
插屏广告详情页关闭
*/
- (void) WG_interstitialAdDetailDidClose:(WGInterstitialAd*) ad;
/**
插屏广告其他错误
*/
- (void) WG_interstitialAdDidFail:(WGInterstitialAd*) ad error:(NSError * __nullable)error;
self.interstitialAd = [[WGInterstitialAd alloc]initWithPlacementId:adId];
self.interstitialAd.delegate = self;
[self.interstitialAd loadAd];
/**
* 广告加载成功
*/
-(void)WG_feedVideoProviderLoadSuccess:(WGFeedVideoProvider *)provider views:(NSArray<__kindof WGFeedVideoView *> *)views;
/**
* 广告加载失败
*/
-(void)WG_feedVideoProviderLoadFail:(WGFeedVideoProvider *)provider error:(NSError *_Nullable)error;
/**
* 广告渲染成功
*/
-(void)WG_feedVideoAdViewRenderSuccess:(WGFeedVideoProvider *)provider view:(WGFeedVideoView*)adView;
/**
* 广告渲染失败
*/
-(void)WG_feedVideoAdViewRenderFail:(WGFeedVideoProvider *)provider view:(WGFeedVideoView*)adView error:(NSError *_Nullable)error;
/**
* 广告曝光回调
*/
-(void)WG_feedVideoAdViewWillShow:(WGFeedVideoProvider *)provider view:(WGFeedVideoView*)adView;
/**
视频广告播放完毕
*/
-(void)WG_feedVideoAdViewPlayerDidPlayFinish:(WGFeedVideoProvider *)provider view:(WGFeedVideoView*)adView;
/**
* 广告点击回调
*/
-(void)WG_feedVideoAdViewDidClick:(WGFeedVideoProvider *)provider view:(WGFeedVideoView*)adView;
/**
* 广告详情页面即将展示回调
*/
-(void)WG_feedVideoAdViewDetailViewWillPresentScreen:(WGFeedVideoProvider *)provider view:(WGFeedVideoView*)adView;
/**
*广告详情页关闭回调
*/
-(void)WG_feedVideoAdViewDetailViewClosed:(WGFeedVideoProvider *)provider view:(WGFeedVideoView*)adView;
self.adProvider = [[WGFeedVideoProvider alloc] initWithPlacementId:self.placementId];
self.adProvider.delegate = self;
self.adProvider.adSize = self.tableView.bounds.size;
self.adProvider loadAd:4];
/**
* 广告加载成功回调中处理数据
*/
- (void)WG_feedVideoProviderLoadSuccess:(WGFeedVideoProvider *)provider views:(NSArray<__kindof WGFeedVideoView *> *)views{
if (views.count) {
__weak typeof(self) weakSelf = self;
[views enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
WGFeedVideoView *videoView = (WGFeedVideoView *)obj;
videoView.rootViewController = weakSelf;
// important: 此处会进行WKWebview的渲染,建议一次最多预加载三个广告,如果超过3个会很大概率导致WKWebview渲染失败。
[videoView render];
NSInteger index = idx*2;
[weakSelf.dataArray insertObject:videoView atIndex:index];
}];
}
[self.tableView reloadData];
}
@protocol WGNativeExpressFeedAdManagerDelegate <NSObject>
@optional
/**
模板信息流广告数据加载成功
*/
-(void)WG_nativeExpressFeedAdManagerSuccessToLoad:(WGNativeExpressFeedAdManager *)adsManager nativeAds:(NSArray<WGNativeExpressFeedAd *> *_Nullable)feedAdDataArray;
/**
模板信息流广告数据加载失败
*/
- (void)WG_nativeExpressFeedAdManager:(WGNativeExpressFeedAdManager *)adsManager didFailWithError:(NSError *_Nullable)error;
@end
@protocol WGNativeExpressFeedAdDelegate <NSObject>
@optional
/**
* 广告渲染成功
*/
- (void)WG_nativeExpressFeedAdRenderSuccess:(WGNativeExpressFeedAd *)feedAd;
/**
* 广告渲染失败
*/
- (void)WG_nativeExpressFeedAdRenderFail:(WGNativeExpressFeedAd *)feedAd;
/**
*广告即将展示
*/
- (void)WG_nativeExpressFeedAdViewWillShow:(WGNativeExpressFeedAd *)feedAd;
/**
*广告点击
*/
- (void)WG_nativeExpressFeedAdDidClick:(WGNativeExpressFeedAd *)feedAd;
/**
*不喜欢该广告
*/
- (void)WG_nativeExpressFeedAdDislike:(WGNativeExpressFeedAd *)feedAd;
/**
*展示落地页
*/
- (void)WG_nativeExpressFeedAdDidShowOtherController:(WGNativeExpressFeedAd *)nativeAd;
/**
*关闭落地页
*/
- (void)WG_nativeExpressFeedAdDidCloseOtherController:(WGNativeExpressFeedAd *)nativeAd;
@end
_feedAd = [[WGNativeExpressFeedAdManager alloc] initWithPlacementId:self.placementId size:CGSizeMake(self.tableView.frame.size.width, 0)];
_feedAd.delegate = self;
[_feedAd loadAdDataWithCount:3];
/**
模板信息流广告数据加载成功
*/
-(void)WG_nativeExpressFeedAdManagerSuccessToLoad:(WGNativeExpressFeedAdManager *)adsManager nativeAds:(NSArray<WGNativeExpressFeedAd *> *)feedAdDataArray{
NSLog(@"%s",__FUNCTION__);
//不要保存太多广告,需要在合适的时机手动释放不用的,否则内存会过大
if (self.adArray.count > 0) {
for (WGNativeExpressFeedAd *feedAd in self.adArray) {
[self.dataArray removeObject:feedAd];
}
}
for (int i = 0; i<feedAdDataArray.count; i++) {
WGNativeExpressFeedAd *feedAd = feedAdDataArray[i];
feedAd.rootViewController = self;
feedAd.delegate = self;
[feedAd render];
NSInteger index = i*3;
if (index >= self.dataArray.count) {
[self.dataArray addObject:feedAd];
}else{
[self.dataArray insertObject:feedAd atIndex:index];
}
}
self.adArray = feedAdDataArray;
}
/**
* 广告渲染成功
*/
- (void)WG_nativeExpressFeedAdRenderSuccess:(WGNativeExpressFeedAd *)feedAd{
[self.tableView reloadData];
}
banner广告加载成功
*/
- (void)WG_bannerAdViewDidLoad:(WGBannerAdView *)bannerAdView;
/**
banner广告加载失败
*/
- (void)WG_bannerAdView:(WGBannerAdView *)bannerAdView didLoadFailWithError:(NSError *_Nullable)error;
/**
bannerAdView曝光回调
*/
- (void)WG_bannerAdViewWillBecomVisible:(WGBannerAdView *)bannerAdView;
/**
关闭banner广告回调
*/
- (void)WG_bannerAdViewDislike:(WGBannerAdView *)bannerAdView;
/**
点击banner广告回调
*/
- (void)WG_bannerAdViewDidClick:(WGBannerAdView *)bannerAdView;
/**
关闭banner广告详情页回调
*/
- (void)WG_bannerAdViewDidCloseOtherController:(WGBannerAdView *)bannerAdView;
-(void)loadAdWithAdId:(NSString *)adId{
[super loadAdWithAdId:adId];
if (_bannerView) {
[_bannerView removeFromSuperview];
_bannerView = nil;
}
CGFloat width = self.view.frame.size.width;
self.bannerView = [[WGBannerAdView alloc] initWithPlacementId:adId viewController:self adSize:CGSizeMake(width, 200)];
self.bannerView.delegate = self;
[self.bannerView loadAdAndShow];
}
/**
banner广告加载成功
*/
- (void)WG_bannerAdViewDidLoad:(WGBannerAdView *)bannerAdView{
if(bannerAdView&&![self.view.subviews containsObject:bannerAdView]){
CGFloat y = self.view.frame.size.height -200-SafeBottomMargin-50;
CGRect frame = CGRectMake(0, y, self.view.frame.size.width, 200);
self.bannerView.frame = frame;
[self.view addSubview:self.bannerView];
}
}
/**
广告加载成功
*/
- (void) WG_fullScreenVideoAdDidLoad:(WGFullScreenVideoAd*) ad;
/**
广告加载失败
*/
- (void) WG_fullScreenVideoAdDidLoadFail:(WGFullScreenVideoAd*) ad error:(NSError * __nullable)error;
/**
广告展示
*/
- (void) WG_fullScreenVideoAdDidShow:(WGFullScreenVideoAd*) ad;
/**
广告点击
*/
- (void) WG_fullScreenVideoAdDidClick:(WGFullScreenVideoAd*) ad;
/**
广告关闭
*/
- (void) WG_fullScreenVideoAdDidClose:(WGFullScreenVideoAd*) ad;
/**
广告错误
*/
- (void) WG_fullScreenVideoAdDidFail:(WGFullScreenVideoAd*) ad error:(NSError * __nullable)error;
/**
广告详情页打开
*/
- (void)WG_fullScreenVideoAdDetailDidPresent:(WGFullScreenVideoAd*)ad;
/**
广告详情页关闭
*/
- (void) WG_fullScreenVideoAdDetailDidClose:(WGFullScreenVideoAd*) ad;
self.videoAd = [[WGFullScreenVideoAd alloc] initWithPlacementId:adId];
self.videoAd.delegate = self;
[self.videoAd loadAd];