Flutter对接文档


下载Demo和插件、安装包

这是一个flutter-demo apk演示工程

demo安装包apk下载地址open in new window

集成插件

  • 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包引入

1、将flutter-demo/lib/flutter_plugin_ad/android/libs目录下的所有aar包全部复制到您项目的android/app/libs目录下,adn中ks-ad和ks-ct只能使用一个。

注意,这里缺少tanx的包,是因为tanx只支持maven引入,没有离线的arr包。所以需要在gradle中单独引入,下面会说明

2、在您的android项目模块根目录中的android/build.gradle文件引入以下内容

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' }
    }
}

3、配置项目的依赖,在您的android项目模块目录android/app/build.gradle文件中引入以下内容

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 的配置⽂件

权限和配置

1、将flutter-demo/android/src/main/res中的xml文件夹复制到您的android模块下的res文件夹下面

2、打开AndroidManifest.xml文件,将以下内容复制到您的android项目对应文件中

<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

appkeyE6097975B89E83D6
开屏广告位id7D5239D8D88EBF9B6D317912EDAC6439
插屏广告位id1D273967F51868AF2C4E080D496D06D0
banner广告位id107EB50EDFE65EA3306C8318FD57D0B3
激励视频广告位id09A177D681D6FB81241C3DCE963DCB46
全屏视频广告位idD879C3DED01D5CE319CD2751474BA8E4
信息流(原生)广告位id89FEEA66F9228ED3F6420294B89A902B
draw视频流广告位id7D5239D8D88EBF9B6D317912EDAC6439
短视频内容模块idC5F4F13C421B10664D9D21EDB52C8C5D
双排短视频内容模块id77C8E2D8F5C1D88CBF0D118F7F1FC50B
横屏长视频内容模块idE144B8229BC47DF6A8FBBBB21074F9F2
短剧视频内容模块idC80DDB16A8F5D77B7EE1012C984C84DE
短剧视频内容模块2idC4AD0620230B028DCB87D0B304651C5A
信息流内容模块id4EC4251D616C69030A161A930A938596
信息流内容模块2idEBE266AAE65F52C37A28BF2D586132EB
悬浮窗模块idC20D0FDCA88E06E6718A33279AAD2B4D

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测试_appkey31DC084BB6B04838
ios测试_广告类型ios测试_广告位ID
ios测试_短剧内容A0736045CDDF718C13DFF187254EA1D0
ios测试_视频内容E06C7BB2C34605B4CD777EFD590DD4BE
ios测试_互动悬浮4224443B309508BE30C3B8AC7CDE87C1
ios测试_drawC773D52F59FF5AA418CD9E2181327197
ios测试_信息流3DC16BFC019545395507ED826899B16E
ios测试_原生921DE1BF1B3F06838AE04233A42B01F1
ios测试_全屏8FCB39267CE40245B87EF8835A853708
ios测试_激励E80DABEF5FD288492D4A9D05BF84E417
ios测试_插屏351C1A89F8AE79DF62C1B1165A5EAFCC
ios测试_banner7B2BD37383E008B422C93486EACEA11D
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);
    *   详情参考 /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"
Last Updated:
Contributors: zhaochangchang, zhaochangchang@shenshiads.com, zhaochangchang@shenshiads.com