Flutter对接文档
下载Demo和插件、安装包
这是一个flutter-demo apk演示工程
集成插件
1、拷贝
flutter_plugin_ad
插件到lib/plugins
目录下(其他位置也都可以)2、配置
pubspec.yaml
集成插件
dependencies:
flutter:
sdk: flutter
flutter_plugin_ad:
path: lib/plugins/flutter_plugin_ad
Android配置
接入前注意事项(请先阅读注意事项再进行sdk对接)
安卓SDK有两种对接方式,一种是maven,一种是arr包引入,开发者按需对接
方式一:maven接入(推荐)
1、在您的android项目模块根目录的build.gradle文件中引入 adset、荣耀和gromore仓库
buildscript {
repositories {
.
.
.
// GroMore
maven { url "https://artifact.bytedance.com/repository/Volcengine/" }
maven { url "https://artifact.bytedance.com/repository/pangle" }
// 荣耀
maven { url 'https://developer.hihonor.com/repo' }
// adset
maven {
allowInsecureProtocol = true
url "http://maven.shenshiads.com/nexus/repository/adset/"
}
}
}
allprojects {
repositories {
// GroMore
maven { url "https://artifact.bytedance.com/repository/Volcengine/" }
maven { url "https://artifact.bytedance.com/repository/pangle" }
// 荣耀
maven { url 'https://developer.hihonor.com/repo' }
// adset
maven {
allowInsecureProtocol = true
url "http://maven.shenshiads.com/nexus/repository/adset/"
}
}
}
2、在您的android项目模块app目录中的的build.gradle中引入sdk和第三方ADN
android {
...
defaultConfig {
...
multiDexEnabled true
}
}
dependencies {
//基础包
implementation 'com.shenshi:ad-openset-sdk:6.4.1.2'
//tanx
implementation 'com.shenshi:ad-tanx-adapter:3.5.6.1'
//bz
implementation 'com.shenshi:ad-beizi-adapter:4.90.4.11.6'
//gdt
implementation 'com.shenshi:ad-guangdiantong-adapter:4.591.1461.3'
//ks-ad 只对接广告请使用
implementation 'com.shenshi:ad-kuaishou-ad-adapter:3.3.67.3'
//ks-ct 广告、短视频和短剧请使用
implementation 'com.shenshi:ad-kuaishou-ct-adapter:3.3.66.4'
//sigmob
implementation 'com.shenshi:ad-sigmob-adapter:4.19.2.2'
//gromore
implementation 'com.shenshi:ad-gromore-adapter:6.3.1.4.3'
//bd
implementation 'com.shenshi:ad-baidu-adapter:9.36.4'
//hl
implementation 'com.shenshi:ad-hailiang-adapter:3.466.10.432.1'
//zy
implementation 'com.shenshi:ad-zhangyu-adapter:1.6.1.0.1'
//multidex 64K问题,如果已添加请忽略
implementation 'com.android.support:multidex:1.0.3'
//微信小程序广告预算相关,引入可提升ecpm。强烈建议引入
/**
* 1,进入微信开放平台创建移动应用;
* 2,应用创建完成后,获取到相应的微信ApplD;
* 3.在移动端嵌入最新版OpenSDK,并确认版本为5.3.1及以上;
* 4.在优量汇开发者平台,将微信开放平台填写的AppID与当前应用进行关联;
* 第四步联系我们运营帮你们配置
*/
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.28'
}
方式二:arr包引入
flutter-demo/lib/flutter_plugin_ad/android/libs
目录下的所有aar包全部复制到您项目的android/app/libs
目录下,adn中ks-ad和ks-ct只能使用一个。
1、将注意,这里缺少tanx的包,是因为tanx只支持maven引入,没有离线的arr包。所以需要在gradle中单独引入,下面会说明
android/build.gradle
文件引入以下内容
2、在您的android项目模块根目录中的buildscript {
repositories {
.
.
.
// GroMore
maven { url "https://artifact.bytedance.com/repository/Volcengine/" }
maven { url "https://artifact.bytedance.com/repository/pangle" }
// 荣耀
maven { url 'https://developer.hihonor.com/repo' }
}
}
allprojects {
repositories {
// GroMore
maven { url "https://artifact.bytedance.com/repository/Volcengine/" }
maven { url "https://artifact.bytedance.com/repository/pangle" }
// 荣耀
maven { url 'https://developer.hihonor.com/repo' }
}
}
android/app/build.gradle
文件中引入以下内容
3、配置项目的依赖,在您的android项目模块目录android {
...
defaultConfig {
...
multiDexEnabled true
}
}
dependencies {
// 引入libs中所有 JAR 和 AAR(adn+adapter)
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
//tanx adn因不支持本地aar,只能maven方式引入
implementation("com.tanx:TanxUISDK:3.5.6") {
exclude group: 'com.squareup.okhttp3'
}
//依赖包 arr方式需要引入,请务必添加,maven方式可以忽略 start
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
// 阿里云sls
implementation 'io.github.aliyun-sls:aliyun-log-android-sdk:2.7.0'
// 荣耀oaid
implementation 'com.hihonor.mcs:ads-identifier:1.0.2.301'
//依赖包 arr方式需要引入,请务必添加,maven方式可以忽略 end
//multidex 64K问题,如果已添加请忽略
implementation 'androidx.multidex:multidex:2.0.1'
//微信小程序广告预算相关,引入可提升ecpm。强烈建议引入
/**
* 1,进入微信开放平台创建移动应用;
* 2,应用创建完成后,获取到相应的微信ApplD;
* 3.在移动端嵌入最新版OpenSDK,并确认版本为5.3.1及以上;
* 4.在优量汇开发者平台,将微信开放平台填写的AppID与当前应用进行关联;
* 第四步联系我们运营帮你们配置
*/
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.28'
}
可以参考 flutter-demo/android/app/build.gradle 的配置⽂件
权限和配置
flutter-demo/android/src/main/res
中的xml文件夹复制到您的android模块下的res文件夹下面
1、将AndroidManifest.xml
文件,将以下内容复制到您的android项目对应文件中
2、打开<manifest ...>
...
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
...
android:networkSecurityConfig="@xml/network_security_config"
tools:replace="android:allowBackup,android:networkSecurityConfig"
>
...
<!--注意,sigmob的配置只有在support环境下需要配置,Androidx环境可以忽略,不需要配置-->
<!--sigmob-->
<provider
android:name="com.sigmob.sdk.SigmobFileV4Provider"
android:authorities="${applicationId}.sigprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/sigmob_provider_paths" />
</provider>
</application>
</manifest>
可以参考 flutter-demo/android/app/src/main/AndroidManifest.xml 的配置⽂件
3、安卓sdk版本最低21
android项目模块目录下android/app/build.gradle
中修改minSdkVersion 21
4、混淆配置
1、拷⻉ android/app
⽬录下proguard-rules.pro
混淆文件到你项目中对应的android/app/
⽬录下 2、配置混淆文件,在您的android模块android/app/build.gradle
文件中增加以下内容
buildTypes {
release {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
debug {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
}
安卓测试id
appkey | E6097975B89E83D6 |
---|---|
开屏广告位id | 7D5239D8D88EBF9B6D317912EDAC6439 |
插屏广告位id | 1D273967F51868AF2C4E080D496D06D0 |
banner广告位id | 107EB50EDFE65EA3306C8318FD57D0B3 |
激励视频广告位id | 09A177D681D6FB81241C3DCE963DCB46 |
全屏视频广告位id | D879C3DED01D5CE319CD2751474BA8E4 |
信息流(原生)广告位id | 89FEEA66F9228ED3F6420294B89A902B |
draw视频流广告位id | 7D5239D8D88EBF9B6D317912EDAC6439 |
短视频内容模块id | C5F4F13C421B10664D9D21EDB52C8C5D |
双排短视频内容模块id | 77C8E2D8F5C1D88CBF0D118F7F1FC50B |
横屏长视频内容模块id | E144B8229BC47DF6A8FBBBB21074F9F2 |
短剧视频内容模块id | C80DDB16A8F5D77B7EE1012C984C84DE |
短剧视频内容模块2id | C4AD0620230B028DCB87D0B304651C5A |
信息流内容模块id | 4EC4251D616C69030A161A930A938596 |
信息流内容模块2id | EBE266AAE65F52C37A28BF2D586132EB |
悬浮窗模块id | C20D0FDCA88E06E6718A33279AAD2B4D |
iOS配置
- 1、拷贝framework 拷⻉
flutter_plugin_ad/ios/Runner/AdSDK
⽬录下的所有依赖包到您的项⽬的ios/Runner/
⽬录下(或者参考ios原生对接文档 全部手动导入则无需pod) - 2、 设置允许Http连接,在工程的 Info.plist 文件中,设置 App Transport Security Settings 选项下 Allow Arbitrary Loads 值为 YES,对应 plist 内容为:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
在您的应用的Info.plist文件中,添加一个字符串SKAdNetworkItems键,如
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>58922NB4GD.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>238da6jt44.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>r3y5dwb26t.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f7s53z58qe.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>x2jnk7ly8j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>27a282f54n.skadnetwork</string>
</dict>
</array>
(可选配置,添加可增加收益)在您的应用的Info.plist文件中,添加一个数组LSApplicationQueriesSchemes键,如
<key>LSApplicationQueriesSchemes</key> <array>
<string>tbopen</string> <string>openapp.jdmobile</string> <string>alipays</string> <string>imeituan</string> <string>pddopen</string> <string>sinaweibo</string> <string>snssdk1128</string> <string>kwai</string> <string>ksnebula</string> <string>ctrip</string> <string>vipshop</string> <string>OneTravel</string> <string>taobaoliveshare</string> <string>taobaolite</string> <string>iqiyi</string> <string>eleme</string> <string>openjdlite</string> <string>xhsdiscover</string> <string>tmall</string> <string>dianping</string> <string>youku</string> <string>fleamarket</string> <string>bilibili</string> <string>freereader</string> <string>tantanapp</string> <string>suning</string> <string>qunariphone</string> <string>lianjia</string> <string>zhihu</string> <string>weixin</string> <string>travelguide</string> <string>wbmain</string> <string>taobaotravel</string> <string>cainiao</string> <string>kaola</string> <string>bitauto.yicheapp</string> <string>lianjiabeike</string> <string>taoumaimai</string> <string>amapuri</string> <string>openanjuke</string>
<string>bosszp</string> <string>txvideo</string> <string>mttbrowser</string> <string>momochat</string> <string>baiduboxlite</string> <string>com.360buy.jdpingou</string> <string>vmall</string> <string>tuhu</string> <string>comjia</string> <string>yymobile</string> <string>shuqireader</string>
</array>
添加 NSUserTrackingUsageDescription 字段和自定义文案描述。
代码示例:
<key>NSUserTrackingUsageDescription</key>
<string>该标识符将用于向您投放个性化广告</string>
}
- 3、podfile里添加依赖库(参考demo) 执行pod install
- 4、在APPdelegate里注册(swift项目需在Runner-Bridging-Header里引入头文件)
- 5、广告调用于安卓完全一致 但 广告位id和初始化appkey都是分开的
ios测试_appkey | 31DC084BB6B04838 |
---|---|
ios测试_广告类型 | ios测试_广告位ID |
ios测试_短剧内容 | A0736045CDDF718C13DFF187254EA1D0 |
ios测试_视频内容 | E06C7BB2C34605B4CD777EFD590DD4BE |
ios测试_互动悬浮 | 4224443B309508BE30C3B8AC7CDE87C1 |
ios测试_draw | C773D52F59FF5AA418CD9E2181327197 |
ios测试_信息流 | 3DC16BFC019545395507ED826899B16E |
ios测试_原生 | 921DE1BF1B3F06838AE04233A42B01F1 |
ios测试_全屏 | 8FCB39267CE40245B87EF8835A853708 |
ios测试_激励 | E80DABEF5FD288492D4A9D05BF84E417 |
ios测试_插屏 | 351C1A89F8AE79DF62C1B1165A5EAFCC |
ios测试_banner | 7B2BD37383E008B422C93486EACEA11D |
ios测试_开屏 | 18666EAA65EC1969E90E982DCA2CB2DD |
```
//Swift 注册广告 swift需要在桥接文件里引入头文件
IOSFlutterPlatformViewFactory.register(with: self.registrar(forPlugin: "flutter_plugin_ad_banner")!)
OSETSDKPlugin.shareInstance().initSDK(self, with: self.window);
//OC 注册广告 需要引入头文件IOSFlutterPlatformViewFactory和OSETSDKPlugin
//[IOSFlutterPlatformViewFactory registerWithRegistrar:[self registrarForPlugin:@"flutter_plugin_ad_banner"]];
//[[OSETSDKPlugin alloc]initSDK:self withWindow:self.window];
```
广告接口
可以直接参考 lib/main.dart
文件,默认的都是测试appkey和测试广告位id
初始化
* 详情参考 /lib/main.dart- init()
* **建议一进来app的`initState` 生命周期就要初始化sdk(必须在调用广告之前)**
/// 初始化⼴告 SDK
/// [appId] App申请的id
/// [isDebug] 是否为测试模式
FlutterPluginAd.initAd(appId, isDebug: true);
检查并请求权限(仅 Android)
* 检查并请求权限(仅 Android)
* **建议app中必须调用权限,有助于提升广告收入**
```
/// 检查并请求权限(仅 Android)
FlutterPluginAd.checkAndReqPermission();
添加⼴告监听
* 详情参考 /lib/main.dart- setAdEvent(),监听状态见 /flutter\_plugin\_ad/lib/entity/ad\_event.dart```
// 添加⼴告监听
FlutterPluginAd.onEventListener((event) {
setState(() {
_adEvent = 'type:${event.eventType} msg:${event.msg}';
});
}, (error) {
setState(() {
StringBuffer sb = new StringBuffer();
sb.write(error);
// _adEvent = 'code:${code} msg:${msg}';
// PlatformException err = error
_adEvent = '${sb.toString()}';
});
});
展示开屏⼴告
* 详情参考 /lib/main.dart- showSplashAd()
```
/// 展示开屏⼴告
/// [posIdSplash] ⼴告配置 posIdSplash
FlutterPluginAd.showSplashAd(posIdSplashsId);
展示插屏⼴告
* 详情参考 /lib/main.dart- showInterstitialAd()
/// 展示插屏⼴告
/// [posIdInterstitial] ⼴告配置 posIdInterstitial
FlutterPluginAd.showInterstitialAd(posIdInterstitial);
展示全屏视频⼴告
* 详情参考 /lib/main.dart- showFullscreenVideoAd()
/// 展示全屏视频⼴告
/// [posIdFullVideo] ⼴告配置 posIdFullVideo
FlutterPluginAd.showFullscreenVideoAd(posIdFullVideo);
展示激励视频⼴告
* 详情参考 /lib/main.dart- showRewardVideoAd()
/// 展示激励视频⼴告
/// [posIdRewardVideo] ⼴告配置 posIdRewardVideo
FlutterPluginAd.showRewardVideoAd(posIdRewardVideo);
Banner ⼴告
* 详情参考 /lib/page/banner\_page.dart 或者 lib/main.dart
/// 这⾥ Banner 是⼀个 Widget ,你可以放到任何 Flutter 组件上
/// [adId] ⼴告配置 adIdBanner
BannerAdWidget(adId: adIdBanner)
学习天地
接入学习天地需要适配AppCompat主题.
安卓项目的AndroidManifest.xml中,application 标签加入 android:theme="@style/Theme.AppCompat.Light.NoActionBar"