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元无门槛券
私享最新 技术干货