资讯专栏INFORMATION COLUMN

Flutter中显示广点通Banner2广告之IOS端

番茄西红柿 / 3403人阅读

摘要:交代背景我是个人开发者然后我的需要制作端我的用户要求出苹果版然后我的学得渣所以只有学学了然而很遗憾的是国内没有任何一家广告联盟出了所以不得不收集资料搞一波显示原生技术交底搜索了下需要使用到的插件机制所以请自行熟悉下效果图上实现由于我是用

1.交代背景

我是个人开发者, 然后我的app需要制作ios端, 我的用户要求出苹果版, 然后我的swift学得渣, 所以只有学学flutter了. 然而很遗憾的是国内没有任何一家广告联盟出了flutter SDK. 所以不得不收集资料搞一波flutter显示原生View.

2.技术交底

搜索了下, 需要使用到Flutter的插件机制, 所以请自行熟悉下UiKitView, MethodChannel, PlatformView.

3.效果图

4.ios上实现

由于我是用的swift, 广点通的sdk是oc写得, 需要把用到的类写在桥接文件里面

//Runner-Bridging-Header.h
#import "GeneratedPluginRegistrant.h"
#import "GDTNativeExpressAdView.h"
#import "GDTMobBannerView.h"
#import "GDTMobInterstitial.h"
#import "GDTNativeExpressAd.h"
#import "GDTNativeAd.h"
#import "GDTSplashAd.h"
#import "GDTSDKConfig.h"
#import "GDTUnifiedBannerView.h"

在AppDelegate.swift中使用

import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate{
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]);let controller = window);if !hasPlugin("BannerPlugin") && controller != nil {
        //注册插件
        BannerPlugin.registerWithRegistrar(registar: registrar(forPlugin: "BannerPlugin"), controller: controller!)
    }
    
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

BannerPlugin.swift

import Foundation
class BannerPlugin {
    static func registerWithRegistrar(registar: FlutterPluginRegistrar, controller: UIViewController){
        registar.register(BannerViewFactory(controller: controller), withId: "banner");
    }
}

BannerViewFactory.swift

import Foundation
class BannerViewFactory : NSObject, FlutterPlatformViewFactory {
    let controller: UIViewController
    
    init(controller: UIViewController) {
        self.controller = controller
    }
    
    public func create(withFrame frame: CGRect, viewIdentifier viewId: Int64, arguments args: Any);return Banner(withFrame:frame, viewId: viewId, args: args, controller: controller)
    }
    
    func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
        return FlutterStandardMessageCodec.sharedInstance()
    }
}

Banner.swift

import Foundation
class Banner : NSObject, FlutterPlatformView, GDTUnifiedBannerViewDelegate{
    let viewId:Int64
    let args: NSDictionary
    let withFrame:CGRect
    let  controller: UIViewController
    
    init(withFrame: CGRect, viewId: Int64, args: Any);let banner = GDTUnifiedBannerView.init(frame: withFrame,
            appId: args.object(forKey: "appid") as! String,
            placementId: args.object(forKey: "posId") as! String,
            viewController: controller)
        banner.delegate = self
        banner.loadAdAndShow()
        return banner;
    }
    
    func unifiedBannerViewFailed(toLoad unifiedBannerView: GDTUnifiedBannerView, error: Error) {
        print(error)
    }
}

在flutter里面调用很简单.

 UiKitView(
                                  viewType: "banner",
                                  creationParams: {"appid": "1105344611", "posId": "1080958885885321"},
                                  creationParamsCodec: const StandardMessageCodec(),
                                  onPlatformViewCreated: (id) {
                                    print(id);
                                  },
                                ),
                          height: 64,

主要是UiKitView的使用, banner是IOS那边注册的viewID. 这篇文章是为了记录我在学习flutter添加banner广告的过程. 不喜勿喷, 谢谢 过程很简单, 就没有详细去讲述原理了. 直接上代码, 简单粗暴.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/7074.html

相关文章

  • 性能优化路——图片篇。

    摘要:判断为白名单,则直接调用,返回格式图片反之,则显示原图。处理处理,是美团云为美团主站提供的处理方式。目前,可用替换路径的方式来处理。处理实际上效果也是不错的,美团页面里以上的图片都是懒加载的,基本上都可以满足需求。 本人是一名前端开发者,在公司负责目前负责信息流服务,为五大手机厂商和各大App提供服务,每天的请求就是以亿计算,加上我们又做了SSP和DSP,就是类似于百度广告联盟,腾讯广...

    wfc_666 评论0 收藏0
  • 一篇文章了解广告全链路

    摘要:总结本文描述了广告的全链路和相关的算法知识,受限于库存算法的复杂性和个人知识面,只粗略的提出了两个方案广平使用的。 笔者加入腾讯已经快5年时光,一直负责广告前端研发工作。最近即将离开公司,特意将广告的全链路整理了一下,作为自己的一个总结。本文将从产品的角度入手,通过描述广告的玩法,让读者对广告有一个整体的概念和印象。如果你对广告熟悉,只想了解广告的后台算法逻辑,大可从第三部分开始;如果...

    mj 评论0 收藏0
  • 时间以半点为单位相连的算法

    摘要:背景在做广点通信息流数据获取的时候有这么一个字段投放时间段,格式为位字符串,且都为和,以半个小时为最小粒度,从周一零点开始至周日点结束。为不投放,为投放,全传视为全时段投放,不允许全部传。 背景 在做广点通信息流数据获取的时候有这么一个字段:time_series 投放时间段,格式为 48 * 7 位字符串,且都为 0 和 1,以半个小时为最小粒度,从周一零点开始至周日 24 点结束。...

    KoreyLee 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<