1.序言
最近广告小游戏对隐私协议卡的比较严,taptap官方提出整改建议是,在用户同意隐私协议后在加载穿山甲的广告。研究了一下:
2.大概思路是
修改原本的 UnionApplication.java脚本
//手动加载初始化说明:
//将本脚本文件的内容替换到 UnionApplication.java 里面
//然后将下面的代码 放到你启动广告sdk的方法里面
//
// AndroidJavaObject jo = new AndroidJavaObject("com.bytedance.ad.sdk.mediation.UnionApplication");
// jo.Call("init_ad");
//
package com.bytedance.ad.sdk.mediation;
import android.app.Application;
import android.content.Context;
import android.support.multidex.MultiDex;
import android.widget.Toast;
import com.bytedance.msdk.api.TTAdConfig;
import com.bytedance.msdk.api.TTAdConstant;
import com.bytedance.msdk.api.TTMediationAdSdk;
import com.bytedance.msdk.api.UserInfoForSegment;
import com.unity3d.player.UnityPlayer;
public class UnionApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//TTMediationAdSdk.initialize(this, buildConfig());
}
public String init_ad() {
TTMediationAdSdk.initialize(UnityPlayer.currentActivity.getApplicationContext(), buildConfig());
//Toast.makeText(UnityPlayer.currentActivity.getApplicationContext(), "用户同意隐私协议,启动SDK加载", Toast.LENGTH_LONG).show();
return "初始化广告";
}
private static TTAdConfig buildConfig() {
UserInfoForSegment userInfo = new UserInfoForSegment();
userInfo.setUserId("msdk demo");
userInfo.setGender(UserInfoForSegment.GENDER_MALE);
userInfo.setChannel("msdk channel");
userInfo.setSubChannel("msdk sub channel");
userInfo.setAge(999);
userInfo.setUserValueGroup("msdk demo user value group");
return new TTAdConfig.Builder()
.appId("5172046")
.appName("外卖人_android")
.openAdnTest(false)//开启第三方ADN测试时需要设置为true,会每次重新拉去最新配置,release 包情况下必须关闭.默认false
.isPanglePaid(false)//是否为费用户
.openDebugLog(true) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
.usePangleTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView
.setPangleTitleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)
.allowPangleShowNotify(true) //是否允许sdk展示通知栏提示
.allowPangleShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页
.setPangleDirectDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
.needPangleClearTaskReset()//特殊机型过滤,部分机型出现包解析失败问题(大部分是三星)。参数取android.os.Build.MODEL
.setUserInfoForSegment(userInfo) // 设置流量分组的信息
.build();
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(base);
}
}
他这个脚本是在 onCreate() 里面直接 在unity的activity创建的时候就加载广告sdk。会导致 用户没有同意隐私协议,广告sdk就已经在开始获取各种信息了,这不符合应用商店的要求。将其改为下面的:
//手动加载初始化说明:
//将本脚本文件的内容替换到 UnionApplication.java 里面
//然后将下面的代码 放到你启动广告sdk的方法里面
//
// AndroidJavaObject jo = new AndroidJavaObject("com.bytedance.ad.sdk.mediation.UnionApplication");
// jo.Call("init_ad");
//
package com.bytedance.ad.sdk.mediation;
import android.app.Application;
import android.content.Context;
import android.support.multidex.MultiDex;
import android.widget.Toast;
import com.bytedance.msdk.api.TTAdConfig;
import com.bytedance.msdk.api.TTAdConstant;
import com.bytedance.msdk.api.TTMediationAdSdk;
import com.bytedance.msdk.api.UserInfoForSegment;
import com.unity3d.player.UnityPlayer;
public class UnionApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//TTMediationAdSdk.initialize(this, buildConfig());
}
public String init_ad() {
TTMediationAdSdk.initialize(UnityPlayer.currentActivity.getApplicationContext(), buildConfig());
Toast.makeText(UnityPlayer.currentActivity.getApplicationContext(), "用户同意隐私协议,启动SDK加载", Toast.LENGTH_LONG).show();
return "初始化广告";
}
private static TTAdConfig buildConfig() {
UserInfoForSegment userInfo = new UserInfoForSegment();
userInfo.setUserId("msdk demo");
userInfo.setGender(UserInfoForSegment.GENDER_MALE);
userInfo.setChannel("msdk channel");
userInfo.setSubChannel("msdk sub channel");
userInfo.setAge(999);
userInfo.setUserValueGroup("msdk demo user value group");
return new TTAdConfig.Builder()
.appId("5172046")
.appName("外卖人_android")
.openAdnTest(false)//开启第三方ADN测试时需要设置为true,会每次重新拉去最新配置,release 包情况下必须关闭.默认false
.isPanglePaid(false)//是否为费用户
.openDebugLog(true) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
.usePangleTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView
.setPangleTitleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)
.allowPangleShowNotify(true) //是否允许sdk展示通知栏提示
.allowPangleShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页
.setPangleDirectDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
.needPangleClearTaskReset()//特殊机型过滤,部分机型出现包解析失败问题(大部分是三星)。参数取android.os.Build.MODEL
.setUserInfoForSegment(userInfo) // 设置流量分组的信息
.build();
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(base);
}
}
这里需要注意一个地方,就是 TTMediationAdSdk.initialize()的第一个参数,需要用 UnityPlayer.currentActivity.getApplicationContext(),如果还是用this,会出现空异常。
3.如何用unity访问这个代码
如果不理解unity和安卓交互的,可以先去学习下安卓和unity交互的基础.这里改好了,剩下的就是 让unity 能够访问这个 方法了。直接用下面的代码即可,将这个代码 放在 用户同意你的隐私协议后执行,如果你的游戏有开始游戏按钮,推荐是开始游戏 按钮里面 执行这个代码也可以放到 初始化数据的场景 里面的start方法里面去执行
AndroidJavaObject jo = new AndroidJavaObject("com.bytedance.ad.sdk.mediation.UnionApplication");
jo.Call("init_ad");
领取专属 10元无门槛券
私享最新 技术干货