内容简介:我是个人开发者, 然后我的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
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
响应式Web设计实践
[美] Tim Kadlec / 侯鸿儒 / 人民邮电出版社 / 2013-3-1 / 55.00元
随着各种各样的移动设备不断地涌现到使用者面前,Web设计的适应性已经成为设计师们所面临的最为艰巨的挑战。你设计出的网站不仅要在桌面计算机的大尺寸屏幕上可以为用户提供友好的UI和用户体验,同时在小尺寸屏幕上也应该可以提供一致的用户体验,并可以让用户能够在桌面大屏幕上和移动小屏幕上平滑切换,同时没有任何的不适应感觉。 本书作者是一位出色的开发者,在本书中,他将诸多技术和设计理念杂糅在一起,再辅以......一起来看看 《响应式Web设计实践》 这本书的介绍吧!