TapADN SDK Android 接入文档
SDK 概述
TapADN SDK 是一款功能完善的移动广告SDK,支持多种广告形式:
- 开屏广告(Splash Ad):应用启动时展示的全屏广告
- 激励视频广告(Reward Video Ad):用户观看完整视频后获得奖励
- Banner广告:固定位置的横幅广告
- 插屏广告(Interstitial Ad):全屏或半屏的插屏广告
- 信息流广告(Feed Ad):嵌入内容流中的原生广告
主要特性:
- 丰富的自定义配置选项
- 完善的隐私合规控制
- 多样化的广告交互回调
最低支持 Android 5.0(API level 21),编译环境为 Android Studio。
将 dirichlet_ad_5.3.1.6.aar 拷贝到游戏目录下的 src/main/libs 目录中。
在游戏目录下 build.gradle 文件中添加代码:
- 从 SDK 5.2.1.5 版本开始,SDK 不再依赖 Android Support Library、AndroidX 或 Glide,无需为 SDK 添加这些依赖。
- 从 SDK 4.1.0.0 版本开始,SDK 已不再依赖 RxJava,无需添加 RxJava 相关依赖(
io.reactivex.rxjava2:rxandroid和io.reactivex.rxjava2:rxjava)。
repositories{
flatDir{
dirs 'src/main/libs'
}
}
dependencies {
// ...
implementation(name: "dirichlet_ad_5.3.1.6", ext: "aar") // 广告 SDK
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
// ...
}
Android AD SDK 5.3.1.6 与 AD Demo 使用 OkHttp 3.10.0,上例与其保持一致。宿主已使用兼容版本时无需降级,请避免同时引入多份 OkHttp 类。
权限申请 & 清单声明配置
配置 AndroidManifest.xml 时按实际功能选择权限,不要求全部添加。AAR 已声明的权限和组件会自动合并,请检查最终 Merged Manifest。权限声明不等于用户授权,也不会代替初始化前的隐私开关配置。
<!-- 广告 SDK 已添加的权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 以下权限按实际功能选用,当前 ADN 不采集或转发 IMEI -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.BLUETOOTH"/>
<!-- 仅在宿主确有蓝牙连接功能时按系统版本配置,不是广告接入的通用要求 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<!-- 位置相关功能按需配置;SDK 权限申请辅助接口仅申请粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 仅在需要发送通知时配置 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<provider
android:authorities="${applicationId}.com.tds.ad.fileprovider"
android:name="com.tapsdk.tapad.internal.TapADFileProvider"
android:exported="false"
android:grantUriPermissions="true" />
AndroidManifest 组件配置
重要:SDK内部使用了多个Activity和Provider,这些组件会自动合并到您的应用中,无需手动配置。但如果遇到合并冲突,可以参考以下配置:
点击查看完整的组件配置(仅供参考,正常情况无需手动添加)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="your.package.name">
<!-- Android 11+ 包可见性配置 -->
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
</intent>
<package android:name="com.tencent.mm" />
</queries>
<application>
<!-- SDK内部使用的Activity(自动合并,无需手动添加) -->
<!-- 竖屏视频广告Activity -->
<activity
android:name="com.tapsdk.tapad.stub.activity.Stub_Standard_Portrait_Activity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="portrait" />
<!-- 横屏视频广告Activity -->
<activity
android:name="com.tapsdk.tapad.stub.activity.Stub_Standard_Landscape_Activity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="landscape" />
<!-- 试玩广告Activity -->
<activity
android:name="com.tapsdk.tapad.stub.activity.Stub_Playable_Portrait_Activity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name="com.tapsdk.tapad.stub.activity.Stub_Playable_Landscape_Activity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="landscape" />
<!-- 通用广告Activity -->
<activity
android:name="com.tapsdk.tapad.stub.activity.Stub_Portrait_Activity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="sensorPortrait" />
<activity
android:name="com.tapsdk.tapad.stub.activity.Stub_Landscape_Activity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="sensorLandscape" />
<!-- 内置浏览器Activity -->
<activity
android:name="com.tapsdk.tapad.internal.ui.views.web.BrowserActivity"
android:exported="false"
android:screenOrientation="sensor"
android:configChanges="orientation|keyboardHidden|screenSize"
android:windowSoftInputMode="adjustResize|stateHidden" />
<!-- 应用安装/打开透明Activity -->
<activity
android:name="com.tapsdk.tapad.stub.activity.Stub_Install_or_OpenApp_Translucent_Activity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false" />
<!-- FileProvider:用于APK下载安装 -->
<provider
android:name="com.tapsdk.tapad.internal.TapADFileProvider"
android:authorities="${applicationId}.com.tds.ad.fileprovider"
android:exported="false"
android:grantUriPermissions="true" />
<!-- 下载Provider -->
<provider
android:name="com.tapsdk.tapad.internal.download.OkDownloadProvider"
android:authorities="${applicationId}.com.tapsdk.tapad.okdownload"
android:exported="false" />
</application>
</manifest>
注意:
- 以上组件配置会通过Gradle的Manifest合并机制自动添加到您的应用中
- 如果在构建时遇到Manifest合并冲突,可以在主应用的AndroidManifest.xml中使用
tools:replace或tools:merge来解决${applicationId}会自动替换为您应用的包名
ProGuard 混淆配置
重要:SDK 已内置 R8/ProGuard 混淆规则(通过 consumerProguardFiles 自动合并),通常无需手动添加任何配置。
如遇混淆相关问题或需要自定义配置,可参考以下规则:
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
-dontwarn org.conscrypt.**
-dontwarn com.tapsdk.tapad.**
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-keepattributes JavascriptInterface
-keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); }
-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); }
-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; }
-keepclassmembers class * extends com.tapsdk.tapad.protobuf.GeneratedMessageLite {
<fields>;
}
-keepnames class * extends com.tapsdk.tapad.protobuf.GeneratedMessageLite
-keepnames class * extends com.tapsdk.tapad.protobuf.GeneratedMessageLite$Builder
-keeppackagenames com.tapsdk.tapad.**
注意:
- 上述规则已包含在 SDK 的 AAR 文件中,构建时会自动应用
- 正式发布前务必测试混淆后的 APK,确保广告功能正常运行
获取广告权限
以下兼容接口仅检查并尝试申请尚未授予的 READ_PHONE_STATE 和 ACCESS_COARSE_LOCATION,不申请精确位置、通知等其他权限,也不会根据隐私控制器开关自动筛选。
当前 ADN 不采集或转发 IMEI。不要把获取设备状态或位置权限作为所有用户初始化 SDK 的前 提;仅需某一项或其他权限时,应由宿主按具体功能自行申请并处理拒绝结果。
方式一:检查未授权权限并尝试申请
TapAdManager.get().requestPermissionIfNecessary(activity);
方式二:带申请记录的频控
TapAdManager.get().requestPermissionIfNecessary(activity, true);
activity:用于申请权限的 Activity 上下文。enableFrequencyControl = false:与单参数版本相同,检查未授权权限后尝试申请,不保证每次弹窗;是否展示由系统权限状态等因素决定。enableFrequencyControl = true