Gromore最新版本的Flutter插件,我们是一个致力于服务独立开发者的团队,这个插件我们会一直维护。
创业过程中我们解决了各种大大小小的问题,我希望我们的创业经验能让你少走弯路,遇到任何和创业相关的问题都可以咨询我们,万一我们遇到过呢。
1、老版本会面临被下架的风险,老版本的穿上甲版本有过度获取隐私位置隐私的问题。
2、会提高收入,如果是大的活动,比如双11,gromore都会针对这个版本进行更新,新版本的cpm都会有10%的提升
下面将分成Android和iOS一些配置,Android和iOS接入Flutter的步骤都是相同的;
Android的接入分成2个步骤
1、配置AndroidManifest,包括添加权限和provider;
2、Gradle需要的配置;
1、需要再AndroidManifest文件中添加以下权限;
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
2、资源文件配置,下面只包括了穿山甲和优量汇的配置,如果单独需要穿山甲或者优量汇,可以分别单独添加配置,如果需要配置快手、百度等平台请参考如何接入快手、百度等平台的广告
<!-- 穿山甲 start================== -->
<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/pangle_file_paths" />
</provider>
<provider
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
android:authorities="${applicationId}.TTMultiProvider"
android:exported="false" />
<!-- 穿山甲 end================== -->
<!-- GDT start================== -->
<!-- targetSDKVersion >= 24时才需要添加这个provider。provider的authorities属性的值为${applicationId}.fileprovider,请开发者根据自己的${applicationId}来设置这个值,例如本例中applicationId为"com.qq.e.union.demo"。 -->
<provider
android:name="com.qq.e.comm.GDTFileProvider"
android:authorities="${applicationId}.gdt.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/gdt_file_path" />
</provider>
<activity
android:name="com.qq.e.ads.PortraitADActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.qq.e.ads.LandscapeADActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:screenOrientation="landscape"
tools:replace="android:screenOrientation" />
<!-- 声明SDK所需要的组件 -->
<service
android:name="com.qq.e.comm.DownloadService"
android:exported="false" />
<!-- 请开发者注意字母的大小写,ADActivity,而不是AdActivity -->
<activity
android:name="com.qq.e.ads.ADActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize" />
<!-- GDT end================== -->
这个步骤是配置android.support.FILE_PROVIDER_PATHS
需要额xml文件,res/xml目录下添加两个个文件,文件名称是pangle_file_paths.xml
和gdt_file_path.xml
下面是pangle_file_paths.xml
文件内容
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="tt_external_root" path="." />
<external-path name="tt_external_download" path="Download" />
<external-files-path name="tt_external_files_download" path="Download" />
<files-path name="tt_internal_file_download" path="Download" />
<cache-path name="tt_internal_cache_download" path="Download" />
</paths>
下面是gdt_file_path.xml
文件内容
<paths>
<!-- 这个下载路径也不可以修改,必须为com_qq_e_download -->
<external-cache-path
name="gdt_sdk_download_path1"
path="com_qq_e_download" />
<cache-path
name="gdt_sdk_download_path2"
path="com_qq_e_download" />
</paths>
1、在rallprojects和buildscript下面添穿上甲的maven
buildscript {
repositories {
maven {
url "https://artifact.bytedance.com/repository/pangle"
}
}
}
rootProject.allprojects {
repositories {
maven {
url "https://artifact.bytedance.com/repository/pangle"
}
}
}
2、添加依赖库
dependencies {
implementation "com.pangle.cn:mediation-sdk:5.9.2.8"//融合基础包,必须引入
implementation "com.qq.e.union:union:4.540.1410"// 添加优量汇的广告SDK
implementation "com.pangle.cn:mediation-gdt-adapter:4.540.1410.3"//添加优量汇的adapter
}
Android的接入分成2个步骤
1、添加pod依赖;
2、在Info.plist
文件中添加权限;
在Podfile
文件中添加穿山甲和优量汇的pod依赖,可以参考flutter_youni_gromore下的iOSdemo
target 'Runner' do
pod 'CSJMGdtAdapter', '4.14.63.0'
pod 'GDTMobSDK','4.14.63'
end
在iOS14.5以后想要依旧能使用IDFA,建议开发者在初始化聚合SDK之前获取ATT授权,以便允许用户授权跟踪权限。
首先,需要在App层级的info.plist里添加ATT权限描述:
<key>NSUserTrackingUsageDescription</key>
<string>ATT权限使用说明,需要开发者自行设置描述</string>
flutter_youni_gromore: ^1.0.0
import 'package:flutter_youni_gromore/flutter_youni_gromore.dart';
WidgetsFlutterBinding.ensureInitialized();
setGromoreEvent();//设置广告监听事情,这个事件包括一些错误事件、激励视频事件
init().then((value) {
if (value) {
//广告初始化成功了执行的一些动作和方法
}
});
Future<bool> init() async {
try {
//这个是广告的初始化事件
bool result = await FlutterYouniGromore.init(
"广告id"
);
return result;
} on PlatformException catch (e) {
}
return false;
}
Future<void> setGromoreEvent() async {
FlutterYouniGromore.onEventListener((event) {
//event中最重要的两个属性是adId和action,adId就是广告位的id,action对应是广告位的行为
//行为包括:广告错误、广告加载成功、广告填充、广告曝光、广告关闭(计时结束或者用户点击关闭)、广告点击、广告跳过、广告播放或计时完毕、获得广告激励 9个行为
if (event is GromoreErrorEvent) {
} else if (event is GromoreRewardEvent) {
}
});
}
下面是广告行为对应的名称:
///广告错误
static const String onAdError = 'onAdError';
///广告加载成功
static const String onAdLoaded = 'onAdLoaded';
///广告填充
static const String onAdPresent = 'onAdPresent';
///广告曝光
static const String onAdExposure = 'onAdExposure';
///广告关闭(计时结束或者用户点击关闭)
static const String onAdClosed= 'onAdClosed';
///广告点击
static const String onAdClicked = 'onAdClicked';
///广告跳过
static const String onAdSkip = 'onAdSkip';
///广告播放或计时完毕
static const String onAdComplete = 'onAdComplete';
///获得广告激励
static const String onAdReward = 'onAdReward';
下面是利用广告监听,展示完闪屏跳转到首页的示例代码
Future<void> setAdEvent() async {
FlutterYouniGromore.onEventListener((event) {
if (event.adId == "开屏广告位id") {//先判断是开屏的广告广告位
if (event.action == GromoreEventActions.onAdClosed ||
event.action == GromoreEventActions.onAdSkip ||
event.action == GromoreEventActions.onAdComplete ||
event.action == GromoreEventActions.onAdError) {//判断各种的事件类型,符合这些条件的情况跳转到首页
gotoMain();//跳转到首页
}
}
});
}
Future<void> showSplash() async {
try {
bool result = await FlutterYouniGromore.showSplash("广告位id");
} on PlatformException catch (e) {
}
}
Future<void> showInterstitial() async {
try {
bool result = await FlutterYouniGromore.showInterstitial("广告位id");
} on PlatformException catch (e) {
}
}
Future<void> showReward() async {
if (!jumpCondition()) {
return;
}
try {
bool result = await FlutterYouniGromore.showReward(
"广告位id",
);
} on PlatformException catch (e) {
}
}
GromoreBannerWidget(
codeId: "广告位id",
width: 300,//广告的宽度
height: 150,//广告的高度
),