WGAdMobile_iOS使用文档

SDK接入说明

接入前创建好应用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

1.cocoapods方式(推荐)

pod 'WGAdMobile'

执行 pod install 或 pod update

2.本地 cocoapods 方式

将 WGAdMobile 文件夹和 WGAdMobile.podspec文件拖入到项目中,然后再在Podfile中输入

pod 'WGAdMobile', :path =>"../" # podspec 所在路径

执行 pod install 或 pod update

项目工程中添加权限

  1. ⼯程plist⽂件设置,点击右边的information Property List后边的 "+" 展开
  2. 添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项⾃动加⼊
<key>NSAppTransportSecurity</key>
  <dict>
     <key>NSAllowsArbitraryLoads</key>
   <true/>
</dict>

关于 iOS 14 AppTrackingTransparency

从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

SKAdNetwork跟踪转化

支持了 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>

运行环境

一、初始化SDK

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];

2、激励视频

激励视频回调

/**
广告数据加载成功回调

@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];

3、插屏广告

插屏广告回调

/**
 插屏广告加载成功
 */
- (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];

4、视频流

视频流回调

/**
 * 广告加载成功
 */
-(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];
}

5、模板信息流

模板信息流回调

@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];
}

6、Banner广告

Banner广告回调

 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;

Banner广告使用

-(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];
    }
}

7、全屏视频广告

全屏视频广告回调

/**
广告加载成功
*/
- (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];

SDK接入说明

关于 iOS 14 AppTrackingTransparency

SKAdNetwork跟踪转化

二、广告接入

2、激励视频

3、插屏广告

4、视频流

5、模板信息流

6、Banner广告

7、全屏视频广告