美文网首页iOS进阶iOS开发iOS Blog
iOS启动页广告XHLaunchAd

iOS启动页广告XHLaunchAd

作者: 朱晓辉 | 来源:发表于2016-08-29 10:15 被阅读8933次
    header.png

    一.前言:

    1.现在越来越多的App在启动时插入广告,因平时项目中常用到,所以特意写了一个库,他叫XHLaunchAd.
    2.Github地址:https://github.com/CoderZhuXH/XHLaunchAd
    3.导入该库仅用几行简单的代码就能实现启动页静态/动态广告功能.
    4.该项目发布2个月以来,已经收到 300 多个 star ,目前已经更新到V2.1.3版本,现分享给大家.

    -> XHLaunchAd (2.1.3)
       几行代码接入启动页广告,自带图片下载、缓存相关功能,无任何第三方依赖,支持静态/动态、全屏/半屏广告,
       支持LaunchImage或者LaunchScreen.
       pod 'XHLaunchAd', '~> 2.1.3'
       - Homepage: https://github.com/CoderZhuXH/XHLaunchAd
       - Source:   https://github.com/CoderZhuXH/XHLaunchAd.git
       - Versions: 2.1.3, 2.1.2, 2.1.1, 2.1.0, 2.0.1, 2.0, 1.2, 1.1.4, 1.1.3, 1.1.2,
       1.1, 1.0 [master repo]
    

    二.效果:

    ScreenShot01.gif ScreenShot02.gif

    三.XHLalunchAd特性:

    • 1.支持全屏/半屏广告.
    • 2.支持静态/动态广告.
    • 3.支持广告点击事件.
    • 4.自带图片下载,缓存功能.
    • 5.无依赖其他第三方框架.
    • 6.支持未检测到广告数据,设置启动页停留时间.
    • 7.支持启动页为LaunchImage或者LaunchScreen.storyboard.

    四.API:

    • 主要提供两个API,调用非常简单
    • 1.初始化方法
    /**
     *  显示启动广告
     *
     *  @param frame      广告frame
     *  @param setAdImage 设置AdImage回调
     *  @param showFinish 广告显示完成回调
     */
    +(void)showWithAdFrame:(CGRect)frame setAdImage:(setAdImageBlock)setAdImage showFinish:(showFinishBlock)showFinish;
    
    • 2.数据源方法
    /**
     *  设置广告数据
     *
     *  @param imageUrl       图片url
     *  @param duration       广告停留时间
     *  @param skipType       跳过按钮类型
     *  @param options        图片缓存机制
     *  @param completedBlock 异步加载完图片回调
     *  @param click          广告点击事件回调
     */
    -(void)setImageUrl:(NSString*)imageUrl duration:(NSInteger)duration skipType:(SkipType)skipType options:(XHWebImageOptions)options completed:(XHWebImageCompletionBlock)completedBlock click:(clickBlock)click;
    

    五.调用:

    • 在AppDelegate中导入XHLaunchAd.h 头文件,在didFinishLaunchingWithOptions:中调用初始化方法和数据源方法即可,如下:
        //1.->显示启动广告(初始化方法)
        [XHLaunchAd showWithAdFrame:广告frame大小 setAdImage:^(XHLaunchAd *launchAd) {
                
                //未检测到广告数据,启动页停留时间,默认3,(设置4即表示:启动页显示了4s,还未检测到广告数据,就自动进入window根控制器)
                //launchAd.noDataDuration = 4;
    
                //2.->设置广告数据(数据源方法)
                [launchAd setImageUrl:广告图片URL链接 duration:停留时间 skipType:跳过按钮类型 options:缓存机制 completed:^(UIImage *image, NSURL *url) {
                    
                    //异步加载图片完成回调,若需根据图片尺寸,刷新广告frame,可在这里操作
                    //launchAd.adFrame = ...;
                    
                } click:^{
                    
                    //广告点击事件
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:广告点击跳转链接]];
                    
                }];
      
        } showFinish:^{
            
            //广告展示完成回调,设置window根控制器
            self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[UIViewController alloc] init]];
            
        }];
    

    六小结:

    相关文章

      网友评论

      • 茗涙:作者框架拆分的比较不错,如果再出个原理的讲解之类文章,应该会更好:smile:
      • LiwaySun:在启动页和你自定义启动页时会闪跳(图片显示衔接问题),这个怎么解决?
      • shine丶明:在程序加载过程中XHLaunchAdManager的初始化在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions之前,这是为什么呢,还有就是XHLaunchAdManager他初始化的位置在哪里,菜鸟一只,求学习:pray:
        朱晓辉:@shine丶明 在XHLaunchAdManager 的+(void)load方法中初始化的,+(void)load方法会在main函数之前自动调用
      • GoogleBoy:很不错,谢谢大神分享
      • 流火绯瞳:请问,您是如何将创建的window(广告页展示)和业务window进行切换的?或者如何将创建的widow添加到当前window的,在您的源码里没有找到这部分的内容,谢谢!
        朱晓辉:@流火绯瞳 自定义window设置hidden = NO即可显示,不用添加...
        流火绯瞳:@朱晓辉 看到了这段
        UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        window.rootViewController = [XHLaunchAdController new];
        window.rootViewController.view.backgroundColor = [UIColor clearColor];
        window.rootViewController.view.userInteractionEnabled = NO;
        window.windowLevel = UIWindowLevelStatusBar + 1;
        window.hidden = NO;
        window.alpha = 1;
        _window = window;

        但是不明白是如何将他添加到当前window上的, 我看消失的时候, 也只是隐藏掉这个创建的window的:joy:
        朱晓辉:window添加在XHLaunchAd.m大概202行位置
      • c2fffd2b0090:你好 ,请问可以清除 单一张广告的缓存吗?我的意思是 ,比如后台返回一个bool值,不需要展示上一次的广告了 ,就清除上一次的图片,有接口吗??
        朱晓辉:@打了鸡血 暂时没有提供清除单张缓存的接口!
      • c2fffd2b0090: 如果还有开机视频呢 ? 怎么拓展?
        朱晓辉:@打了鸡血 此开屏广告方案不影响业务逻辑,开机视频你正常添加就可以了!
      • 饥渴的狗崽子:没看明白哎 大神指点一下 demo里没有实例化XHLaunchAdManager,怎么刚开始就加载XHLaunchAdManager的初始化方法了 在哪里调用的 还请指点一二
        朱晓辉:在+(void)load方法中初始化的
      • coderST:你好楼主,39楼我的问题解决了,我查了下,我的网络URL是https的请求,用你给的配置方法请求不下来,我用的是你的代理,用的SD加载的,然后OK了
      • coderST:你好,为啥我用的时候,网络的URL在网页打开是正常的,为啥在APP里没有显示,只显示启动图和倒计时秒杀,我这少了什么设置吗? 忘回复! 谢谢!
      • fa4aa65d77a6:楼主缺少了,改变图片,URL没变的自动检测
      • 484eb8f59879:你好,我用这个库的时候,显示广告会先显示首页或者闪一下首页,该怎么解决呢?
      • gongzi1219:可有flex3去广告的教程?
      • 2721b6a72b5c:你好 我想问一下 我用这个实现的,但是为什么启动图加载 完消失之后,先闪现一下首页,然后才显示出广告页??
        禾乃立川:你好,想问一下这个问题解决了吗,我也遇到了
        Eddie_吉:真机也是同样的问题 是否是哪里设置的不对
        Eddie_吉:@楼主 同样的问题 需要修复一下 测试机上面 启动图完了 会闪一下首页 然后显示广告页
      • H_Cynic:为什么gif图片有效 而换成视频广告方法 却一直 Error:视频文件未找到,或名称有误!
        我确定视频名称没错 也拖进工程里面了
      • 逆光少年:要是能对源码进行分析就好了
      • sun_dev:app从后台到前台如何加广告?
        朱晓辉:@Guo浮沉 可以
        sun_dev:@朱晓辉 支持界面自定义吗?就是上半部分显示广告,下半部分为公司的logo
        朱晓辉:详见XHLaunchAd3.x 有提供下面这个参数 地址:http://www.jianshu.com/p/775f2d508852
        imageAdconfiguration.showEnterForeground = YES;//后台返回时,是否显示广告
      • 幽烛:好厉害啊:+1:
      • 汾酒iOSer:我使用了你的这个来加载广告,而且加了引导页之后会有问题,我现在的疑惑是引导页是加载在什么流程,广告,引导页的流程的先后顺序是怎么排布的???
        朱晓辉:开屏广告是加载在新版本引导页之前的!
        开屏广告是在程序启动时显示的,启动后才显示其它的!
      • bdcd68daddc0:hello 大神 我们这边要求:1.展示图片,没点击事件。2.展示图片,点击跳转项目内某个地方。第2条我根据你提供的那个点击事件已经做好处理了。问题是1.展示图片无点击事件的时候没做任何处理,但是点击了会跳过启动页广告。openurlstring也没设置的,为啥会跳过去,,我想了一下过来问问👀
        bdcd68daddc0:@nayibuzai 可以了 在XHLaunchAd.m -- adClickAction方法中 XHLaunchAdConfiguration * configuration = [self commonConfiguration];后边加一个判定,将[self.delegate xhLaunchAd:self clickAndOpenURLString:configuration.openURLString]; [self remove];放入if (configuration.openURLString.length>0) {}的括号内,在appdelegate.m的时候遇到情况1不设置openURLString
        bdcd68daddc0:如果把广告点击事件的回调注销了,那就实现了1效果,但是2效果肯定无法实现了,,,估计大神也不常上线。我再研究一下怎么搞
      • Maple_chang:大神,我们的APP在启动过程中需要请求广告数据,还要执行其他任务,发现请求下数据来之后添加到window会很慢,主线程好像被其他任务卡主了。
      • codebystone:为什么我的项目在LaunchImage之后会先加载window的rootViewController,然后再加载网络请求下来的图片呢?
        2721b6a72b5c:你好,你这个问题解决了吗?我也遇到同样的问题?不知道怎么解决
        codebystone:用的是最新版本
      • 浪漫恋星空:楼主你好 当点击广告的时候,进入广告显示页面.讲道理计时器应该要继续走,看完广告返回来直接进入主页不是更合理么?
      • 乒什么乓:假如我是一个写死的图片 URL,只是让服务端更改对应的图片,是不是把 option 设置为 XHWebImageRefreshCached 就可以?还是有其他更完美的解决办法吗?
        朱晓辉:@Vanbein 对,设为这个就可以了
      • 很花花:状态栏如何隐藏
        朱晓辉:@很花花 状态栏影藏 需要自己在工程中设置额
      • 73565c8c3227:楼主你好 代码很棒 可发现个小问题 点击跳转按钮后 时间还是会倒计时到0秒而不是停止?
      • Homin818:好像在真实项目中使用的时候,点击广告必须要快速点击才有反应
      • 8701aff6ce4c:不知道为什么刚运行就会报错,广告图也无法显示,始终停留在启动页 报这样的错Cannot form weak reference to instance (0x13c6cd880) of class WKWebViewController. It is possible that this object was over-released, or is in the process of deallocation.
      • L一N:楼主 因为公司需求,我在广告点击事件present一个VC,可是因为方法执行顺序,展示完广告后会把一个tabVC设成rootVC ,present的VC就消失了,想问怎么解决
      • 空转风:请问如果有本地的lunchImage,再加上广告代码会有冲突吗?
        空转风:@朱晓辉 恩恩,真机跑了,真是好用!!!感谢楼主无私分享
        朱晓辉:@年光逝也被僵尸号占了 不会
      • 漫步的小蚂蚁:进入广告页,首页的时间timer不会走了,这个跟其他软件的有点区别
      • shenchao123444:请问你的图片url是代码中写死的?
        shenchao123444:@朱晓辉 或者是前一次取得图片地址,在下一次打开的时候再去加载?
        shenchao123444:@朱晓辉 在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions获取吗,这样的话在网络差的情况下会不会出现异常
        朱晓辉:url要从服务器获取.
      • ec4e3d0f5959:如果AppDelegate中不进行代码显示RootViewController 用main.storyboard 的话在广告结束后不回进行跳转怎么解决?
      • 改变自己_now:朋友你这样实现,当收到推送,点击打开会有问题,
        Heaven7th:楼主, 弱弱的问下, 跳转肯定要放在广告展示完成那里具体怎么做,xhLaunchAdShowFinish这个方法是结束广告,然后,我用极光推送进行跳转处理, 这两个方法怎么关联一下?
        改变自己_now:@为谁而鸣 因为你是优先去显示广告页面,收到推送打开后你需要处理跳转问题啊
        朱晓辉:@为谁而鸣 可以描述下你遇到的问题……
      • 不喜欢说话的小张同学:无广告的跳过时间,不起作用
        朱晓辉:@牛奔奔 已经修正,可以去跟新下
      • fc18f69e6ff0:并且在没有网络的情况下.不会有广告,可看今日头条版本
        fc18f69e6ff0:@朱晓辉 ok
        朱晓辉:@闭上眼睛 需要自己缓存图片url,没网时传缓存url...
      • fc18f69e6ff0:发现一个bug 广告页不显示 只显示读秒
        朱晓辉:@闭上眼睛 可以检查下你图片链接是否有效可用
        fc18f69e6ff0:@朱晓辉 但是一直是这样啊 ,就是显示不出来
        朱晓辉:@闭上眼睛 图片下载中...
      • 6b80abe14784:如何网络差,这种怎么处理
        朱晓辉:@请叫我小黑 网络差,广告加载不出来的话,只能显示启动页..
      • 叫我李五:nice~
      • xiaomayi2012:不错,,正好收藏。。请问有的用户不愿意等待,能实现用户手动滑动广告吗??
        xiaomayi2012:@朱晓辉 嗯,非常不错 支持下去。。 :smile:
        朱晓辉:@xiaomayi2012 可以点右上跳过按钮,跳过广告!
      • 笛音夏扇:已star
      • BeSt2wazi:可以啊
      • 五蕴盛:收藏先
      • Rickie_Lambert:厉害👍

      本文标题:iOS启动页广告XHLaunchAd

      本文链接:https://www.haomeiwen.com/subject/xxftettx.html