Pangolin
🐾 Flutter 广告SDK-字节跳动-穿山甲 集成
Install / Use
/learn @OpenFlutter/PangolinREADME
前言
⚠️ 在使用本插件前请认真,仔细阅读穿山甲官方文档。本插件将尽量保留 SDK 内容和各 API 相关内容,如出现在官方文档以外报错信息可以留言 issue,或通过文末联系方式联系作者(注明来意)。针对你可能会遇到的问题,在使用过程中可以先查阅 👉
Pangolin 报错及其解决方案
公告
Flutter 最新的 Stable 版本已经来到1.22.4,本插件不再支持 Flutter1.12.0以下的用户,请各位及时更新 Flutter 版本以保证 API 的兼容和用户体验的优化 📈。
简介
Pangolin 是一款 Flutter 插件,集成了字节跳动旗下的广告平台——穿山甲的 Android 和 iOS 的 SDK,方便开发者直接在 Flutter 层面调用相关方法。
版本信息
| 版本 | 更新信息 | | :---- | :------------------------------------------------------------------------------------------------------------: | | 0.0.1 | 穿山甲 SDK 接入,开屏广告实现 | | 0.0.2 | 修复开屏广告偶现 TopBar 的 Bug | | 0.0.5 | 激励视频 Android 接入 | | 0.0.6 | 激励视频接口参数重写 | | 0.0.7 | 移除默认 Activity 直接在当前界面调起广告 | | 0.0.8 | 紧急修复 iOS 端 报错 Bug | | 0.1.0 | iOS 激励视频支持 | | 0.1.1 | 自动下载网络环境可配置 | | 0.1.2 | 修复了 toast 无法移除的问题 | | 0.1.3 | 修复了部分情况下 iOS 无法收到回调的问题,iOS 的开屏现在会自动关闭 | | 0.1.4 | 修复了部分情况下 iOS 在使用 Cocoapods 导入 SDK 时存在的错误 | | 0.1.5 | 支持 iOS banner 广告 | | 0.1.6 | 支持 iOS 插屏广告 | | 0.1.7 | 修复“isExpress”参数的传递问题 | | 0.1.8 | 修复部分用户 context 获取不到的问题 原因是部分用户没有走 onAttachedToEngine(),走了 registerWith() | | 0.1.9 | 修复部分用户 activity 获取不到的问题 原因是部分用户没有走 onAttachedToActivity() 为了满足所有用户,我太难了 😭 | | 0.2.0 | 支持 Android banner 广告 | | 0.2.1 | 支持 Android 插屏广告 | | 0.2.2 | 接入了 Flutter1.20.1 环境 新增一个 banner 广告的手动关闭方法 | | 0.2.3 | 新增了一个激励视频的回调——关闭激励视频 | | 0.2.4 | 新增 iOS Banner 广告移除方法,校验 Flutter1.22 环境下的运行情况 | | 0.2.5 | 根据 Android 最新 SDK 更新了 API | | 0.2.6 | 测试了功能 Flutter1.22.4 修复了部分 issue 反馈的错误 采纳了部分优化建议 | | 0.2.7 | 尝试修复 Android 上的向下兼容性问题 |
插件开发环境相关
Flutter
Flutter (Channel stable, v1.12.13+hotfix.8, on Mac OS X 10.15.1 19B88, locale zh-Hans-CN)
Dart
Dart VM version: 2.4.1 (Wed Aug 7 13:15:56 2019 +0200) on "macos_x64"
Platform
Xcode - develop for iOS and macOS (Xcode 11.2)
Android Studio (version 3.6)
穿山甲
iOS - cocoapods lastest version
Android - 自己去官网选择版本下载
安装
# add this line to your dependencies
dependencies:
pangolin: ^0.2.7
环境配置
使用前请确认您以根据穿山甲的官方文档中的步骤进行了相应的依赖添加,权限获取以及参数配置
Android
穿山甲 Android SDK 接入基础配置<br> ⚠️ 说明:<br>
-
从 Android 6.0(API 23)开始,对系统权限做了很大的改变。在之前用户安装 APP 前,只是把 APP 需要使用的权限列出来给用户告知一下,APP 安装后都可以访问这些权限。从 6.0 开始,一些敏感权限,需要在使用时动态申请,并且用户可以选择拒绝授权访问这些权限,已授予过的权限,用户也可以去 APP 设置页面去关闭授权。有关动态权限的获取 pub 上有很多 package,我个人不会在插件内集成权限申请相关,方便使用者灵活配置,可根据实际需求选择相应插件和权限。
-
穿山甲官方推荐在合适时机申请用户权限,但是使用本插件前请务必确认你所需的权限已经获得用户授权。
iOS
Pangolin 集成
Android
在 Android 端你可能需要简单的四个小步骤导入穿山甲 SDK 具体步骤已为你写好请戳 👉
Pangolin Android 集成手册
iOS
pod install
穿山甲平台
在使用之前必须确认您在穿山甲平台的控制台已经注册了自己 app 所对应的应用以及对应广告类型的代码位,由于穿山甲包含多种类型的广告和功能请务必确认你在插件中注册的和你在平台注册的一一对应。
开始使用
初始化(register)
调用穿山甲 SDK 的第一步是对 SDK 的初始化
await Pangolin.registerPangolin(
appId: "Your AppID",
useTextureView: true,
appName: "Your AppName",
allowShowNotify: true,
allowShowPageWhenScreenLock: true,
debug: true,
supportMultiProcess: true
)
参数说明
| 参数 | 描述 | 默认值 | | :-------------------------- | :------------------------------------------------------------------------------------------------: | -----: | | appId | 在穿山甲平台注册的自己的 AppId | null | | useTextureView | 使用 TextureView 控件播放视频,默认为 SurfaceView,当有 SurfaceView 冲突的场景,可以使用 TextureView | false | | appName | 自己的应用名称 | null | | allowShowNotify | 是否允许 sdk 展示通知栏提示 | true | | allowShowPageWhenScreenLock | 是否在锁屏场景支持展示广告落地页 | true | | debug | 测试阶段打开,可以通过日志排查问题,上线时去除该调用 | true | | supportMultiProcess | 是否支持多进程 | false |
- 注意以上参数大部分针对 Android 端,iOS 端由于穿山甲 SDK 本身的原因并没有过多的参数配置,有用的参数仅为 appId,appName。
接入成功 debug 信息
- Android
E/TTAdSdk-InitChecker( 5148): ==当前进程名:com.tongyangsheng.pangolin_example
E/TTAdSdk-InitChecker( 5148): ==穿山甲sdk接入,环境为debug,初始化配置检测开始==
E/TTAdSdk-InitChecker( 5148): AndroidManifest.xml中TTMultiProvider配置正常
E/TTAdSdk-InitChecker( 5148): AndroidManifest.xml中TTFileProvider配置正常
E/TTAdSdk-InitChecker( 5148): AndroidManifest.xml中权限配置正常
E/TTAdSdk-InitChecker( 5148): 动态权限正常:android.permission.READ_PHONE_STATE
E/TTAdSdk-InitChecker( 5148): 动态权限正常:android.permission.ACCESS_COARSE_LOCATION
E/TTAdSdk-InitChecker( 5148): 动态权限正常:android.permission.ACCESS_FINE_LOCATION
E/TTAdSdk-InitChecker( 5148): 动态权限正常:android.permission.WRITE_EXTERNAL_STORAGE
E/TTAdSdk-InitChecker( 5148): ==穿山甲sdk初始化配置检测结束==
- iOS 仅提示穿山甲接入成功
⚠️ 进行下一步操作前请确认,穿山甲已经成功接入并且检测正常。
加载开屏广告
Pangolin.loadSplashAd(
mCodeId: "Your CodeId",
debug: false);
参数说明
| 参数 | 描述 | 默认值 | | :------ | :--------------------------------------------------: | -----: | | mCodeId | 在穿山甲平台注册的自己的广告位 id | null | | debug | 测试阶段打开,可以通过日志排查问题,上线时去除该调用 | true |
加载激励视频
激励视频的原生接入相对复杂,但是我已经给各位留好了接口,只需简单的几步就可以加载到你的激励视频<br/> ⚠️ 使用前请确认您已在穿山甲平台的控制台建立了你的激励视频广告 id。<br/>
await Pangolin.loadRewardAd(
isHorizontal: false,
debug: false,
mCodeId: "Your CodeId",
supportDeepLink: true,
rewardName: "Your Reward Name",
rewardAmount: 3,
isExpress: true,
expressViewAcceptedSizeH: 500,
expressViewAcceptedSizeW: 500,
userID: "user123",
mediaExtra: "media_extra"
);
参数说明
| 参数 | 描述 | 默认值 | | :----------------------- | :---------------------------------------------------------------------: | ----------: | | isHorizontal | 是否横屏 | false | | mCodeId | 在穿山甲平台注册的自己的广告位 id | null | | debug | 此处 debug 为 true 的情况下 我会给你显示整体进程的一个 Toast 方便你调试 | true | | supportDeepLink | 是否横屏 | false | | rewardName | 奖励的名称 | null | | rewardAmount | 奖励数量 |
Related Skills
node-connect
344.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
99.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
