bwt_ad_flutter

Bwt广告SDK的Flutter插件

TOC

1.1 更新日志

更新日志记录了每个版本的更新内容,升级SDK时请及时查看,如若接入了扩展广告源,请注意扩展广告源版本升级。

1.2 快速集成

在Flutter项目的pubspec.yaml中导入插件依赖

dependencies:
  bwt_ad_flutter: ^0.1.7

1.3 iOS工程环境配置

  1. 打开项⽬的 app target,查看 Build Settings 中的 Linking-Other Linker Flags 选项,确保含有 -ObjC ⼀值,若没有则添加。
  2. 在项⽬的 app target 中,查看 Build Settings 中的 Build options - Enable Bitcode 选项, 设置为NO。
  3. info.plist 添加⽀持 Http访问字段。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
  1. Info.plist 添加定位权限字段。
NSLocationWhenInUseUsageDescription
NSLocationAlwaysAndWhenInUseUsageDeion
  1. Info.plist设置⽩名单(⽆需全部添加,建议添加其中⼴告预算⾜的媒体,例如抖⾳、京东等)。
<key>LSApplicationQueriesSchemes</key>
	<array>
		<string>dianping</string>
		<string>imeituan</string>
		<string>com.suning.SuningEBuy</string>
		<string>suning</string>
		<string>openapp.jdmobile</string>
		<string>vipshop</string>
		<string>snssdk141</string>
		<string>ctrip</string>
		<string>qunariphone</string>
		<string>QunarAlipay</string>
		<string>qunaraphone</string>
		<string>yohobuy</string>
		<string>kaola</string>
		<string>qqnews</string>
		<string>openapp.xzdz</string>
		<string>beibeiapp</string>
		<string>taobao</string>
		<string>tmall</string>
		<string>openjd</string>
		<string>jd</string>
		<string>jhs</string>
		<string>weixin</string>
		<string>yhd</string>
		<string>wireless1688</string>
		<string>GomeEShop</string>
		<string>wbmain</string>
		<string>xhsdiscover</string>
		<string>douyin</string>
		<string>pinduoduo</string>
		<string>jdmobile</string>
		<string>tbopen</string>
		<string>pddopen</string>
		<string>mogujie</string>
		<string>koubei</string>
		<string>eleme</string>
		<string>youku</string>
		<string>gengmei</string>
		<string>airbnb</string>
		<string>alipays</string>
		<string>alipay</string>
		<string>didicommon</string>
		<string>OneTravel</string>
		<string>farfetchCN</string>
		<string>farfetch</string>
		<string>snssdk1112</string>
		<string>snssdk1128</string>
		<string>miguvideo</string>
		<string>kfcapplinkurl</string>
		<string>iqiyi</string>
		<string>uclink</string>
		<string>app.soyoung</string>
		<string>qqmusic</string>
		<string>kwai</string>
		<string>ksnebula</string>
		<string>taobaolite</string>
		<string>lianjiabeike</string>
	</array>

1.4 iOS14适配

由于iOS14中对于权限和隐私内容有⼀定程度的修改,⽽且和⼴告业务关系较⼤,请按照如下步骤适配,如果未适 配。不会导致运⾏异常或者崩溃等情况,但是会⼀定程度上影响⼴告收⼊。敬请知悉。

  1. 应⽤编译环境升级⾄ Xcode 12.0 及以上版本;
  2. 设置IDFA权限;

1.4.1 IDFA

从 iOS 14 开始,在应⽤程序调⽤ App Tracking Transparency 向⽤户提跟踪授权请求之前,IDFA 将不可⽤。 更新 Info.plist,添加 NSUserTrackingUsageDescription 字段和⾃定义⽂案描述。

<key>NSUserTrackingUsageDescription</key>
<string>该标识符将⽤于向您投放个性化⼴告</string>

2.1 插件初始化

恭喜你,经过以上简单配置之后,现在可以正式开始插件的使用了。在使用广告之前,需要先进行插件初始化,建议在main.dart中完成。

await BwtAdCore.init(
	// appId,不同端的appID可能不一致,需要替换成自己相应端的appId
    appId: Platform.isAndroid ? '400805' : '310641',
	// iOS请求广告前是否先申请IDFA,默认true
	isRequestIdfa: true,
    // 广告内部日志打印设置,默认为NONE(不打印),正式包建议设置为NONE
    logType: BwtAdLogType.NONE,
);

2.2 加载各种类型广告

目前我们支持开屏、插屏、信息流模板等广告类型,请根据需要获取。

2.2.1 开屏广告

加载开屏广告,打开原生界面加载并展示开屏广告。 注意及时release开屏广告加载器对象BwtSplashAdLoader,具体代码请参考开屏示例启动即开屏示例

// 设置广告加载成功监听
_splashAdLoader?.onAdLoad = (bwtAd) {
    Log.d('开屏广告加载成功...');
};

// 设置广告加载失败监听
_splashAdLoader?.onAdFailed = (msg) {
    Log.d('开屏广告加载失败, $msg');
};

// 设置广告展示监听
_splashAdLoader?.onAdExpose = (bwtAd) {
    Log.d('开屏广告展示成功...');
};

// 设置广告被点击监听
_splashAdLoader?.onAdClick = (bwtAd) {
    Log.d('开屏广告被点击...');
};

// 设置广告关闭监听
_splashAdLoader?.onAdClose = (bwtAd) {
    Log.d('开屏广告被关闭...');
};

// 加载并展示开屏广告,设置logoName和backgroundName时需确认以下两条规则
// Android端应在drawable或者mipmap中有相应文件
// iOS端应有相应名字的imageset
_splashAdLoader?.loadAd(
    // 广告位ID,不同端的广告位ID可能不一致,需替换成自己相应端的广告位ID
    posId: Platform.isAndroid ? '14303340' : '09785892',
    // 底部展示的logo图片名称(不带后缀),不传则没有底部logo组件(高度为156)
    logoName: 'splash_ad_logo',
    // 加载开屏广告等待过程中的占位背景图(不带后缀),不传则默认是白色背景
    backgroundName: 'splash_ad_background',
);

2.2.2 插屏广告

加载插屏广告,加载、展示插屏广告,加载和展示时机可区分自行控制。 注意及时release插屏广告加载器对象BwtInterstitialAdLoader,具体代码请参考插屏示例

// 构造插屏广告加载器
_interstitialAdLoader = BwtInterstitialAdLoader();

// 设置广告加载成功监听
_interstitialAdLoader?.onAdLoad = (bwtAd) {
    _bwtAd = bwtAd;
    Fluttertoast.showToast(msg: "插屏广告加载成功");
    Log.d('插屏广告加载成功...');
};

// 设置广告加载失败监听
_interstitialAdLoader?.onAdFailed = (msg) {
    Fluttertoast.showToast(msg: "插屏广告加载失败");
    Log.d('插屏广告加载失败, $msg');
};

// 设置广告展示监听
_interstitialAdLoader?.onAdExpose = (bwtAd) {
    Log.d('插屏广告展示成功...');
};

// 设置广告被点击监听
_interstitialAdLoader?.onAdClick = (bwtAd) {
    Log.d('插屏广告被点击...');
};

// 设置广告关闭监听
_interstitialAdLoader?.onAdClose = (bwtAd) {
    Log.d('插屏广告被关闭...');
};
    
// 加载插屏广告
_interstitialAdLoader?.loadAd(
    // 广告位ID,不同端的广告位ID可能不一致,需替换成自己相应端的广告位ID
    posId: Platform.isAndroid ? '24687946' : '98855071',
    // 加载成功后是否立即展示,如果设置为false,请在onAdLoad回调中保存bwtAd对象,在适当时机调用BwtInterstitialAdLoader的showAd方法
    loadThenShow: loadThenShow,
);

2.2.3 信息流模板广告

加载信息流模板广告,信息流模板广告是原生View广告,可以灵活的在固定位置、列表等不同场景完成展示广告的需求。 注意及时release信息流模板广告加载器对象BwtNativeExpressAdLoader,具体代码请参考信息流模板示例信息流模板-列表场景示例

// 构造信息流模板广告加载器
_nativeExpressAdLoader = BwtNativeExpressAdLoader();

// 设置广告加载成功监听
_nativeExpressAdLoader.onAdLoad = (bwtAd) {
    // 可以将获取到广告模板广告(bwtAd.expressAd)直接展示
    setState(() {
        _nativeExpressAd = bwtAd.expressAd;
    });
    Log.d('信息流模板广告加载成功...');
    Fluttertoast.showToast(msg: "广告加载成功");
};

// 设置广告加载失败监听
_nativeExpressAdLoader.onAdFailed = (msg) {
    Log.d('信息流模板广告加载失败, $msg');
    Fluttertoast.showToast(msg: "广告加载失败");
};

// 设置广告展示监听
_nativeExpressAdLoader.onAdExpose = (bwtAd) {
    Log.d('信息流模板广告展示成功...');
};

// 设置广告被点击监听
_nativeExpressAdLoader.onAdClick = (bwtAd) {
    Log.d('信息流模板广告被点击...');
};

// 设置广告关闭监听
_nativeExpressAdLoader.onAdClose = (bwtAd) {
    Log.d('信息流模板广告被关闭...');
};

// 加载信息流模板广告
_nativeExpressAdLoader.loadAd(
    // 广告位ID,不同端的广告位ID可能不一致,需替换成自己相应端的广告位ID
    posId: Platform.isAndroid ? '24687946' : '98855071',
    // 广告宽度
    adWidth: DisplayUtil.screenWidth,
);

3.1 广告源扩展

扩展SDK支持的广告源,可以一定程度的提升广告收益,请根据需要进行添加。

3.1.1 Android端

在app的build.gradle中添加所需的广告源依赖。

// 优量汇
implementation 'com.bwt.top:gdt:1.1.38'
implementation 'com.qq.e.union:union:4.570.1440'

// 穿山甲
implementation 'com.bwt.top:csj:1.1.38'
implementation 'com.pangle.cn:mediation-sdk:6.2.1.7'

3.1.2 iOS端

iOS在项目的podfile中添加所需的广告源依赖。 使用https://gitee.com/two-jumps/cxhad-sdk-i-os-repo.git源可以快速导入SDK。

# 优量汇
pod 'CXHAdSDK/GDT', '1.6.7.1'

# 穿山甲
pod 'CXHAdSDK/BU', '1.6.7.1'

3.2 支持微信小程序配置

如果您需要支持打开微信小程序广告类型,需要进行以下配置,如果不需要可忽略。

3.2.1 Android端

安卓端配置微信小程序,只需要两步。

3.2.1.1 在安卓原生端导入微信SDK

// 微信SDK
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+'

3.2.1.2 初始化时传入微信AppId

await BwtAdCore.init(
	...
    wechatAppId: '微信AppId'
);

3.2.2 iOS端

需要成功打开微信⼩程序,还需要项⽬中有相应的微信⼩程序配置

请到开发者应⽤登记⻚⾯进⾏登记,登记并选择移动应⽤进⾏设置后,将获得AppID,可⽴即⽤于开发。但应⽤ 登记完成后还需要提交审核,只有审核通过的应⽤才能正式发布使⽤。

3.2.2.2 在 AppDelegate 中导⼊ WXApi.h 头⽂件,并增加WXApiDelegate 协议

#import <UIKit/UIKit.h>
#import <WXApi.h>
@interface AppDelegate : UIResponder<UIApplicationDelegate, WXApiDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

3.2.2.3 在项⽬的 AppDelegate 中注册微信应⽤程序 id,以及重写handleOpenURL ⽅法

其中需替换成自己的微信AppId和universalLink

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions
{
 [WXApi registerApp:@"wxd930ea5d5a258f4f"
universalLink:@"https://help.wechat.com/sdksample/"];
return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:self];
}

3.2.2.4 设置项⽬ URL Types

在 Xcode 中,选择你的⼯程设置项,选中“TARGETS”⼀栏,在“info”标签栏的“URL type“添加“URL scheme”为你所 注册的微信应⽤AppId(如图所示)。

设置项⽬ URL Types

3.2.2.5 Xcode 设置 URL scheme

在Xcode中,选择你的⼯程设置项,选中“TARGETS”⼀栏,在“info”标签栏的“LSApplicationQueriesSchemes”添加 weixin、weixinULAPI、weixinURLParamsAPI(如下图所示)。

Xcode 设置 URL scheme

在iOS 15系统上,使⽤Xcode 13编译出的App,LSApplicationQueriesSchemes的数量会限制为50个。第50个之后的scheme配置会不⽣效,需要确保"weixin"、"weixinULAPI"和"weixinURLParamsAPI"配置在 LSApplicationQueriesSchemes的前50个。