gujemsiossdk
示例项目
要运行示例项目,首先克隆仓库,然后从 Example 目录运行 pod install
。
要求
SDK 支持 iOS 8.0 及以上版本。
语言支持: Objective-C
使用 Xcode 8.1 或更高版本。
安装
gujemsiossdk 通过 CocoaPods 提供。要安装它,只需将以下行添加到 Podfile 中,然后从命令行运行 pod install
。
pod "gujemsiossdk"
请确保您已安装最新版本的 CocoaPods。我们使用了版本 1.0.0,并遇到了旧版本 CocoaPods 的问题。
如果您到目前为止还没有安装CocoaPods,请查看CocoaPods文档。
如果您不想使用CocoaPods,您应该能够复制此工作区中的类,像我们在gujemsiossdk.podspec
中所做的那样,手动添加依赖。无论如何,我们不推荐不使用CocoaPods进行安装。
变更日志
v3.2.9.1 | 02/Apr/2019
- Google Ads SDK升级到7.41.0
v3.2.9 | 18/Mar/2019
- 新增对“移动半页广告”的支持
v3.2.8.2 | 29/Jan/2019
- Cookie Header支持Yieldlab
v3.2.8.1 | 29/Jan/2019
- 进行了一些小的修复
v3.2.8 | 28/Jan/2019
- 添加了emetriq支持
- 添加了Yieldlab支持
v3.2.7 | 2018年11月16日
- GUJBannerViewController关键词为空测试
- 从常规调用中移除SmartBannerAdSizes
v3.2.6 | 2018年11月13日
- 编辑了README
- GUJNativeAd默认点击URL:无参数
v3.2.5 | 2018年11月12日
- 修复CustomTargeting Bug
v.3.2.4 | 2018年8月7日
- 为GUJNativeAdDelegate添加了一个新方法,用于在内部浏览器中打开链接
v3.2.3 | 2018年7月27日
- 修改了podfile的依赖关系
v3.2.2 | 2018年7月2日
- 将用户标记为子用户
v3.2.1 | 2018年5月18日
- Beta版本转为稳定版
- 删除了Pubmatic
- 增加了非个性化广告方法
- 删除了Smartclip
- 将Google移动广告SDK更新到7.24.1版本
- 在预览版本中删除了Teads并添加了Smartclip
- 添加了Header Bidding的Pubmatic SDK(预览版)
- 添加了Facebook Audience Network SDK
- 添加了XML原生广告功能
- 增加了iq数字应用事件功能
- 删除了Smartclip
- 将Google移动广告SDK更新到7.24.1版本
- 在预览版本中删除了Teads并添加了Smartclip
- 添加了Header Bidding的Pubmatic SDK(预览版)
- 添加了Facebook Audience Network SDK
- 添加了XML原生广告功能
- 增加了iq数字应用事件功能
将部署目标从iOS7移动到iOS8。请确保您的项目有至少8.0的部署目标。
更新了广告空间ID与广告单元ID的映射
更新了广告空间ID与广告单元ID的映射
v3.1.13 | 20/3月/2017
修复了Google-Mobile-Ads-SDK和GoogleAds-IMA-iOS-SDK-For-AdMob的版本号。
3.2.0版本新增
3.2.0版本包括以下更新
- 移除了Teads,并添加了SmartClip来提供使用移动视频广告的机会。
- 添加了GUJGenericAdContext以处理FB Audience Network SDK、Pubmatic Header Bidding和iq digital应用程序事件
- 可以使用GUJGenericAdContext代替GUJAdViewContext
- 当前版本包括对Facebook Audience Network SDK的更新。应用程序可以检索Google SDK中的facebook点位ID,然后由我们的SDK自动处理。
- 已添加Pubmatic Header Bidding。使用Pubmatic TKP,可以通过DFP介omaly值或其他键值解决方案比较DFP-Ad-Server与其他活动。
- 添加了iq digital应用程序事件功能。应用程序事件包括一个名称和一个"data"字符串。提供"setsize"、"noad"和"log"事件。请参阅示例应用程序源代码或iq digital文档以获取详细信息。"setsize"在可滚动的容器内使用可能会导致问题,因此不应在容器的底部用于广告。
- 通过XML实现了原生广告功能,作为iOS SDK和发布者服务器之间的接口,以请求XML文件。XML内容可用于原生广告视图,应用程序开发人员可以在其应用程序中单独(外观&感觉)对其进行设计。
处理iOS 9中的App Transport Security
关于iOS 9中App Transport Security(ATS)的重要注意:由DFP Server提供的大量内容仍在使用尚未切换到安全HTTPS的URL。为了避免因使用此SDK加载广告而出现麻烦,我们建议暂时禁用ATS。
将以下内容添加到您的Info.plist中将禁用ATS
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
有关详细信息,请参阅此谷歌开发者博客文章
选项
GUJAdUtils实例提供 SDK的全局选项
使用setNonPersonalizedAds方法设置NonPersonalizedAdsStatus
如果用户选择放弃G+J e|MS提供的个性化广告,请在每个应用程序视图中设置[GUJAdUtils setNonPersonalizedAds:true]。
3.1.x版本新特性:视频横幅广告
在3.1.x版本中,我们添加了一个新的特性:视频横幅广告。我们使用IMA iOS SDK加载视频广告,当用户滚动到视图时开始播放视频并展开占位符。如果DFP服务器没有可用的视频广告,则将使用Teads iOS SDK作为后备方案,无需您自己添加后备方案。更多信息请参阅_usage章节。
从v2.1.x升级到v3.x.x
如果您只是查看,请跳过本章。
如果您之前使用过此SDK的2.1.x版本,您需要注意一些重要的变化。
在内部,我们将Amobee Ad Server更换为Google的双击广告发布商(DFP)。
我们还进行了一些清理,使SDK更易于理解。
移除旧SDK安装
从2.1.x版升级的第一步是移除所有属于旧SDK安装的库和文件。这包括libGUJAdViewContext.a、libGUJAdViewContextSimulator.a、GUJAdViewContext.h、GUJAdViewControllerDelegate.h、ORMMAResourceBundle.bundle、VideoAdLib.bundle以及可能的其他文件,具体取决于您的安装。
然后,将新SDK添加到您的Pod文件中,并按上述方法运行pod install
。
将GUJAdViewControllerDelegate重命名为GUJAdViewContextDelegate
首先,我们重命名了GUJAdViewControllerDelegate
为GUJAdViewContextDelegate
,因为它代表的是GUJAdViewContext
的代理,与GUJAdViewController
无关。GUJAdViewControllerDelegate
仍然可以使用,但已弃用。只需在项目中通过搜索和替换将GUJAdViewControllerDelegate
更改为GUJAdViewContextDelegate
即可。
对rootViewController的引用
使用GUJAdViewContext
加载广告需要现在对当前的主viewController进行引用。这可以通过使用下面的新初始化方法来完成,或者简单地将它通过adViewContext.rootViewController = <YOUR_ROOT_VIEW_CONTROLLER>;
来设置。
不支持的GUJAdView组件
之前所有返回GUJAdView
的横幅初始化方法现在直接返回Google SDK中的DFPBannerView
。像GUJAdView
一样,DFPBannerView
也扩展自UIView
。
出于兼容性原因,《GUJAdViewContextDelegate》协议中旧的代理回调仍然返回一个GUJAdView
。但实际上它现在只是一个扩展自UIView的空对象。它已被弃用。你应该使用新的代理方法来返回对实际GUJAdViewContext
的引用。然后GUJAdViewContext
将有对不同由它创建的bannerView
、interstitial
或nativeContentAd
的引用。
广告单元ID替代广告空间ID
之前使用的广告空间ID(例如,“12345”)已被广告单元ID(例如,“/stern/sport/”)替换。目前您仍然可以使用广告空间ID,因为我们已经集成了一个映射文件,为所有现有的广告空间ID执行了一些魔法操作。无论如何,您可能希望最终完全切换到新的广告单元ID。
以下方法用于配置Google广告交易所后备填充。第二个参数也称为广告单元ID,但格式为“ca-app-pub-xxxxxxxxxxxxxxxx/nnnnnnnnnn”。现在已忽略,因为Google广告交易所后备填充现在在服务器端进行配置。这些方法也已弃用,不应再使用。
+ (GUJAdViewContext*)instanceForAdspaceId:(NSString*)adSpaceId adUnit:(NSString*)adUnitId;
+ (GUJAdViewContext*)instanceForAdspaceId:(NSString*)adSpaceId adUnit:(NSString*)adUnitId delegate:(id<GUJAdViewControllerDelegate>)delegate;
我们建议使用新初始化方法
+ (GUJAdViewContext *)instanceForAdUnitId:(NSString *)adUnitId rootViewController:(UIViewController *)rootViewController;
+ (GUJAdViewContext *)instanceForAdUnitId:(NSString *)adUnitId rootViewController:(UIViewController *)rootViewController delegate:(id <GUJAdViewControllerDelegate>)delegate;
……如果您还希望设置自定义标准位置(pos)和索引(ind)
adViewContext.position = <POSITION>;
adViewContext.index = <YES|NO>;
不允许设置HTTP请求参数或标头
无法在向Google Doubleclick DFP服务器发送的请求中添加HTTP请求参数或头部。这就是为什么我们删除了如下方法:- (void)addAdServerRequestHeaderField:(NSString *)name value:(NSString *)value;、- (void)addAdServerRequestHeaderFields:(NSDictionary *)headerFields;、- (void)addAdServerRequestParameter:(NSString *)name value:(NSString *)value; 和 - (void)addAdServerRequestParameters:(NSDictionary *)requestParameters;
相反,您可以通过以下新方法添加关键词或自定义目标的键值对
- (void)addCustomTargetingKeyword:(NSString *)keyword;
- (void)addCustomTargetingKey:(NSString *)key Value:(NSString *)value;
不再进行mOceon回填
我们已移除对mOceon回填服务的支持。因此,我们跳过了如下属性:@property (assign, nonatomic) BOOL mOceanBackFill; 以及GUJAdViewContext中的如下方法和函数:+ (GUJAdViewContext*)instanceForAdspaceId:(NSString*)adSpaceId site:(NSInteger)siteId zone:(NSInteger)zoneId; 和 + (GUJAdViewContext*)instanceForAdspaceId:(NSString*)adSpaceId adUnit:(NSString*)adUnitId site:(NSInteger)siteId zone:(NSInteger)zoneId delegate:(id)delegate;
删除了GUJAdViewController的引用
SDK中并没有名为GUJAdViewController
的东西。您只需使用您自己的UIViewControllers即可。这就是为什么我们从GUJAdViewContextDelegate
协议中删除了返回GUJAdViewController
的方法,这些方法是:- (void)adViewController:(GUJAdViewController*)adViewController didConfigurationFailure:(NSError*)error; 和 - (BOOL)adViewController:(GUJAdViewController*)adViewController canDisplayAdView:(GUJAdView*)adView;.
删除了GUJAdEvent的引用
此外,我们还删除了返回引用到GUJAdEvent
的方法,这在早期版本中已经删除了。被删除的方法是:- (void)bannerView:(GUJAdView*)bannerView receivedEvent:(GUJAdViewEvent*)event; 和 - (void)interstitialViewReceivedEvent:(GUJAdViewEvent*)event;,它们来自于GUJAdViewContextDelegate
协议。
相反,我们在GUJAdViewContextDelegate
协议中添加了以下代理方法
/*!
* Tells the delegate that a full screen view will be presented in response to the user clicking on
* an ad. The delegate may want to pause animations and time sensitive interactions.
*/
- (void)bannerViewWillPresentScreenForContext:(GUJAdViewContext *)context;
/*!
* Tells the delegate that the full screen view will be dismissed.
*/
- (void)bannerViewWillDismissScreenForContext:(GUJAdViewContext *)context;
/*!
* Tells the delegate that the full screen view has been dismissed. The delegate should restart
* anything paused while handling adViewWillPresentScreen:.
*/
- (void)bannerViewDidDismissScreenForContext:(GUJAdViewContext *)context;
/*!
* Tells the delegate that the user click will open another app, backgrounding the current
* application. The standard UIApplicationDelegate methods, like applicationDidEnterBackground:,
* are called immediately before this method is called.
*/
- (void)bannerViewWillLeaveApplicationForContext:(GUJAdViewContext *)context;
删除了初始化尝试的处理
在SDK的早期版本中,我们曾允许设置多个初始化尝试次数来检查加载横幅广告时视图控制器的可用性。我们移除了该机制,以及删除了GUJAdViewContext
的方法- (void)initializationAttempts:(NSUInteger)attempts;,因为设置GUJAdViewContext
初始化时的根视图控制器是开发者的责任。
移除横幅广告自动重新加载
我们移除了GUJAdViewContext
中的方法- (void)setReloadInterval:(NSTimeInterval)reloadInterval;,因为我们不希望自动加载广告。若需要根据用户交互(例如,在翻看相册时)进行广告重新加载,开发者有责任刷新广告。
清除GUJAdViewContextDelegate
我们对GUJAdViewContextDelegate
(之前称作GUJAdViewControllerDelegate
)协议进行了重构。所有现有方法均已弃用。大部分方法都得到了返回其GUJAdViewContext
引用的替代方法,以便您能区分多个上下文。然后,GUJAdViewContext
会关联到它创建的bannerView
、interstitial
或nativeContentAd
。
我们已经完全删除了回调-(void)bannerViewDidShow:(GUJAdView *)bannerView;和- (void)bannerViewDidHide:(GUJAdView *)bannerView;。横幅广告将始终自动显示,当需要显示/隐藏时,可以通过UIView的hidden
属性直接实现。
调整横幅广告和横幅的广告完成处理程序
横幅广告的初始化完成处理程序现在将返回一个DFPBanner
视图,而不是之前的GUJAdView
。
typedef BOOL (^adViewCompletion)(DFPBannerView *_adView, NSError *_error);
对于横幅广告,现在有一个单独的完成处理程序,它直接返回一个GADInterstitial
。
typedef BOOL (^interstitialAdViewCompletion)(GADInterstitial *_interstitial, NSError *_error);
用法
如果您不是从2.1.x版本迁移而来,这将是您的起点!
加载和显示横幅广告、插页式广告或原生广告非常简单。 :)
您始终从创建一个 GUJAdViewContext
或一个 GUJGenericAdContext
开始。使用 GUJGenericAdContext
,您可以自动处理Facebook Audience Network SDK - Ads,使用Pubmatic Header Bidding或iq digital app事件。定义一个类变量以保持引用。然后设置代理并指定位置以及是否为索引页上的广告(与文章相比)。位置可以是1到10之间的任何值。您可以使用预定义的常量 GUJ_AD_VIEW_POSITION_TOP
(1)、GUJ_AD_VIEW_POSITION_MID_1
(2)、GUJ_AD_VIEW_POSITION_MID_2
(3)或 GUJ_AD_VIEW_POSITION_BOTTOM
(10)来设置位置。
为每个要显示的广告创建多个 GUJAdViewContext
或 GUJGenericAdContext
实例。
您从 G+J EMS Team 获得您的广告单元ID,例如:“/6032/sdktest”
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
adViewContext = [GUJAdViewContext instanceForAdUnitId:<YOUR ADUNIT ID> rootViewController:self];
// set the delegate
adViewContext.delegate = self;
// set the position (not needed for interstitials)
adViewContext.position = GUJ_AD_VIEW_POSITION_TOP;
// set if we use the context for an index page (defaults to NO)
adViewContext.isIndex = YES;
...
}
加载一个横幅视图
将横幅视图加载到指定的位置
- (void)viewDidAppear:(BOOL)animated {
...
[adViewContext adViewWithOrigin:CGPointMake(0, 20)];
}
或者,您可以简单地调用 - (DFPBannerView *)adView;
方法,并通过自动布局约束或您喜欢的视图布局方法定位返回的视图。
返回的广告视图对象是 Google SDK for DFP Users on iOS 中已知的 DFPBannerView
类型。
有一些其他广告视图初始化方法允许您添加关键字或完成处理程序。
例如,使用完成处理程序加载横幅视图
- (void)viewDidAppear:(BOOL)animated {
...
[adViewContext adView:^BOOL(DFPBannerView *_adView, NSError *_error) {
if (_error == nil) {
// banner ready, do some layout setup
} else {
// handle the error
}
return YES; // whether or not the banner should show
}];
}
可以实施一些额外的代理回调来在加载/显示/隐藏横幅视图时与之交互
- (void)bannerViewDidFailLoadingAdWithError:(NSError *)error ForContext:(GUJAdViewContext *)context;
- (void)bannerViewInitializedForContext:(GUJAdViewContext *)context;
- (void)bannerViewWillLoadAdDataForContext:(GUJAdViewContext *)context;
- (void)bannerViewDidLoadAdDataForContext:(GUJAdViewContext *)context;
请参阅头文件中的文档以获取更多信息。
横幅视图大小
默认情况下,GUJAdViewContext 将允许在发送给 DFP 服务器的请求中包含所有可能的广告视图大小。您可以通过以下方法禁用其中一些来限制可能的大小
- (void)disableMediumRectangleAds;
- (void)disableTwoToOneAds;
- (void)disableBillboardAds;
- (void)disableDesktopBillboardAds;
- (void)disableLeaderboardAds;
或者,如果当前 GUJAdViewContext
中您想显示的唯一广告尺寸是智能横幅,您可以通过调用 - (void)allowSmartBannersOnly
方法将可能广告尺寸限制为此尺寸。上面列出的禁用方法将不再有额外效果。智能横幅在 iPhone/iPod 上通常高度为50像素,在 iPad 上高度为90像素。
添加一个可选的内容URL以进行更精确的目标营销
可以在GUJAdViewContext
上添加一个可选的内容URL,用于调用DFP请求。这是一个显示与当前视图内容等效的网站URL。DFP服务器将解析这个URL的内容以进行额外的目标定位。
- (void)setContentURL:(NSString *)contentURL;
设置发布者提供的标识符(PPID)
您可以在GUJAdViewContext
上设置一个发布者提供的标识符(PPID),以便在频率限制、受众细分和定位、按顺序广告轮播以及其他基于受众的广告交付控制中使用,该控制跨越多个设备。除非另有约定,否则请不要设置PPID。
- (void)setPublisherProvidedID:(NSString *)publisherProvidedID;
加载插播广告
使用完成处理程序加载插播视图
- (void)viewDidAppear:(BOOL)animated {
...
[adViewContext interstitialAdViewWithCompletionHandler:^BOOL(GADInterstitial *_interstitial, NSError *_error) {
if (_error == nil) {
// interstitial ready, show it when needed
} else {
// handle the error
}
return NO; // whether or not the interstitial should show automatically
}];
}
返回的插播视图对象是类型为GADInterstitial
的,这是来自谷歌SDK的DFP用户在iOS上的。
可以实现一些额外的代理回调,以在加载/显示/隐藏插播视图时与之交互
- (void)interstitialViewDidFailLoadingAdWithError:(NSError *)error ForContext:(GUJAdViewContext *)context;
- (void)interstitialViewInitializedForContext:(GUJAdViewContext *)context;
- (void)interstitialViewWillLoadAdDataForContext:(GUJAdViewContext *)context;
- (void)interstitialViewDidLoadAdDataForContext:(GUJAdViewContext *)context;
- (void)interstitialViewWillAppearForContext:(GUJAdViewContext *)context;
- (void)interstitialViewDidAppearForContext:(GUJAdViewContext *)context;
- (void)interstitialViewWillDisappearForContext:(GUJAdViewContext *)context;
- (void)interstitialViewDidDisappearForContext:(GUJAdViewContext *)context;
请参阅头文件中的文档以获取更多信息。
GADNativeContentAd(谷歌原生广告)加载原生广告
加载原生广告并通过代理回调处理结果
- (void)viewDidAppear:(BOOL)animated {
...
[adViewContext loadNativeAd];
}
- (void)nativeContentAdLoaderDidFailLoadingAdWithError:(NSError *)error ForContext:(GUJAdViewContext *)context {
// handle the error
}
- (void)nativeContentAdLoaderDidLoadDataForContext:(GUJAdViewContext *)context {
headlineLabel.text = context.nativeContentAd.headline;
bodyLabel.text = context.nativeContentAd.body;
...
}
创建的原生广告对象是类型为GADNativeContentAd
的,这是来自谷歌SDK的DFP用户在iOS上的。要显示原生广告,请将您的视图扩展为GADNativeContentAdView
,如Google SDK for DFP文档
中所述。在某些情况下,GADNativeContentAdView
将自动跟踪视图和点击,并将整个广告变得可点击,以便用户可以重定向到指定的点击通过URL。
GUJNativeAd(Gruner & Jahr Native Ad)从XML加载原生广告
要从XML加载原生广告,请使用GUJNativeAdManager
在相同视图中创建一个或多个原生广告。使用GUJNativeAd
的loadAd
方法加载原生广告,并通过代理回调处理结果
self.adManager = [GUJNativeAdManager new];
GUJNativeAd *ad = [self.adManager nativeAdWithUnitID:<YOUR ADUNIT ID>];
ad.defaultClickUrl = <BASE CLICK URL>;
ad.delegate = self;
[ad loadAd];
- (void)nativeAdDidLoad:(GUJNativeAd *)nativeAd {
//you need associate GUJNativeAd with UIView where display ad
[nativeAd registerViewForInteraction:<vUIView where display ad>];
}
- (void)nativeAd:(GUJNativeAd *)nativeAd didFailWithError:(NSError *)error {
}
- (void)nativeAdDidClick:(GUJNativeAd *)nativeAd {
}
要在加载广告后跟踪视图和点击,请调用registerViewForInteraction
有关详细信息,请参阅我们的示例实现:gijemsiossdk/Products/Main.storyboard —> 原生广告场景
加载原生Twitter广告
加载一个带有'contextWithOptions'设置为Twitter的GUJGenericAdContext,同时也必须设置一个通常的AdUnitId
self.adContext = [GUJGenericAdContext contextForAdUnitId:adUnitId
withOptions:GUJGenericAdContextOptionUseFacebook
delegate:self];
GUJGenericAdContext
带有委托回调将返回FBNativeAd
对象,如果没有包含Facebook位置ID,则返回GUJAdViewContext
或错误
- (void)genericAdContext:(GUJGenericAdContext *)adContext didLoadFacebookNativeAd:(FBNativeAd *)fbNativeAd {
}
- (void)genericAdContext:(GUJGenericAdContext *)adContext didLoadData:(GUJAdViewContext *)adViewContext {
}
- (void)genericAdContext:(GUJGenericAdContext *)adContext didFailWithError:(NSError *)error{
}
有关测试
- 需要一个Google广告单元ID才能通过DFP调用创意
- 在此创意中放置了一个Facebook位置ID,例如。
<script type='text/javascript' src='https://media.admob.com/api/v1/google_mobile_app_ads.js'></script>
<script>
admob.events.dispatchAppEvent('handOverAdViewToFacebook', '147386355810773_147386802477395');
</script>
- 要查看示例广告,您需要登录自己的Facebook应用,并将您的Facebook ID提供给您的Facebook广告提供商
有关详细信息,请参阅
- Facebook自己的文档https://developers.facebook.com/docs/audience-network/ios-native
- 我们的示例实现:gujemsiossdk/Products/Main.storyboard -> FB Native Ads Scene
- 如有疑问和建议,请与我们联系
IQ Digital应用事件
加载一个带有'contextWithOptions'设置为IQ Digital应用事件的GUJGenericAdContext,并且必须设置一个通常的AdUnitId。然后GUJGenericAdContext
可以处理广告中的回调
self.adContext = [GUJGenericAdContext contextForAdUnitId:adUnitId
withOptions:GUJGenericAdContextOptionUseIQEvents
delegate:self];
- (void)genericAdContext:(GUJGenericAdContext *)adContext didChangeBannerSize:(CGSize)size duration:(CGFloat) duration {
}
- (void)genericAdContext:(GUJGenericAdContext *)adContext didReceiveLog:(NSString *) log {
}
- (void)genericAdContextDidRemoveBannerFromView:(GUJGenericAdContext *)adContext {
}
应用事件由一个名称和一个"data"字符串组成。
setsize事件
当需要更改广告位广告 WebView 的大小时,会调用setsize事件。data字符串的格式如下:"width:height"。
参数:参数通过冒号分隔。width - 以像素为单位的广告 WebView 的新宽度(独立设备像素),为整数。特殊情况:使用max值用于调整到可用最大宽度。height - 以像素为单位的广告 WebView 的新高度(独立设备像素),为整数。特殊情况:使用max值用于调整到可用最大高度。
调用示例
"setsize","320:80" 将广告 WebView 给定为 320x80 像素的新尺寸
"setsize","320:240" 将广告 WebView 给定为 320x240 像素的新尺寸
"setsize","max:160" 将广告 WebView 调整到可用最大宽度,并保持高度为 160 像素。
"setsize","max:max" 将广告 WebView 调整到可用最大宽度和可用最大高度。
noad事件
当需要向应用发出信号,表示位置上没有预订时,会调用noad事件,应用应删除广告位置和相应的广告标签。"data"对此事件不相关,可以忽略。
log事件
为了在应用日志中写入消息,会调用log事件。这是用于调试的目的。"data"字符串包含应用需要将其输入日志的消息。
使用 IMA iOS SDK 加载视频广告
对于预审视频的集成,我们包含了 IMA iOS SDK 版本 3(Beta)。
您可以在我们的示例应用程序中找到一个示例,该应用程序基于 IMA iOS SDK 官方文档中的 Google 示例。
有关任何详细信息,请参阅 IMA iOS SDK 文档。
要加载视频广告,您需要广告标签 URL。
您的广告标签 URL 由 G+J EMS 团队 提供。
它应该看起来像这样
https://pubads.g.doubleclick.net/gampad/ads?sz=480x360&iu=/6032/sdktest/preroll&impl=s&gdfp_req=1&env=vp&output=xml_vast2&unviewed_position_start=1&url=[referrer_url]&description_url=[description_url]&correlator=[timestamp]
集成流入式视频广告(自 3.1.x 版本新增)
一旦用户滚动到指定的位置,流入式视频广告就被认为是展示/展开在滚动视图上的。
要在您的 xib 文件或 storyboards 中的 xib 文件添加流入式广告,请在您的 scrollview 上的其他视图之间添加一个占位符视图。给它设置与滚动视图相同的宽度,并且添加一个初始值为 0 的高度自动布局约束。请记住,还必须设置自动布局约束的 top、left、right 和 bottom,以将占位符视图链接到父视图及其/或其他子视图。将视图和自动布局约束连接到视图控制器作为输出
__weak IBOutlet UIScrollView *scrollView;
__weak IBOutlet UIView *inFlowAdPlaceholderView;
__weak IBOutlet NSLayoutConstraint *inFlowAdPlaceholderViewHeightConstraint;
- (void)viewDidLoad {
[super viewDidLoad];
...
inflowAdViewContext = [[GUJInflowAdViewContext alloc] initWithScrollView:scrollView
inFlowAdPlaceholderView:inFlowAdPlaceholderView
inFlowAdPlaceholderViewHeightConstraint:inFlowAdPlaceholderViewHeightConstraint
dfpAdunitId:<YOUR ADUNIT ID>
smartClipUrl:<SMART CLIP URL>
];
}
如果 DFP 服务器上没有广告,广告将从 Smart Clip 服务加载。这是 Smart Clip 上广告的链接
然后在 viewDidAppear
方法中调用
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
...
[inflowAdViewContext containerViewDidAppear];
}
在 viewWillDisappear
方法中调用 containerViewWillDisappear
,以便当用户返回时可以暂停和恢复视频。
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
...
[inflowAdViewContext containerViewWillDisappear];
}
提交您的应用程序以供应用审核
在将您的应用程序提交以供应用审核期间,您将被问及您的应用程序是否使用广告标识符(IDFA)。您需要用“是”回答这个问题。
然后选择您的应用程序使用广告标识符来“在应用中投放广告”。
如果您未来再次将应用程序提交以供另一项审核,则需要再次填写这些问题。
联系方式
如有任何疑问,请给我们发送电子邮件或打电话!
Sebastian Otte
技术项目经理
+ 49 (0) 40 / 3703 2991
j[邮件受保护]@example.com
Michael Gohl
数字广告技术负责人
+ 49 (0) 40 / 3703 2926 j[邮件受保护]@example.com
Daniel Gerold
数字广告技术总监
+ 49 (0) 40 / 3703 7415
j[邮件受保护]@example.com
许可
gujemsiossdk 在BSD许可下可用。更多信息请参阅LICENSE文件。