2 Star 13 Fork 1

FlutterAds / flutter_pangle_ads

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

logo

一款优质的 Flutter 广告插件(字节跳动、巨量引擎、穿山甲)

插件特点

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

支持功能

  • ✅ 开屏广告
  • ✅ 新插屏广告
    • ✅ 半屏
    • ✅ 全屏
  • ✅ 激励视频
    • ✅ 普通激励
    • ✅ 进阶激励
  • ✅ Banner
  • ✅ 信息流

📣 请升级到 GroMore

  • 因穿山甲官方已全面推 Gromore 融合 SDK,后续本插件也将只做小更新,推荐使用 Gromore
  • Gromore】可进行多家广告瀑布流竞价,让您拥有更高的广告收益

下载体验

  • 回复 穿山甲体验
  • 回复 Pro 体验 Pro 版 🚀

入门使用

引入依赖

dependencies:
  flutter_pangle_ads: ^2.9.0

初始化广告

// 导包
import 'package:flutter_pangle_ads/flutter_pangle_ads.dart';
/// [appId] 应用ID
FlutterPangleAds.initAd(appId);

个性化广告开关

/// 不调用默认为开,'1'打开,'0'关闭
FlutterPangleAds.setUserExtData(personalAdsType: '1');

开屏广告

  • 全屏
/// [posId] 广告位 id
FlutterPangleAds.showSplashAd(posId);
/// [posId] 广告位 id
/// [logo] 如果传值则展示底部logo,不传不展示,则全屏展示
/// [timeout] 加载超时时间
FlutterPangleAds.showSplashAd(
  posId,
  logo: 'flutterads_logo',
  timeout: 3.5,
);

新插屏广告

/// [posId] 广告位 id
FlutterPangleAds.showFullScreenVideoAd(AdsConfig.newInterstitialId);

激励视频

/// [posId] 广告位 id
/// [customData] 设置服务端验证的自定义信息
/// [userId] 设置服务端验证的用户信息
FlutterPangleAds.showRewardVideoAd(
    AdsConfig.rewardVideoId,
    customData: 'customData',
    userId: 'userId',
);

Banner

/// [posId] 广告位 id
/// [width] 创建 Banner 广告位时选择的宽度,默认值是 300
/// [height] 创建 Banner 广告位时选择的高度,默认值是 150
/// [interval] 广告轮播间隔,0 或[30~120]之间的数字,单位为 s,默认为 0 不轮播
/// [show] 是否显示广告
/// [autoClose] 是否自动关闭,一般是在用户点击不感兴趣之后的操作
AdBannerWidget(
  posId: AdsConfig.bannerId,
  width: 300,
  height: 150,
  interval: 30,
  show: true,
  autoClose: true,
);

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

  • 嵌套 SizedBox (推荐)
SizedBox(
  width: 300,
  height: 150,
  child: AdBannerWidget(
    posId: AdsConfig.bannerId,
    width: 300,
    height: 150,
    interval: 30,
    show: true,
  ),
)

信息流

  • 获取信息流广告列表
/// [posId] 广告位 id
/// [width] 宽度
/// [height] 高度
/// [count] 获取广告数量,建议 1~3 个
List<int> feedAdList = await FlutterPangleAds.loadFeedAd(
    AdsConfig.feedId,
    width: 375,
    height: 128,
    count: 3,
  );
  • 清除信息流广告列表

当你的广告不再需要时,请一定执行清除操作

/// [list] 信息流广告 id 列表
bool result = await FlutterPangleAds.clearFeedAd(feedAdList);
  • 页面中展示信息流广告
/// Feed 信息流广告组件
/// [posId]返回的广告 id,这里不是广告位id
/// [width]组件的宽度
/// [height]组件的高度
/// [show]是否显示
AdFeedWidget(
    posId: '${feedAdList[0]}',
    width: 375,
    height: 128,
    show: true,
  )

widthheight 需要根据你新建广告位的模板来设置

旧插屏广告(已废弃)

建议使用新插屏

/// [posId] 广告位 id
/// [width] 请求模板广告素材的尺寸宽度(对应 expressViewWidth 参数)
/// [height] 请求模板广告素材的尺寸高度(对应 expressViewWidth 参数)
FlutterPangleAds.showInterstitialAd(
    AdsConfig.interstitialId,
    width: 300,
    height: 300,
);

设置广告事件监听

FlutterPangleAds.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 +=
            'rewardType:${event.rewardType} rewardVerify:${event.rewardVerify} rewardAmount:${event.rewardAmount} rewardName:${event.rewardName} errCode:${event.errCode} errMsg:${event.errMsg} customData:${event.customData} userId:${event.userId}';
  }
  // 测试关闭 Banner(会员场景)
  if (event.action == AdEventAction.onAdClosed &&
      event.adId == AdsConfig.bannerId02) {
    _adEvent += '仅会员可以关闭广告';
  }
  print('onEventListener:$_adEvent');
});

事件列表

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

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

其他配置

信任HTTP请求(仅 iOS)

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

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

信任HTTP请求

请求应用跟踪透明度授权(仅 iOS)

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

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

请求应用跟踪透明度授权

  • 效果

预览效果

动态请求权限(仅 Android)

bool result = await FlutterPangleAds.requestPermissionIfNecessary;

原生 SDK 版本更新方法

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

  • Android

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

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

// build.gradle(android.app)
android{
  configurations.all {
      resolutionStrategy {
          force 'com.pangle.cn:ads-sdk-pro:版本号'
      }
  }
}
  • iOS

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

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

FlutterAds 广告插件系列

插件 描述
flutter_gromore_pro 🏆🏆🏆 帮你大幅提升广告收益,发挥出最大的用户价值
flutter_gromore_ads 字节跳动、穿山甲、GroMore 聚合 Flutter 广告开源版插件
flutter_pangle_ads 字节跳动、穿山甲 Flutter 广告插件
flutter_qq_ads 腾讯广告、广点通、优量汇 Flutter 广告插件
flutter_adspark 巨量广告/穿山甲的广告监测、增长分析、归因上报、事件管理 Flutter 版插件
flutter_adcontent 穿山甲内容输出,支持「短剧」和「小视频」的 Flutter 版插件

💬 App 广告变现群

  • 插件问题解答
  • 变现玩法交流
  • 收益提升探讨
  • 大盘趋势推送
  • 版本更新推送

因微信群入群限制,请添加个人微信备注:变现群,我拉你进群。

wechat:toponelan
MIT License Copyright (c) 2021 FlutterAds Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

🔥🔥🔥 Flutter 广告插件 -- 字节跳动、穿山甲(支持开屏、插屏、激励视频、全屏视频、信息流) 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Dart
1
https://gitee.com/FlutterAds/flutter_pangle_ads.git
git@gitee.com:FlutterAds/flutter_pangle_ads.git
FlutterAds
flutter_pangle_ads
flutter_pangle_ads
develop

搜索帮助