toc

推啊Flutter-SDK对接文档

1 准备

1.1 合作方媒体在 推啊媒体平台 注册账号

1.2 在后台获取 appKey、appSecret 等参数

1.3 申请广告位ID

2 SDK包导入

2.1 项目的pubspec.yaml文件中添加

sdk_flutter: ^1.0.0

3 AndroidManifest配置

3.1 权限

//(sdk内部已经处理相关权限问题,如果遇到冲突咨询对应开发即可)
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

4 初始化SDK

4.1 初始化(重要)

//推啊appkey和appSecret从媒体管理后台获取 咨询运营人员 记得替换成自己的
//基础SDK初始化
TFConfig.init(appKey,appSecret);

5 加载广告(选择合适的广告类型)

5.1 开屏广告接入

(开屏广告嵌入代码说明(详见demo SplashPage.dart代码))

第一步:代码引入实例

    _mSplashAd?.loadAd(
            slotId: "283674",
            userId: "user-123",
            pContext: context,
            onClickCallBack: () {
              debugPrint("素材被点击了");
            },
            onAdCloseCallBack: () {
              debugPrint("素材关闭了");
            },
            onLoadFailedCallBack: (code, message) {
              debugPrint("请求失败 ${code} message = ${message}");
            },
            onLoadSuccessCallBack: () {
              debugPrint("请求成功");
            },
        )

5.2 横幅/Banner广告接入

(横幅广告嵌入代码说明(详见demo BannerPage.dart代码))

第一步:代码引入示例(Widget)

_mBannerAd = BannerWidget(
    slotId: slotId,
    userId: "user-123",
    context: context,
    onClickCallBack: () {
      debugPrint("素材被点击了");
    }
);

5.3 浮标/icon广告接入

(浮标广告嵌入代码说明(详见demo IconPage.dart代码))

第一步:代码引入示例(Widget)

mIcon = IconWidget(
  slotId: slotId, //广告位ID
  userId: "user-123", //用户ID
  context: context,
  isDraggable: false,
  isRounded: false,
  onClickCallBack: () {
    debugPrint("素材被点击了");
  },
  onAdCloseCallBack: () {
    debugPrint("素材关闭了");
  },
  onLoadFailedCallBack: (code, message) {
    debugPrint("请求失败 ${code} message = ${message}");
  },
  onLoadSuccessCallBack: () {
    debugPrint("请求成功");
  },
);

5.4 弹窗广告接入

(普通插屏广告嵌入代码说明(详见demo InterstitialActivity代码))

第一步:代码直接引入示例

_showPopupAd() {
    Navigator.of(context).push(PageRouteBuilder(
      opaque: false,
      pageBuilder: (context, animation, secondaryAnimation) {
        return PopupWidget(
            slotId: "283685", //广告位ID
            userId: "user-123", //用户ID
            context: context,
            onClickCallBack: () {
              debugPrint("素材被点击了");
            });
      },
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        return FadeTransition(
          opacity: Tween(begin: 0.0, end: 1.0).animate(
              CurvedAnimation(parent: animation, curve: Curves.fastOutSlowIn)),
          child: child,
        );
      },
    ));
 }

5.5 自定义广告接入(支持tab页或其他特殊场景)

(自定义广告嵌入代码说明(详见demo CustomPage.dart代码))

注意:==自定义广告需要单独调用 广告曝光 和 广告点击 事件==

点击事件:_mCustomAd.openActivity();

曝光事件:_mCustomAd.onExposed();

第一步:代码直接引入示例

_showView = FutureBuilder(
  future: _requestData(),
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      // 通过数据构建界面
      _mData = snapshot.data;
      return getShowWidget(context);
    } else {
      return Container();
    }
  },
);

//请求数据
Future<ResultBean<AdBean>> _requestData() async {
    var adSlot = _slotId;
    var userId = _userId;

    ResultBean<AdBean> result = await _mCustomAd.loadAd(
        pContext: _mContext,
        slotId: adSlot,
        userId: userId,
        onAdLoadSuccess: (ResultBean<AdBean> data) {
          _mCustomAd.onExposed();
        });
    return result;
}

第二步:广告曝光的时候必须调用

_mCustomAd.onExposed();

第三步:广告点击的时候必须调用

_mCustomAd.openActivity();

关于自定义广告素材活动加载:

ResultBean result = await _mCustomAd.loadAd:

{
    "activityUrl" : "活动链接",
    "imageUrl" : "素材图片链接",
    "reportClickUrl" : "素材图片点击曝光链接",
    "reportExposureUrl" : "素材图片加载成功曝光链接",
    "extTitle" : "标题",
    "extDesc" : "描述",
    "imageUrlList" : "素材集合"
}
字段名称字段类型字段备注
activityUrlString活动链接
imageUrlNumber素材图片链接
reportClickUrlString素材图片点击曝光链接
reportExposureUrlString素材图片加载成功曝光链接
extTitleString标题
extDescString描述
imageUrlListList素材集合

使用方式(推荐使用):

活动打开交给SDK处理:
onPressed: () {
    _mCustomAd.openActivity();
})

5.6 信息流接入

(信息流广告嵌入代码说明(详见demo InfoStreamPage.dart代码))

_mInfoStreamAd1 = InfoStreamWidget(
  slotId: slotId,
  userId: userId,
  context: context,
  type: 1,
  onClickCallBack: () {
    debugPrint("素材被点击了");
  },
  onLoadFailedCallBack: (code, message) {
    debugPrint("请求失败 ${code} message = ${message}");
  },
);

6 错误码

错误码说明
40003参数错误
40004广告位不能为空
40005广告位ID不合法
40006媒体appkey不能为空
40007媒体appKey不合法
40008媒体appSecret不合法,参数验签失败
40009广告活动或素材未配置
50001服务器错误
50002广告填充不足

7 常见问题

Android5.1(22)及以下版本部分活动落地页显示异常:

官方WebView对页面支持有BUG,建议将minSdkVersion 设置为 23

H5投放和SDK投放的收益区别?

SDK接入后,整体收益可提升15%~50%,具体提升了以下能力:

1)精准广告填充:通过RTA功能实现精准投放,获得更多头部广告主预算

2)转化链路优化:自有下载器,提醒用户安装,大幅提升安装激活效率;活动页面预加载,页面抵达率从95%提升至99.9%,用户体验佳,后续可投放更多大型主题活动;

3)素材算法及自有DMP:素材算法模型可提升入口CTR;推啊DMP帮助广告主实现精准投放,进而提升竞价能力,大大提高媒体主流量变现效率。

H5、API、SDK三种接入方式有哪些区别?

H5(手动投放):为纯链接投放,需要媒体方在后台手动获取活动链接

API(手动投放):需联调接口,支持虚拟奖品发放和充值,对接简单

SDK投放:需发版,需集成推啊SDK到媒体的应用,接入SDK后进行系统智能投放

为什么集成sdk后没有报错,但是没有广告返回?

检查是否新建广告位,如没有,需先在推啊媒体管理后台新建广告位;

检查广告位是否为开启状态;

如上述两步都正常,可联系媒体运营检查相关广告配置。

什么情况下曝光为0?

因推啊的广告都是异步加载的。若广告没有加载完成时,调用了曝光接口,上传的数据就会为空。

自定义广告位,sdk返回的activityUrl怎样进行调用?支持浏览器访问吗?要媒体自己处理吗?

详情请看自定义广告关于接入方式的描述

h5页面能接入推啊sdk么?需要怎么操作

可以,需要媒体自己开发h5和安卓之间的通用跳转协议,在用户点击进入推啊广告时,调起对应协议即可。如有问题,可咨询推啊技术。

激励互动、种红包,使用SDK,需要注意哪些问题?

激励互动:需重点测试一下发奖流程,用户拿到奖后是否能正常充值;

种红包:如您是从api更换为sdk对接,需重点测试虚拟物品的继承性(如用户A在api方式下有1000个金币,更换为sdk方式是否还有1000个金币)

加载广告时,参数说明:

场景说明
只传deviceid1、用户无法切换账号,只要在相同手机上有玩,都视作一个用户 2、如果用户手机隐私权限没有开,则拿不到deviceid,某些活动会出现用户无法参与活动的情况
只传userid可以切换账号,一个手机可以存在多个用户参与活动
既传deviceid也传userid以userid为准

其他问题请咨询对接媒体运营。

Libraries

ActivityWebPage
AdApi
AdBean
AdCallBack
AdIcon
BannerWidget
BaseApi
CheckData
CheckDataUtils
chrome_safari_browser_example.screen
ColorUtils
CommonConfig
CommonConfigBean
CommonData
CommonUtils
ConsUrl
CountDownPlugin
CrashReport
CrashUtils
CustomSuperAd
DecorationPlugin
DownloadPlugin
EnterApi
headless_in_app_webview.screen
HttpUtil
IconWidget
ImageUtils
imei_plugin
in_app_browser_example.screen
in_app_webiew_example.screen
InfoStreamWidget
log_util
LogsInterceptors
MDBean
PopupWidget
QueryCommonConfig
ResponseInterceptors
ResultBean
sdk_flutter
SDKType
SplashAd
TestUtils
TFConfig
TokenInterceptors