1:背景原因
现在平台上架应用,比如快手头条都要求app在获取一些android权限,id前必须要用户同意才可以获取,但是unity打出的包只要应用一启动,unity内部就会去获取androidid,这样就会被平台打回
2:解决办法
1.一开始查阅了很多资料,很多都说得是 关闭unity的一些服务就好了,比如unity的Analytics服务,开始我也是这样尝试的,把unity内部能关的服务都关了,然后用重新提测,照样被打回,这个方案无效
2.最终解决方案是在unity前面新起一个Activity,这样就是纯Android得了,然后在这个Activity里弹出用户隐私同意的界面,用户同意了在跳转到Unity的Activity,这样就完全没问题了
先在AndroidManifest定义一个启动Activity,把这个Activity指定为Main,如下图所示
然后在通过LauncherActivity 跳转到UnityPlayerActivity,下面是参考代码
public class LauncherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StatusBarUtil.fullScreen(this);
setContentView(R.layout.activity_main);
//这里写一个android界面 弹出隐私同意,同意了后在跳转到UnityPlayerActivity
}
private void initGame() {
Intent intent = new Intent(this, UnityPlayerActivity.class);
startActivity(intent);
//关闭当前activity
LauncherActivity.this.finish();
}
}
这样就完美解决了合规问题
3:优化项
1.老的unity版本的bugly也会有合规问题,要升级到新版本的bugly,笔者用的是
implementation(name: 'bugly-4.1.9.2', ext: 'aar')
新版本的bugly是纯android的,不会像unity版本的bugly一样自动上报一些lua,c#的报错,这时就需要自己去上报一些自定义报错了,用到的接口是 CrashReport.postCatchedException(new Throwable(message),new Thread(stack));
2.上面的做法 新启动一个Activity的话 默认的是黑屏,这个体验不太好,可以把健康公告移动到这里作为背景图
最简单的就是直接建一个layout,如下图所示
然后在OnCreate的时候setContentView(R.layout.activity_main);就可以了
3:关于异形屏适配,上面的android_layout在曲面屏 会有空隙,不能全屏铺满,还需要代码设置
代码如下
public static void fullScreen(Activity activity) {
//全屏显示
activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//影藏nav bar
int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // hide status bar
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; // hide nav bar
activity.getWindow().getDecorView().setSystemUiVisibility(uiFlags);
//异形屏填满屏幕
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
activity.getWindow().setAttributes(lp);
}
//使界面充满状态栏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//需要设置这个flag contentView才能延伸到状态栏
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
} else {
//让contentView延伸到状态栏并且设置状态栏颜色透明
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
最终重新上架,就大功告成了