# ads-flutter
**Repository Path**: app-front-end/ads-flutter
## Basic Information
- **Project Name**: ads-flutter
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-03-06
- **Last Updated**: 2024-03-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Flutter Ruhu
Flutter rh广告插件
## 接入文档
### 引入广告 SDK
#### Android
1. 引入该 Flutter 插件
2. Gradle 依赖冲突
应用自身依赖有版本冲突可参考:[Duplicated classes found ](https://stackoverflow.com/questions/56695106/duplicated-classes-found-in-modules-classes-jar)
```groovy
dependencies {
implementation('com.XXX.XXX:XXX:3.4.0') {
exclude group: 'com.XXX.XXX', module: 'XXX'
}
}
```
应用使用的插件中引入的依赖有版本冲突可参考:
```groovy
android {
configurations {
all*.exclude module: 'okhttp-3.10.0'
}
}
```
#### iOS
##### 运行环境
1. iOS 11.0 及以上
2. 编译环境 Xcode 14.2
3. 支持架构:arm64
##### 引入 Framework 包
1. 引入架包
2. 修改快手广告SDK
'Tagets - General - Frameworks, Libraies...' 下修改快手SDK为 `Embed & Sign`
3. 添加 `-ObjC` 编译配置
'Tagets - Build Settings - Linking - Other Linker Flags' 添加 `-ObjC`
##### 添加依赖库
'Tagets - Build Phases - Link Binary With Libraries' 添加以下依赖库
点击展开依赖库列表
Accelerate.framework
AdSupport.framework
AppTrackingTransparency
AudioToolbox.framework
AVFoundation.framework
CoreGraphics.framework
CoreImage.framework
CoreMedia.framework
CoreMotion.framework
CoreTelephony.framework
CoreText.framework
ImageIO.framework
JavaScriptCore.framework
MapKit.framework
MediaPlayer.framework
MobileCoreServices.framework
QuartzCore.framework
Security.framework
StoreKit.framework
SystemConfiguration.framework
UIKit.framework
WebKit.framework
libbz2.tbd
libc++.tbd
libiconv.tbd
libresolv.9.tbd
libsqlite3.tbd
libxml2.tbd
libz.tbd
libc++abi.tbd
DeviceCheck.framework
##### 添加权限请求
在 `info.plist` 文件中添加:
1. 允许 HTTP 访问
```
NSAppTransportSecurity
NSAllowsArbitraryLoads
```
2. 位置权限
```
NSLocationWhenInUseUsageDescription
获取位置信息用于提供个性化推荐
```
3. IDFA 权限
```
NSUserTrackingUsageDescription
获取标识符信息用于个性化推荐
```
##### 添加广告归因
在 `info.plist` 中添加:
```
SKAdNetworkItems
SKAdNetworkIdentifier
f7s53z58qe.skadnetwork
SKAdNetworkIdentifier
r3y5dwb26t.skadnetwork
SKAdNetworkIdentifier
238da6jt44.skadnetwork
SKAdNetworkIdentifier
x2jnk7ly8j.skadnetwork
SKAdNetworkIdentifier
22mmun2rn5.skadnetwork
```
### 初始化 SDK
```dart
await
FlutterRuhu.initSDK(appId: AdConfig.appId,appKey: AdConfig.appKey,isDebug: true
,
);
```
### 显示开屏广告
```dart
await
FlutterRuhu.showSplashAd(slotId: AdConfig.splashId,logo: '
logo_image
'
,
onADLoaded: () {
// 广告加载成功
},
onADError: () {
// 广告加载失败
},
onADExposure: () {
// 广告曝光成功
},
onADClick: () {
// 广告被点击
},
onADClose: () {
// 广告已关闭
},
);
```
### 显示插屏广告
```dart
await
FlutterRuhu.showInterstitialAd(slotId: AdConfig.interstitialId,onADExposure: () {
// 广告曝光成功
},
onADError: () {
// 广告加载失败
},
onADClick: () {
// 广告被点击
},
onADClose: () {
// 插屏广告关闭
},
);
```
### 显示激励视频广告
```dart
await
FlutterRuhu.showRewardAd(slotId: AdConfig.rewardId,onADLoaded: () {
// 广告加载成功
},
onADError: () {
// 广告加载失败
},
onADShow: () {
// 展示成功
},
onADExposure: () {
// 广告曝光成功
},
onADClick: () {
// 广告被点击
},
onADClose: () {
// 插屏广告关闭
},
onADReward: () {
// 广告奖励
},
);
```
### 信息流广告
```dart
class FeedAd extends StatefulWidget {
const FeedAd({Key? key}) : super(key: key);
@override
State createState() => _FeedAdState();
}
class _FeedAdState extends State with AutomaticKeepAliveClientMixin {
@override
Widget build(BuildContext context) {
super.build(context);
return RuhuFeedAd(
slotId: AdConfig.feedId,
onAdRenderSuccess: () {
//渲染回调
},
onADLoaded: () {
// 加载成功
},
onADError: (String message) {
print('FeedAd | 加载失败 $message');
},
onADExposure: () {
// 曝光成功
},
onADClick: () {
// 点击了广告
},
onADClose: () {
// 广告被关闭
},
);
}
@override
bool get wantKeepAlive => true;
}
```
### 安卓混淆添加
```
-keep public class com.rh.sdk.**{ *;}
-keep interface com.adspace.sdk.**{*;}
-keep public class com.assembly.utils.**{*;}
-keep public class com.adspace.utils.*{*;}
-keep public class com.adspace.widget.*{*;}
-keep class com.adspace.sdk.channel.*.*{*;}
-keep public class com.adspace.sdk.net.model.**{*;}
-keep public class com.adspace.sdk.net.model.methodproxy**{
public ;
}
-keep class com.adspace.sdk.config.AdConfig{ *; }
-keep class com.adspace.sdk.config.AdConfig$*{
;
;
}
#oaid混淆
-dontwarn com.bun.**
-keep class com.bun.** {*;}
-keep class a.**{*;}
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.opendeviceidlibrary.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public ;}
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable*Annotation*,EnclosingMethod
-keep class com.bytedance.sdk.openadsdk.** {*;}
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.* {*;}
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-keep class com.kwad.**{ *; }
-keepclasseswithmembernames class * {
native ;
}
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**
-keep class pro.dxys.ad.**{*;}
-keep class com.taobao.**{*; }
-dontwarn com.baidu.mobads.sdk.api.**
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class com.baidu.mobads.** { *; }
-keep class com.style.widget.** {*;}
-keep class com.component.** {*;}
-keep class com.baidu.ad.magic.flute.** {*;}
-keep class com.ads.widget.* {*;}
-keep class com.kwad.sdk.** { *;}
-keep class com.ksad.download.** { *;}
-keep class com.kwai.filedownloader.** { *;}
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable*Annotation*,EnclosingMethod
-keep class com.bytedance.sdk.openadsdk.** {*;}
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.* {*;}
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-keep class com.kwad.**{ *; }
-keepclasseswithmembernames class * {
native ;
}
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**
-keep class pro.dxys.ad.**{*;}
-keep class com.taobao.**{*; }
-keep class com.bytedance.notpluginpro.tmapcloaknotplugin{*;}
-keep class com.bytedance.frameworks.** { *; }
-keep class ms.bd.c.Pgl.**{*;}
-keep class com.bytedance.mobsec.metasec.ml.**{*;}
-keep class com.ss.android.**{*;}
-keep class com.bytedance.embedapplog.** {*;}
-keep class com.bytedance.embed_dr.** {*;}
-keep class com.bykv.vk.** {*;}
-keep public interface com.uodis.** { *; }
-keep public class com.bytedance.sdk.api.*.**{ *; }
-keep public class com.bytedance.sdk.api.**{ *; }
-keep public class com.bytedance.sdk.adapter.*.**{ *; }
-dontwarn com.beizi.fusion.**
-dontwarn com.beizi.ad.**
-keep class com.beizi.fusion.** {*; }
-keep class com.beizi.ad.** {*; }
-keep class com.qq.e.** {
public protected *;
}
-keepattributes *Annotation*
-dontwarn org.apache.**
-dontwarn com.octopus.group.**
-dontwarn com.octopus.ad.**
-keep class com.octopus.group.** {*; }
-keep class com.octopus.ad.** {*; }
-keep class com.jd.ad.sdk.** { *; }
-dontwarn org.apache.**
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
```