Skip to main content

SDK集成及初始化

开发环境#

操作系统:支持 Linux/Mac/Windows 系统

开发工具:支持 Android Studio

支持设备:Android 5.0 及以上系统的 Android 设备

术语#

AppID:媒体ID,您在游可赢平台创建媒体时获得的ID,对应一个具体的App,是游可赢平台识别该App的唯一ID

PosID:资源位ID,您在游可赢开发者平台为您的媒体创建某个广告场景时获得的ID,对应一个具体的广告位

SDK嵌入#

添加SDK到工程中#

方式一:导入aar包#

将SDK的aar包拷⻉到项目的 libs ⽬录下,并且在 build.gradle 中进⾏相应的配置。

dependencies {
implementation(name:'klevinSDK', ext:'aar')
}

方式二:Maven Central仓库依赖导入sdk#

从2.6.0版本开始,sdk发布到Maven Central仓库。在 build.gradle 中配置:

dependencies {
implementation 'com.tencent.klevin:KlevinAdSDK:2.6.0'
}

权限申请#

在AndroidManifest.xml中添加以下权限,在6.0以上还需要进行动态权限申请。

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--加上位置权限,会有更精准的广告推荐效果-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

下载文件配置#

为了让SDK能正常下载安装app,必须按下面步骤配置FileProvider。 在项目AndroidManifest.xml的Application标签中添加provider标签:

<provider
android:name="com.tencent.klevin.utils.FileProvider"
android:authorities="${applicationId}.klevin.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/klevin_provider_paths"/>
</provider>

配置说明

android:authorities必须配置为 应用包名+".klevin.fileProvider",注意区分大小写。

android:resource必须配置为@xml/klevin_provider_paths。

混淆配置#

若启用了混淆,请添加以下klevinAdSDK的混淆配置规则:

-keep class com.tencent.tgpa.lite.**{*;}
-keep class com.ihoc.mgpa.deviceid.**{*;}
-keep class com.tencent.klevin.**{*;}

资源混淆白名单#

游可赢广告SDK的资源不能被混淆,若开启了资源混淆,请配置SDK的资源为白名单。游可赢广告SDK的资源均以"klevin_"开头,参考whiteList.txt

"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_*"

SDK初始化#

在AndroidManifest.xml中配置AppID,其中value的值为申请的AppID。如代码中指定了AppID,则此处可不配置。

<meta-data
android:name="Klevin.AppId"
android:value="30708"/>

初始化接口必须在主线程中调用,建议在项目的Application类的onCreate()方法中调用SDK的初始化方法:

KlevinConfig.Builder builder = new KlevinConfig.Builder()
.appId("30708") //【必须】AppId,AndroidManifest.xml中配置后可不调用
.debugMode(false) //【可选】打开调试日志,上线前关闭
.customController(new KlevinCustomController() {
@Override
public boolean isCanUsePhoneState() {
return true;
}
});//【可选】控制用户隐私信息获取,如控制SDK能否获取IMEI等信息
KlevinManager.init(getApplicationContext(), builder.build(), new InitializationListener() {
public void onSuccess() {
Log.i(TAG, "init success");
}
public void onError(int err, String msg) {
// 初始化失败,err是错误码,msg是描述信息
Log.e(TAG, "err=" + err + " " + msg);
}
});

主要API#

com.tencent.klevin.KlevinConfig.Builder

com.tencent.klevin.KlevinManager

方法名说明参数
Builder.appId(String appid)AppId在AndroidManifest.xml中配置,又通过接口调用时,优先使用代码调用传的参数【必须】在游可赢申请的AppId
Builder.debugMode(boolean isDebug)打开详细的调试日志,release版本中务必关闭【可选】不配置时默认为false
Builder.customController(KlevinCustomController controller)设置允许sdk获取的用户信息KlevinCustomController请参考:隐私信息获取控制
Builder.personalizeEnabled(boolean enabled)是否开启个性化推荐,默认开启。true: 开启, false: 关闭。请参考:个性化推荐广告设置
Builder.build()构造KlevinConfig作为初始化sdk的参数
KlevinManager.getVersion()获取sdk的版本号
KlevinManager.init(Context ctx, KlevinConfig config, InitializationListener listener)sdk初始化接口,可通过KlevinConfig.Builder来构造初始化参数InitializationListener:初始化回调接口

多进程配置#

KlevinAdSDK中使用了Webview,在Android 9及以上,多进程不能共享一个Webview数据目录。如果您的APP中有多进程使用Webview的场景,必须在Application的初始化SDK之前调用WebView.setDataDirectorySuffix()。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName(this);
String packageName = this.getPackageName();
if (!packageName.equals(processName)) {
WebView.setDataDirectorySuffix(processName);
}
}
private String getProcessName(Context context) {
if (context == null) {
return null;
}
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
if (processInfo.pid == android.os.Process.myPid()) {
return processInfo.processName;
}
}
return null;
}

参考:

  • https://github.com/react-native-webview/react-native-webview/issues/968
  • https://developer.android.com/about/versions/pie/android-9.0-changes-28?hl=zh-cn