# 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); } ```