跳到主要内容

Android SDK配置

请开发者根据下面步骤介绍集成SDK所需配置,跳过或漏看会导致集成失败。

Android平台导入

1.Editor 2019及以上版本

(1)生成Gradle和AndroidManifest.xml文件

按照下图,生成baseProjectTemplate.gradlemainTemplate.gradleAndroidManifest.xml文件

(2)baseProjectTemplate.gradle配置-- 添加所需Maven库

在上图生成的baseProjectTemplate.gradle文件中引入所需Maven库,maven库的引用,根据TradPlusSDK下载平台生成代码为准

如下以开发者选择接入IrouSource举例说明

allprojects {
buildscript {
repositories {**ARTIFACTORYREPOSITORY**
mavenCentral() // TPSDK以及其他三方广告平台Maven库 必须添加
google() //必须添加
maven { url 'https://android-sdk.is.com/' } // IronSource的Maven库
jcenter() //放在所有Maven库最下面,以防三方平台走错Maven库导致拉取失败
}
...
}

repositories {**ARTIFACTORYREPOSITORY**
mavenCentral() // TPSDK以及其他三方广告平台Maven库 必须添加
google() //必须添加
maven { url 'https://android-sdk.is.com/' } // IronSource的Maven库
jcenter() //放在所有Maven库最下面,以防三方平台走错Maven库导致拉取失败
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
}
}
...

(2)mainTemplate.gradle配置-- 添加所需Gradle

在上图生成的mainTemplate.gradle文件中引入所需Gradle,根据TradPlusSDK下载平台生成代码为准进行配置,开发者直接添加引用到dependencies

2.Editor 2018

(1)mainTemplate.gradle文件生成并配置

如下图生成mainTempate.gradle文件

WeChatWorkScreenshot_0767252a-d886-49b8-afb7-19680a49ea77.png

在上图生成的mainTemplate.gradle文件中引入所需Gradle,根据TradPlusSDK下载平台生成代码为准进行配置,开发者直接添加引用到dependencies

(2)生成Manifest.xml文件

在unity的安装目录下,可以找到unity默认的AndroidManifest文件,复制到您的生成mainTempate.gradle的同级目录中

配置清单文件

  • 下列文档中所提权限均是三方广告平台要求添加的权限
  • 必加权限,会提醒说明
  • 添加位置如下

应用清单添加声明,开发者需要在如下位置添加相应的 <uses-permission> 元素

<manifest >
<!--国内海外必须添加的联⽹权限——TP已经添加,开发者可不配置-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

(1)国内广告源

  • 这部分权限三方平台SDK没有要求强制添加,即使没有获取可选权限SDK也能正常运行;获取以上权限将帮助三方平台优化投放广告精准度和用户的交互体验,提高eCPM
<!--获取设备标识IMEI。快手、Sigmob、有道、MTG国内-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<!--读写存储权限。快手、百度-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<!--安装应⽤权限。快手、百度、MTG国内-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

<!-- MTG国内、穿山甲国内将通过此权限在Android R系统上判定广告对应的应用是否在用户的app上安装,避免投放错误的广告,以此提高用户的广告体验。 -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
  • 穿山甲国内SDK——必要权限
<!--必要权限,解决安全风险漏洞,发送和注册广播事件需要调用带有传递权限的接口-->
<permission
android:name="${applicationId}.openadsdk.permission.TT_PANGOLIN"
android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.openadsdk.permission.TT_PANGOLIN" />

<!-- 如果视频广告使用textureView播放,请务必添加,否则黑屏 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

(2)海外广告源

  • Pangle SDK V45及以下——必要权限
<!--如果视频广告使用textureView播放,请务必添加,否则黑屏 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
  • Android 12 以上,同意获取 Android Advertiser Identifier:
<uses-permission android:name="android.permission.Ad_ID" />

(3)可选权限

  • 申请以下权限用于防作弊功能以及有助于广告平台投放广告
<!--可选权限,申请后用于防作弊功能以及有助于广告平台投放广告-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

配置三方声明

配置声明,是三方平台为了能让广告正常展示做的兼容性处理,开发者根据所接入的广告源在如下位置添加相应的 <meta-data><provider>元素

<manifest>
<application>

<!-- 在这个位置添加meta-data -->
<meta-data
.../>

<!-- 在这个位置添加provider -->
<provider
...
</provider>
</application>
</manifest>

(1)Google Admob

  • 开发者需要在AndroidManifest.xml中添加Admob application ID(以下简称:APPID)

  • 以下代码块中App ID仅为测试使用,正式上线前需要替换成开发者自己申请的APPID,漏替换会导致线上无填充或一直下发测试广告。

  • android:value中的App ID开发者可在Admob后台获取,如图

<!--Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713-->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>

(2)Applovin

  • 需要在AndroidManifest.xml中添加SDK KEY,需要登陆Applovin后台在Account-Keys中获取账户的SDK Key,如图:
  • TPV7.3.0.1开始支持服务器下发SDK KEY,开发者仅需在TP后台配置即可,无需项目中添加此配置。
<!--AppLovin -->
<!--添加您的Applovin SDK Key-->
<meta-data
android:name="applovin.sdk.key"
android:value="YOUR_SDK_KEY_HERE" />

(3)Smaato

  • Android targetSdkVersion 版本在5.0 (API level 21) 以上,则必须在AndroidManifest.xml中添加如下内容,了解更多Smaato integration
<uses-feature android:name="android.hardware.location.network" />

(4)腾讯优量汇GDT

  • 如果您打包 App 时的 targetSdkVersion >= 24,为了让 SDK 能够正常下载、安装 App 类广告。需要在AndroidManifest.xml中添加 provider 标签
  • 其中gdt_file_path.xml文件腾讯方直接写入GDT SDK中。如果没成功引入资源包,会报错找不到该文件。
  • xml找不到,开发者需自行检查,项目中是否正常引入GDT SDK。
<provider
android:name="com.qq.e.comm.GDTFileProvider"
android:authorities="${applicationId}.gdt.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/gdt_file_path" />
</provider>

(5)国内的Mintegral

  • 中国大陆流量版本必需,海外版本可以不添加
  • 需要在AndroidManifest.xml中添加 provider 标签
  • 其中mb_provider_paths文件TP直接写入MTG adapter中。如果没成功引入,会报错找不到该文件。
  • xml找不到,开发者需自行检查,项目中是否正常引入MTG adapter。
<provider
android:name="com.mbridge.msdk.foundation.tools.MBFileProvider"
android:authorities="${applicationId}.mbFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/mb_provider_paths"/>
</provider>

(6)头条穿山甲CSJ

  • 需要在AndroidManifest.xml中添加 provider 标签
  • 其中file_paths .xml文件TP直接写入toutiao adapter中。如果没成功引入,会报错找不到该文件。
  • xml找不到,开发者需自行检查,项目中是否正常引入toutiao adapter。
<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

(7)国内Sigmob

  • 其中sigmob_provider_paths.xml文件TP直接写入sigmob adapter中。如果没成功引入,会报错找不到该文件。
  • xml找不到,开发者需自行检查,项目中是否正常引入sigmob adapter。
<!-- targetSDKVersion >= 24时才需要添加这个provider。
provider的authorities属性的值为${applicationId}.sigprovider -->

<provider
android:name="com.sigmob.sdk.SigmobFileProvider"
android:authorities="${applicationId}.sigprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/sigmob_provider_paths"/>
</provider>

(8)国内米盟Mimo

  • 其中file_paths.xml文件TP直接写入mimo adapter中。如果没成功引入,会报错找不到该文件。

  • xml找不到,开发者需自行检查,项目中是否正常引入mimo adapter。

  • AndroidX 项目需要添加

<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
  • Android Support 项目需要添加
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

Android 9以上适配

注意:如果缺少该配置,可能会导致广告图片显示不出来

网络安全配置

Google为保证用户数据和设备的安全,针对Android 系统(Android P) 的应用程序要求默认使用加密连接。在Android P系统的设备上,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响;故开发者需要更改 App 的网络安全配置以允许此类连接。

Meta Audience Network举例说明:

  • 从 Android 9 开始,明文流量(未加密的 HTTP)默认会被拦截,这会影响Meta SDK的媒体缓存功能,并可能影响用户体验和广告收入。
  • 官方地址Meta Caching on Android 9
  • 开发者可以为特定网域添加加密政策,从而仅允许传输加密流量,如网络域限制到127.0.0.1,代码示例如下:

第一步:添加网络安全配置文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application
android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>

第二步:在项目的res/xml文件夹新增network_security_config.xml,内容如下:

项目路径:res/xml/network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config
cleartextTrafficPermitted="true">
<domain includeSubdomains="true">127.0.0.1</domain>
</domain-config>
</network-security-config>

Apache的兼容

在 Android 6.0 中,SDK移除了对 Apache HTTP 客户端的支持。从 Android 9 开始,该内容库已从 bootclasspath 中移除,且默认情况下应用无法使用它。

更多了解,请看Google官网文档 Apache HTTP 客户端弃用

<application>
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
</application>

Android 13及以上适配

  • 集成AdmobIronSourceFyber上架Google Play市场的应用
    • 其中Admob 移动广告 SDK 版本 20.4.0 或更高版本已经默认声明该权限
  • Android 13及以上 ,则需要许可来读取设备的广告 ID。
  • 了解更多请查看Google Advertising ID changes
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
  • 集成Tapjoy V12.9.0 (TradPlus V7.7.0.1及以上),该SDK包括play-services-ads v17.1.0。对于Google Play Families Program成员,17.1.0版本 play-services-ads 中包括的AD_ID许可必须删除。
<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>

视频广告的硬件加速

  • 集成Meta(Facebook)MintegralChartBoost等视频广告需要启用硬件加速渲染,否则可能会在视频视图中遇到黑屏。
  • 将以下属性添加到<application>标记以启用整个应用程序的硬件加速
<application 
android:hardwareAccelerated="true" >

AndroidX配置

按照下图,生成gradleTemplate.properties文件。

在生成的gradleTemplate.properties文件中添加如下配置

//添加以下配置
android.enableJetifier=true
android.useAndroidX=true

如果使用的Unity Editor没有生成gradleTemplate.properties文件的选项。需要在项目的Assets/Plugins/Editor新增文件SupportAndroidXGradlePropertiesBuildProcessor.cs,添加如下内容:

using System.IO;
using UnityEditor.Android;
using UnityEngine;

public class SupportAndroidXGradlePropertiesBuildProcessor : IPostGenerateGradleAndroidProject
{
public int callbackOrder
{
// 同种插件的优先级
get { return 999; }
}
public void OnPostGenerateGradleAndroidProject(string path)
{
Debug.Log("Bulid path : " + path);
string gradlePropertiesFile = path + "/gradle.properties"; //2019版及其以上使用的路径
if (File.Exists(gradlePropertiesFile))
{
File.Delete(gradlePropertiesFile);
}
StreamWriter writer = File.CreateText(gradlePropertiesFile);
writer.WriteLine("org.gradle.jvmargs=-Xmx4096M");
writer.WriteLine("android.useAndroidX=true");
writer.WriteLine("android.enableJetifier=true");
writer.Flush();
writer.Close();
}
}

混淆配置

**添加混淆文件,否则将导致打Release包时无法拉取到TP广告配置而请求广告失败。**在如下位置勾选User Proguard File生成对应的配置文件,之后在生成的文件中添加如下配置:

-keep public class com.tradplus.** { *; }
-keep class com.tradplus.ads.** { *; }

资源优化

广告SDK的资源不能被混淆,如果使用第三方的资源优化框架,请配置SDK的资源为白名单,例如:

# 接入原生、原生横幅、原生拼接开屏等广告类型
R.string.tp_*
R.drawable.tp_*
R.layout.tp_*
R.id.tp_*

# 集成交叉推广、adx
R.string.cp_*
R.drawable.cp_*
R.layout.cp_*
R.id.cp_*

# 集成游可赢Klevin
R.anim.klevin_*
R.color.klevin_*
R.drawable.klevin_*
R.id.klevin_*
R.layout.klevin_*
R.mipmap.klevin_*
R.string.klevin_*
R.integer.klevin_*
R.style.klevin_*
R.dimen.klevin_*
R.xml.klevin_*