内容简介:我是个人开发者, 然后我的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
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。