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

栏目: IOS · 发布时间: 5年前

内容简介:我是个人开发者, 然后我的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.效果图

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

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广告的过程. 不喜勿喷, 谢谢 过程很简单, 就没有详细去讲述原理了. 直接上代码, 简单粗暴.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

响应式Web设计实践

响应式Web设计实践

[美] Tim Kadlec / 侯鸿儒 / 人民邮电出版社 / 2013-3-1 / 55.00元

随着各种各样的移动设备不断地涌现到使用者面前,Web设计的适应性已经成为设计师们所面临的最为艰巨的挑战。你设计出的网站不仅要在桌面计算机的大尺寸屏幕上可以为用户提供友好的UI和用户体验,同时在小尺寸屏幕上也应该可以提供一致的用户体验,并可以让用户能够在桌面大屏幕上和移动小屏幕上平滑切换,同时没有任何的不适应感觉。 本书作者是一位出色的开发者,在本书中,他将诸多技术和设计理念杂糅在一起,再辅以......一起来看看 《响应式Web设计实践》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试