unity打包android上架平台合规问题

1:背景原因

现在平台上架应用,比如快手头条都要求app在获取一些android权限,id前必须要用户同意才可以获取,但是unity打出的包只要应用一启动,unity内部就会去获取androidid,这样就会被平台打回

2:解决办法

1.一开始查阅了很多资料,很多都说得是 关闭unity的一些服务就好了,比如unity的Analytics服务,
3.png

开始我也是这样尝试的,把unity内部能关的服务都关了,然后用重新提测,照样被打回,这个方案无效
2.最终解决方案是在unity前面新起一个Activity,这样就是纯Android得了,然后在这个Activity里弹出用户隐私同意的界面,用户同意了在跳转到Unity的Activity,这样就完全没问题了
先在AndroidManifest定义一个启动Activity,把这个Activity指定为Main,如下图所示


1.png

然后在通过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,如下图所示

2.png

然后在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);
        }
    }

最终重新上架,就大功告成了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

  • 本文原创版权归 博客园吴秦所有,此处纯粹技术收藏,如有再转,敬请于显示位置标明原创作者及出处,以示尊重!! 作者:...
    Magic_Dong阅读 4,711评论 0 7
  • 《腾讯桌球:客户端总结》 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身。虽然基于Unity3D,很多东...
    吴秦阅读 25,297评论 12 143
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,099评论 2 59
  • iOS 审核被拒绝问题汇总 苹果审核概述 App被拒绝常见原因概述 被拒解决方案概述 苹果开发者 条款详细解读 1...
    咕噜咕噜ww阅读 14,382评论 1 5
  • 摘要:【建议收藏】最近收到的求助里面,超过80%的都是安卓打包出现的问题,这篇文章包含Unity打包安卓的所有必要...
    洪智阅读 2,684评论 5 8

友情链接更多精彩内容