# fn-sdk-flutter-45
**Repository Path**: chenanshun/fn-sdk-flutter-45
## Basic Information
- **Project Name**: fn-sdk-flutter-45
- **Description**: 赋能广告,flutter 插件
- **Primary Language**: Dart
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2022-06-29
- **Last Updated**: 2023-02-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# flutter_fn_sdk
Flutter FN SDK 说明文档
## 1、集成插件
### 添加依赖
```
dependencies:
flutter_fn_sdk:
# 这里是插件的相对位置或者绝对位置 如:Users/Zero/project/flutter_fn_sdk 或 ../flutter_fn_sdk
path: Users/Zero/project/flutter_fn_sdk
```
### Android 配置
#### 复制依赖SDK
拷贝 `flutter_fn_sdk/android/libs`目录下的所有依赖包到自己项目的 `android/app/libs`目录下,具体参考 `flutter_fn_sdk/example/android/app/libs`

#### 配置项目的依赖
```shell
// build.gradle
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}
```
可以参考 `flutter_fn_sdk/example/android/app/build.gradle` 的配置文件
#### 添加 `activity` 配置到 `AndroidManifest.xml` 中
```
```
#### 混淆配置
```
-keep public class com.fn.sdk.api.**{
*;
}
-keep public class com.fn.sdk.Response.**{
*;
}
-keep public class com.fn.sdk.httpapi.databean.**{
*;
}
-keep public class com.fn.sdk.sdk.model.f2.F2{
public ;
}
-keep public class com.fn.sdk.sdk.model.f4.F4{
public ;
}
-keep public class com.fn.sdk.sdk.model.f5.F5{
public ;
}
-keep public class com.fn.sdk.sdk.model.f6.F6{
public ;
}
-keep public class com.fn.sdk.sdk.model.f7.F7{
public ;
}
-keep public class com.fn.sdk.sdk.model.f8.F8{
public ;
}
-keep public class com.fn.sdk.sdk.model.f10.F10{
public ;
}
-keep public class com.fn.sdk.sdk.model.f13.F13{
public ;
}
-keep public class com.fn.sdk.sdk.model.f15.F15{
public ;
}
-keep public class com.fn.sdk.sdk.model.f16.F16{
public ;
}
-keep public class com.fn.sdk.sdk.model.f17.F17{
public ;
}
-keep public class com.fn.sdk.config.FnConfig{
*;
}
-keep public class com.fn.sdk.config.FnConfig$Builder{
*;
}
-keep public class com.fn.sdk.FnAdSDK{
*;
}
-keep public class com.fnmobi.sdk.api.**{
public ;
}
-keep public class com.fnmobi.sdk.FnMobiSdk{
*;
}
-keep public class com.fnmobi.sdk.FnMobiConf{
*;
}
-keep public class com.fnmobi.sdk.FnMobiConf$Builder{
*;
}
-keep class com.wannuosili.sdk.** {*;}
-dontwarn com.wannuosili.sdk.**
-keepattributes *Annotation*
-keepattributes *JavascriptInterface*-keepclassmembers class * { @android.webkit.JavascriptInterface ;}
-keep class com.yd.** {*;}
```
> Android 其他错误,可以参考下面的 `常见错误解决方法`
## 2、相关接口
### 初始化
``` Dart
/// 初始化广告
/// [appId] 应用媒体ID
/// [test] 是否开启测试
/// [debug] 是否开启调式
FlutterFnSdk.initAd(appId, test: true, debug: true);
```
### 设置广告监听
```
FlutterFnSdk.onEventListener((event) {
_adEvent = 'adId:${event.adId} action:${event.action}';
if (event is AdErrorEvent) {
// 错误事件
_adEvent += ' errCode:${event.errCode} errMsg:${event.errMsg}';
} else if (event is AdRewardEvent) {
// 激励事件
_adEvent +=
' transId:${event.transId} customData:${event.customData} userId:${event.userId}';
}
print('onEventListener:$_adEvent');
});
```
### 开屏广告
``` Dart
/// 展示开屏广告
/// [posId] 广告位 id
FlutterFnSdk.showSplashAd(posId);
```
### 插屏广告
``` Dart
/// 展示插屏广告
/// [posId] 广告位 id
FlutterFnSdk.showInterstitialAd(posId);
```
### 激励视频广告
``` Dart
/// 展示激励视频广告
/// [posId] 广告位 id
/// [userId] 用户id
/// [customData] 附加信息
FlutterFnSdk.showRewardVideoAd(
AdsConfig.rewardVideoId,
userId: 'userId',
customData: 'customData',
);
```
### Banner 广告
> 这里 Banner 是一个 `Widget` ,你可以放到任何 Flutter 组件上,需要外部嵌套一个带有约束的`Widget`使用 `AspectRatio、SizedBox、Container`
``` Dart
/// 初始化广告
/// [posId] 广告位 id
/// [show] 是否开启显示
AdBannerWidget(
posId: AdsConfig.bannerId,
show: true,
)
```
- 如嵌套 `Container`
``` Dart
Container(
width: double.infinity,
height: 80,
child: AdBannerWidget(
posId: AdsConfig.bannerId,
show: true,
),
)
```
## 常见错误解决方法
```
AAPT: error: unexpected element found in
```
[参考这里解决,需要升级 gradle](https://stackoverflow.com/a/65857921/4501068),具体版本看 example 里的示例
```
Cannot fit requested classes in a single dex file (# methods: 113215 > 65536 ; # fields: 93885 > 65536)
```
[方法数超过 64k,需要分包,参考这里配置](https://stackoverflow.com/a/51341735/4501068),具体版本看 example 里的示例
```
Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19
```
> 更新 `minSdkVersion` 为 `21`
```
add 'tools:replace="android:label"' to element at AndroidManifest.xml
```
> 在 `AndroidManifest.xml`的 `application` 节点中添加 `tools:replace="android:label"`