内容简介:我是个人开发者, 然后我的app需要制作ios端, 我的用户要求出苹果版, 然后我的swift学得渣, 所以只有学学flutter了. 然而很遗憾的是国内没有任何一家广告联盟出了flutter SDK. 所以不得不收集资料搞一波flutter显示原生View.搜索了下, 需要使用到Flutter的插件机制, 所以请自行熟悉下UiKitView, MethodChannel, PlatformView.由于我是用的swift, 广点通的sdk是oc写得, 需要把用到的类写在桥接文件里面
我是个人开发者, 然后我的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]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
//Banner需要使用到controller
let controller = window?.rootViewController
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?) -> FlutterPlatformView {
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?, controller: UIViewController) {
self.viewId = viewId
//这是在flutter里面创建view的时候传入的参数
self.args = args as! NSDictionary
self.withFrame = withFrame
self.controller = controller
}
public func view() -> UIView {
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: <String, dynamic>{"appid": "1105344611", "posId": "1080958885885321"},
creationParamsCodec: const StandardMessageCodec(),
onPlatformViewCreated: (id) {
print(id);
},
),
height: 64,
复制代码
主要是UiKitView的使用, banner是IOS那边注册的viewID. 这篇文章是为了记录我在学习flutter添加banner广告的过程. 不喜勿喷, 谢谢 过程很简单, 就没有详细去讲述原理了. 直接上代码, 简单粗暴.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Mozilla 回应 Firefox 新建标签页显示广告:只是一项试验功能
- 数据与广告(十五):广告与游戏
- 数据与广告(二十三):计算广告的商业本质
- 数据与广告系列(二):计算广告和推荐系统
- 数据与广告系列七:广告与推荐系统技术架构
- 数据与广告(十九):推荐召回与广告 LookAlike,万物皆可 Embedding
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机组成与设计硬件/软件接口
[美] David A.Patterson、John L.Hennessy / 郑纬民 / 机械工业出版社 / 2007-4 / 75.00元
《计算机组成与设计硬件:软件接口》(原书第3版)是计算机组成的经典教材。全书着眼于当前计算机设计中最基本的概念,展示了软硬件间的关系,并全面介绍当代计算机系统发展的主流技术和最新成就。同以往版本一样,《计算机组成与设计硬件:软件接口》(原书第3版)采用MIPS处理器作为展示计算机硬件技术基本功能的核心。书中逐条指令地列举了完整的MIPS指令集,并介绍了网络和多处理器结构的基本内容。将CPU性能和程......一起来看看 《计算机组成与设计硬件/软件接口》 这本书的介绍吧!
JSON 在线解析
在线 JSON 格式化工具
Markdown 在线编辑器
Markdown 在线编辑器