Dirichlet Ad SDK Unity 接入文档
SDK 支持版本
- Unity 2019.4 LTS 及以上(推荐使用 Unity 2022.3 LTS)
- Android 5.0(API level 21)及以上
- .NET Standard 2.0 及以上
- Gradle 7.x + Android Gradle Plugin 4.0.1 及以上
- Unity 集成资源:
dirichlet_ad_unity_4.2.4.3.unitypackage
SDK 集成
方式一:UnityPackage 导入(推荐)
- 下载
dirichlet_ad_unity_4.2.4.3.unitypackage - 在 Unity 中依次点击 Assets → Import Package → Custom Package…
- 选择下载的
.unitypackage,保持所有条目勾选并导入 - 导入完成后确认存在以下目录:
Assets/DirichletAdAssets/DirichletAd/sample(示例代码)Assets/Plugins/Android/DirichletAd
发布前务必删除示例代码
sample 目录包含示例代码,仅供开发调试参考。
正式发布前请务必删除 sample 目录,避免示例代码被打包到线上版本。
UnityPackage 导入后的下一步
使用 UnityPackage 导入后,可直接跳转至「SDK 初始化」章节开始接入。UnityPackage 已包含完整的 Gradle 依赖配置、AndroidManifest 权限声明及 ProGuard 混淆规则,无需手动处理。
下方「SDK 配置」章节仅适用于以下场景:
- 采用「方式二:手动拷贝」进行集成
- 项目已启用自定义 Gradle/Manifest 模板,需要与现有配置合并
- 构建时出现依赖冲突或 Manifest 合并错误
方式二:手动拷贝
- 将官方提供的
Assets/DirichletAd、Assets/Plugins/Android、Assets/Plugins/Android/libs等目录完整复制至项目 - 保留随包提供的
AndroidManifest.xml、mainTemplate.gradle、proguard-user.txt等构建文件 - 如项目已有自定义模板,请根据下方「SDK 配置」章节合并配置
SDK 配置
适用范围
本章节仅适用于手动拷贝集成或需要自定义构建配置的场景。若使用 UnityPackage 导入且构建正常,可跳过本章节,直接阅读「运行时权限」及后续内容。
mainTemplate.gradle 依赖配置
- 在 Unity 中勾选 Project Settings → Player → Android → Publish Settings → Build → Custom Main Gradle Template
- 确认生成的
Assets/Plugins/Android/mainTemplate.gradle中包含:flatDir { dirs 'libs', 'DirichletAd/libs' }- 下列依赖声明
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation(name: "dirichlet_ad_4.2.4.3", ext: "aar")
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
implementation "com.android.support:appcompat-v7:28.0.0"
implementation "com.android.support:support-annotations:28.0.0"
implementation "com.android.support:support-v4:28.0.0"
implementation "com.github.bumptech.glide:glide:4.9.0"
implementation 'com.android.support:recyclerview-v7:28.0.0'
}
提示
若接入方使用 EDM4U(External Dependency Manager for Unity),可保留 TapAdDependencies.xml 以自动解析所需依赖。
AndroidManifest 权限与组件
在 Custom Main Manifest 模式下编辑 Assets/Plugins/Android/AndroidManifest.xml,确保包含以下权限与 Provider:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools">
<!-- 必须权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 建议权限(提高定向及下载能力,可按需裁剪) -->
<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"/>
<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"/>
<application>
<provider
android:name="com.tapsdk.tapad.internal.TapADFileProvider"
android:authorities="${applicationId}.com.tds.ad.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/tapad_ad_file_path"/>
</provider>
</application>
</manifest>
ProGuard 混淆配置
SDK 已内置 R8/ProGuard 混淆规则(通过 consumerProguardFiles 自动合并),通常无需手动添加配置。
如遇混淆相关问题,可在 Assets/Plugins/Android/proguard-user.txt 中增加以下规则:
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn com.tapsdk.tapad.**
-keeppackagenames com.tapsdk.tapad.**
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
-keepclassmembers class * extends com.tapsdk.tapad.protobuf.GeneratedMessageLite {
<fields>;
}
-keepnames class * extends com.tapsdk.tapad.protobuf.GeneratedMessageLite
运行时权限
Unity 侧可在合适时机请求 SDK 所需权限:
using Dirichlet.Ad;
public void RequestPermissionsIfNeeded()
{
DirichletAdSdk.RequestPermissionIfNecessary();
}
SDK 初始化
创建配置
using Dirichlet.Ad;
var config = new DirichletAdConfig.Builder()
.WithMediaId(YourMediaId)
.WithMediaKey("your-media-key")
.WithMediaName("YourGame")
.EnableDebug(false) // 开发阶段可设为 true
.ShakeEnabled(true)
.Build();
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
MediaId | long | ✅ | Dirichlet 后台分配的媒体 ID |
MediaKey | string | ✅ | 媒体密钥 |
MediaName | string | ❌ | 用于日志及后台展示 |
EnableDebug | bool | ❌ | 是否输出调试日志,正式发布前建议关闭 |
ShakeEnabled | bool | ❌ | 是否开启摇一摇交互 |
CustomConfigJson | string | ❌ | 透传自定义配置 JSON |
初始化 SDK
DirichletAdSdk.Init(
config,
onSuccess: result => {
Debug.Log($"Dirichlet 初始化成功: {result.Message}");
},
onFailure: error => {
Debug.LogError($"Dirichlet 初始化失败: {error.Code} / {error.Message}");
}
);
if (!DirichletAdSdk.IsInitialized)
{
Debug.LogWarning("Dirichlet SDK 尚未初始化完成");
}
获取 SDK 版本
string version = DirichletAdSdk.GetVersion();
Debug.Log($"Dirichlet SDK Version: {version}");
广告通用流程
- 创建或复用
DirichletAdNative:var adNative = DirichletAdManager.CreateAdNative(); - 使用
DirichletAdRequest.Builder配置SpaceId、UserId、Reward等参数 - 调用
Load*Ad接口并在成功回调中注册Shown、Clicked、Closed等事件 - 调用
Show()展示广告,完成后可调用Destroy()释放资源
广告类型示例
激励视频(Reward Video)
自动加载展示(推荐,Android only)
4.2.0.1 新增
ShowRewardVideoAutoAd 接口将加载和展示合并为一次调用,内部自动管理广告缓存。若有可用缓存则立即展示,否则自动加载后展示。
public class MyRewardVideoAutoAdListener : IDirichletRewardVideoAutoAdListener
{
public void OnError(DirichletError error)
{
Debug.LogError($"激励视频加载/展示失败: {error.Code} {error.Message}");
}
public void OnAdShow()
{
Debug.Log("激励视频展示");
}
public void OnAdClose()
{
Debug.Log("激励视频关闭");
}
public void OnRewardVerify(DirichletRewardVerificationEventArgs args)
{
if (args.IsVerified)
{
GrantReward(args.RewardAmount, args.RewardName);
}
}
public void OnAdClick()
{
Debug.Log("激励视频点击");
}
}
// 调用方式
adNative.ShowRewardVideoAutoAd(request, new MyRewardVideoAutoAdListener());