🔥🔥🔥 Flutter 广告插件 -- 腾讯广告、广点通、优量汇 (支持开屏、插屏、激励视频、Banner)

Overview

logo

一款优质的 Flutter 广告插件(腾讯广告、广点通、优量汇)

插件特点

  • 🔨 接入简单快速(封装原生端配置,仅需引入即可开始)
  • 📡 事件统一返回(将原生端各种重要回调事件统一返回,方便业务处理和埋点统计等需求)
  • 🎁 注重优化体验(无闪烁 Logo 开屏、权限申请、隐私跟踪申请等)
  • 🏆 极客代码封装(原生端代码不凑合,两端统一基础框架、广告事件封装抽象、易扩展新广告形式、方便开发个性化需求)

支持功能

下载体验

入门使用

引入依赖

dependencies:
  flutter_qq_ads: ^1.2.0 # 非 Null Safety 版本
  flutter_qq_ads: ^2.2.0 # Null Safety 版本

初始化广告

/// [appId] 应用媒体ID
FlutterQqAds.initAd(appId);

开屏广告

  • 半屏广告 + Logo
/// [posId] 广告位 id
/// [logo] 如果传值则展示底部logo,不传不展示,则全屏展示
/// [fetchDelay] 拉取广告的超时时间,默认值 3 秒,取值范围[1.5~5]
FlutterQqAds.showSplashAd(
    AdsConfig.splashId,
    logo: 'flutterads_logo',
    fetchDelay: 3,
  );
FlutterQqAds.showSplashAd(posId);

插屏广告

  • 插屏半屏
/// [posId] 广告位 id
/// [showPopup] Popup 形式显示(仅 Android)
/// [autoPlayOnWifi] 是否仅在 WiFi 网络下自动播放
/// [autoPlayMuted] 自动播放是否静音
/// [detailPageMuted] 详情页是否静音
FlutterQqAds.showInterstitialAd(
    posId,
    showPopup: false,
    autoPlayMuted: false,
    autoPlayOnWifi: false,
    detailPageMuted: false,
  );
  • 插屏全屏视频
/// [posId] 广告位 id
/// [showFullScreenVideo] 插屏全屏视频形式显示
FlutterQqAds.showInterstitialAd(
    posId,
    showFullScreenVideo: true,
  );
  • 插屏激励视频
/// [posId] 广告位 id
/// [showRewardVideo] 插屏激励视频形式显示
/// [customData] 设置服务端验证的自定义信息
/// [userId] 设置服务端验证的用户信息
FlutterQqAds.showInterstitialAd(
    posId,
    showRewardVideo: true,
    customData: 'customData',
    userId: 'userId',
  );

激励视频

/// [posId] 广告位 id
/// [playMuted] 是否静音播放
/// [customData] 设置服务端验证的自定义信息
/// [userId] 设置服务端验证的用户信息
FlutterQqAds.showRewardVideoAd(
    posId,
    playMuted: false,
    customData: 'customData',
    userId: 'userId',
  );

Banner

/// [posId] 广告位 id
/// [interval] 广告刷新间隔,0 或[30~120]之间的数字,单位为 s,默认 30s 
///  Android:0 表示不自动轮播 
///  iOS:0 表示关闭轮播动画,因为 iOS 没有不轮播
/// [show] 是否显示广告
AdBannerWidget(
  posId: AdsConfig.bannerId02,
  interval: 120,
  show: true,
)

Banner 广告外部需要嵌套一个带有约束布局的 Widget,如:AspectRatio、SizedBox、Container 等,示例如下:

  • 嵌套 AspectRatio (推荐)
AspectRatio(
  aspectRatio: 6.4 / 1, // 6.4:1 的比例
  child: AdBannerWidget(
    posId: AdsConfig.bannerId02,
    interval: 120,
  ),
),
  • 嵌套 SizedBox
SizedBox(
  width: 375,
  height: 100,
  child: AdBannerWidget(
    posId: AdsConfig.bannerId01,
  ),
)
  • 嵌套 Container
Container(
  width: double.infinity,
  height: 80,
  child: AdBannerWidget(
    posId: AdsConfig.bannerId,
    interval: 0,
    show: true,
  ),
)

设置广告事件监听

FlutterQqAds.onEventListener((event) {
  // 普通广告事件
  String _adEvent = 'adId:${event.adId} action:${event.action}';
  if (event is AdErrorEvent) {
    // 错误事件
    _adEvent += ' errCode:${event.errCode} errMsg:${event.errMsg}';
  } else if (event is AdRewardEvent) {
    // 激励事件
    _adEvent +=
        ' transId:${event.transId} customData:${event.customData} userId:${event.userId}';
  }
  print('onEventListener:$_adEvent');
});

事件列表

事件 说明
onAdLoaded 广告加载成功
onAdPresent 广告填充
onAdExposure 广告曝光
onAdClosed 广告关闭(开屏计时结束或者用户点击关闭)
onAdClicked 广告点击
onAdSkip 广告跳过
onAdComplete 广告播放或计时完毕
onAdError 广告错误
onAdReward 获得广告激励

这里做了统一的抽象,iOS 和 Android 原生 SDK 名称不同,如果觉得对应不上,可以提 Issues(一定要加上 log 截图)

其他配置

信任HTTP请求

苹果公司在iOS9中升级了应用网络通信安全策略,默认推荐开发者使用HTTPS协议来进行网络通信,并限制HTTP协议的请求。为了避免出现无法拉取到广告的情况,我们推荐开发者在info.plist文件中增加如下配置来实现广告的网络访问

  • 修改 info.plist
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

信任HTTP请求

请求应用跟踪透明度授权

此步骤必须要做,不然上架审核时候会被拒绝

bool result = await FlutterQqAds.requestIDFA;
  • 修改 info.plist
<key>NSUserTrackingUsageDescription</key>
<string>为了向您提供更优质、安全的个性化服务及内容,需要您允许使用相关权限</string>

请求应用跟踪透明度授权

  • 效果

预览效果

原生 SDK 版本更新方法

如果是大版本,我会第一时间适配更新,小版本可以自己更新,方法如下:

  • Android

    方法1:可以给我提 Issues 提示我更新,版本号 x.y.z,会更新 z 版本迭代

    方法2:可以自己指定版本,方法如下:

// build.gradle(android.app)
android{
  configurations.all {
      resolutionStrategy {
          force 'com.qq.e.union:union:版本号'
      }
  }
}
  • iOS

    自己手动更新,自己的项目根目录下执行即可

// 可在 ios/Podfile.lock 中查看 SDK 当前版本
cd ios
rm -rf Podfile.lock
pod repo update
pod install

分支说明

分支 说明
develop 开发分支,接受 PR
master 稳定分支,非 Null Safety
2x 稳定分支,Null Safety

遇到问题

如果你遇到问题请提 Issues 给我(提问前建议先搜索尝试,没有再提问)

支持开源

支持开源项目最好的方式就是用 1 秒点个免费的 Star

FlutterAds 系列插件

插件 描述
flutter_qq_ads 腾讯广告、广点通、优量汇 Flutter 广告插件
flutter_pangle_ads 字节跳动、穿山甲 Flutter 广告插件
flutter_baidu_ads 百度、百青藤 Flutter 广告插件(开发中)
Issues
  • 请问目前只支持开屏广告吗?

    请问目前只支持开屏广告吗?

    如题

    opened by BadReese 5
  • onNoAD:未知错误,详细码:102006

    onNoAD:未知错误,详细码:102006

    错误原因: a、错误为常规报错,没有广告填充,非sdk接入异常。 b、广告位请求匹配广告本身是一套复杂的逻辑,有人群画像、广告位效果、底价、屏蔽等多方面原因。 c、如果是新接入测试阶段新建广告位通常原因是缺乏历史数据模型,广告位竞争力差并且设备画像简陋导致匹配不到广告。 优化建议: 1、如果使用的是测试机,可以更换使用人群画像更丰富的设备尝试拉取(比如个人设备)或者在设备登录QQ,微信等丰富用户画像; 2、sdk接入可以考虑使用我们官方sdkdemo工程中所用到的广告位id,来尝试拉取广告进行测试;

    opened by yy1300326388 2
  • 未知错误,详细码: 107011

    未知错误,详细码: 107011

    平台:iOS 官方回复:出现这个提示一般是因为,请求中的操作系统类型与广告位在联盟平台的设置不匹配

    opened by yy1300326388 1
  • Code=5004

    Code=5004 "没有广告"

    错误原因: a、错误为常规报错,没有广告填充,非sdk接入异常。 b、广告位请求匹配广告本身是一套复杂的逻辑,有人群画像、广告位效果、底价、屏蔽等多方面原因。 c、如果是新接入测试阶段新建广告位通常原因是缺乏历史数据模型,广告位竞争力差并且设备画像简陋导致匹配不到广告。 优化建议: 1、如果使用的是测试机,可以更换使用人群画像更丰富的设备尝试拉取(比如个人设备)或者在设备登录QQ,微信等丰富用户画像; 2、sdk接入可以考虑使用我们官方sdkdemo工程中所用到的广告位id,来尝试拉取广告进行测试;

    opened by yy1300326388 1
  • 跑demo onNoAD adError:初始化错误,详细码:200102

    跑demo onNoAD adError:初始化错误,详细码:200102

    /gdt_ad_mob( 7231): ... 16 more D/AdSplashActivity( 7231): onNoAD adError:初始化错误,详细码:200102 D/PluginDelegate( 7231): EventChannel addEvent event:{adId=8022311121246224, errCode=2001, errMsg=初始化错误,详细码:200102, action=onAdError} D/EGL_emulation( 7231): eglMakeCurrent: 0xec1e0e20: ver 3 0 (tinfo 0xebd36e90) D/EGL_emulation( 7231): eglMakeCurrent: 0xec1e0e20: ver 3 0 (tinfo 0xebd36e90) I/flutter ( 7231): onEventListener:adId:8022311121246224 action:onAdError D/PluginDelegate( 7231): MethodChannel onMethodCall method:showSplashAd arguments:{posId=8022311121246224, logo=ic_logo2} W/ActivityThread( 7231): handleWindowVisibility: no activity for token [email protected] I/xiaoguanjia.ap( 7231): Rejecting re-init on previously-failed class java.lang.Class<com.qq.e.comm.plugin.POFactoryImpl>: java.lang.ExceptionInInitializerError:

    opened by firma 1
  • nclude of non-modular header inside framework module 'flutter_qq_ads.InterstitialPage':

    nclude of non-modular header inside framework module 'flutter_qq_ads.InterstitialPage':

    • 错误信息
    Include of non-modular header inside framework module 'flutter_qq_ads.InterstitialPage'
    Include of non-modular header inside framework module 'flutter_qq_ads.RewardVideoPage'
    Include of non-modular header inside framework module 'flutter_qq_ads.SplashPage'
    
    • 平台 iOS

    • 解决方法 设置 Allow Non-modular includes in Framework Modules 设置为 Yes 即可

    image

    opened by yy1300326388 1
  • iOS 在 Xcode 12.4 上构建报错 _OBJC_CLASS_$_SKAdImpression

    iOS 在 Xcode 12.4 上构建报错 _OBJC_CLASS_$_SKAdImpression", referenced from objc-class-ref in libGDTMobSDK.a(GDTAppStoreAdNetWorkModel.o

    • 错误信息
    Undefined symbols for architecture armv7:
          "_OBJC_CLASS_$_SKAdImpression", referenced from:
              objc-class-ref in libGDTMobSDK.a(GDTAppStoreAdNetWorkModel.o)
        ld: symbol(s) not found for architecture armv7
        clang: error: linker command failed with exit code 1 (use -v to see invocation)
    
    • 环境情况
    Xcode:12.4
    GDTMobSDK:4.13.02
    flutter_qq_ads::1.1.1
    
    opened by yy1300326388 1
  • Update README.md

    Update README.md

    Test CICD PR

    opened by yy1300326388 1
  • 【官方文档】接入文档和错误码列表

    【官方文档】接入文档和错误码列表

    opened by yy1300326388 1
  • 添加开屏超时时间设置

    添加开屏超时时间设置

    • 本次添加了超时时间设置 fetchDelay ,在Flutter 接口上统一时间为秒,iOS 原生端为秒,Android 原生端转换为毫秒。
    • 本次接口有较大变化,logo 参数由位置参数变为可选命名参数,API 发生轻微变化,请更新适配即可,操作如下。

    原本调用

    FlutterQqAds.showSplashAd(posId, 'flutterads_logo');
    

    现在调用

    FlutterQqAds.showSplashAd(posId,logo:'flutterads_logo');
    
    opened by yy1300326388 0
Releases(2.2.0)
Owner
致力于构建优质的 Flutter 广告插件
null
Flutter plugin to listen to the process text intent stream.

Flutter Process Text Plugin Compatibility ✅ Android ❌ iOS (active issue: iOS support) Show some ❤️ and ⭐ the repo Why use Flutter Process Text? Flutte

Devs On Flutter 11 Jul 5, 2021
Android Studio Arctic Fox (Canary) for Apple Sillicon

Android Studio Arctic Fox for Apple Silicon This is a unofficial canary version of Android Studio Arctic Fox on the Apple Silicon. (e.g M1 Chip) Downl

Dora Lee 257 Sep 11, 2021