赞
踩
接完MSDK的登录后,就开始对接MSDK其他的功能,在对接过程中遇到很多坑,一一记录下来,给后来者提供方便,也为自己提供方便。(前面已经有一篇是关于MSDK坑的文章了,但是坑太多,还是分开来记录)
一、公告问题:
1.首先是调用接口中的参数问题,是公告栏ID,不是公告ID。如果你是第一次对接,而且看不到后台的时候,请确认下,不然会很坑的。
2.图片公告不显示的问题,在联调公告的时候,普通公告和网页公告都没问题,但图片公告又遇到了不显示的问题。从Android Studio的log上看,是在查询图片ID的公告,但没有公告数据。从大厂运营发过来的截图上看到,图片公告有3个选项,竖屏、横屏和旋转,猜是不是这个参数有影响,然后和MSDK技术沟通,得到的反馈是主Activity的方向要和图片公告的方向一致,测试,有公告数据,能显示公告,但不显示图片。然后再沟通,他们也不清楚,只好再猜公告的Activity要和图片公告的方向一致,修改,测试没问题,然后反馈给MSDK技术人员。
二、输入框文字颜色为白色
在没有接MSDK的时候,我们游戏没有这个bug,接完后,就有bug,而且是一部分手机和模拟器会出现的bug,向MSDK技术人员沟通,他们一致认为是我们游戏的bug,但我用的是空工程,只有MSDK的插件,打成APK,也就40M,硬要说我们的问题,我也是服了。后面查出是MSDK中的自动生成的AndroidMainfest.xml文件有问题,是android:theme问题,在<application>元素中添加android:theme="@style/UnityThemeSelector"就可以解决。把主Activity的修改成android:theme="@style/UnityThemeSelector"也可以解决,都测试过,没有问题。
三、安卓8.0闪退问题
之前有说过安卓9坑,其实安卓8.0也不差,也有闪退问题,做机型适配测试的时候,大厂反馈安卓8.0米大师充值闪退问题很多。调试得到java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation,查到还是google的bug:如果是透明的Activity,就不能固定它的方向,因为它的方向其实是依赖其父Activity的(因为透明)。然而这个bug只有在8.0中有,8.1中已经修复。反馈回来的时候,我又想到公告也是透明的,在8.0上测试,也会闪退。所以不仅仅是米大师充值闪退问题,还有一个是MSDK公告闪退问题。
网上搜到4个解决方案:
1.降级targetSDKVersion到26以下(最终方案)
2.移除mainfest文件里的screenOrientation属性
3.取消Activity主题里的windowIsTranslucent属性或者windowSwipeToDismiss属性或者windowIsFloating属性
4.移除manifest文件里的screenOrientation属性,并在Activity的onCreate方法里设置屏幕方向
最简单的方案是2,经测试,完全能解决掉8.0闪退问题,但是请看公告问题中图片公告是有Activity方向限定的,如果把这个参数去掉的话,图片公告就不能显示,所以不能采用。第3个方案和第4分方案不可能,用的是大厂的SDK,都封装起来了,这个是最无奈的。所以只能选择第一个方案,降级,项目使用的Unity版本为2017.4.7f1,默认的targetSDKVersion就是26(尝试在PlayerSetting中修改targetSDKVersion小于26,但编译各种报错)只能进行骚操作,先将Unity工程导出AndroidStudio工程,在修改targetSDKVersion版本,再Build出APK。测试安卓8.0米大师充值和MSDK公告闪退问题解决,也可以显示图片公告。
因为之前有一套一键生成AAR的代码,稍加修改,就可以改成一键生成AndroidStudio工程,再批处理生成APK文件,修改起来也方便,可以采用。记得修改2份build.gradle,其中一份是MSDK的。还有就是Java heap space错误,之前有写过这种问题的解决方案。Unity导出的工程中没有gradle.properties文件,可以自己手动创建一份,也可以放到某个目录,然后代码在拷贝过来,避免重复操作。
- /// <summary>
- /// 修改build.gradle
- /// </summary>
- /// <param name="filePath"></param>
- /// <returns></returns>
- private static bool UpdateBuildGradle(string filePath, bool bIsTest)
- {
- if (!File.Exists(filePath))
- return false;
-
- try
- {
- StreamReader reader = new StreamReader(filePath);
- var content = reader.ReadToEnd().Trim();
- reader.Close();
-
- var startIndex = content.IndexOf("compileSdkVersion");
- if(startIndex > 0)
- {
- var lastIndex = content.IndexOf("\n", startIndex);
- var findStr = content.Substring(startIndex, lastIndex - startIndex);
- content = content.Replace(findStr, "compileSdkVersion 25");
- }
-
- startIndex = content.IndexOf("buildToolsVersion");
- if (startIndex > 0)
- {
- var lastIndex = content.IndexOf("\n", startIndex);
- var findStr = content.Substring(startIndex, lastIndex - startIndex);
- content = content.Replace(findStr, "buildToolsVersion '25.0.0'");
- }
-
- startIndex = content.IndexOf("targetSdkVersion");
- if (startIndex > 0)
- {
- var lastIndex = content.IndexOf("\n", startIndex);
- var findStr = content.Substring(startIndex, lastIndex - startIndex);
- content = content.Replace(findStr, "targetSdkVersion 25");
- }
-
- StreamWriter writer = new StreamWriter(new FileStream(filePath, FileMode.Create));
- writer.WriteLine(content);
- writer.Flush();
- writer.Close();
- }
- catch (Exception e)
- {
- UnityEngine.Debug.Log("UpdateBuildGradle - Failed: " + e.Message);
- return false;
- }
-
- return true;
- }
-
- /// <summary>
- /// 修改APP Name
- /// </summary>
- /// <param name="filePath"></param>
- /// <param name="bIsTest"></param>
- /// <returns></returns>
- private static bool UpdateAppName(string filePath, bool bIsTest)
- {
- if (!File.Exists(filePath))
- return false;
-
- try
- {
- StreamReader reader = new StreamReader(filePath);
- var content = reader.ReadToEnd().Trim();
- reader.Close();
-
- var appName = "<string name=\"app_name\">";
- var startIndex = content.IndexOf(appName) + appName.Length;
- if (startIndex > 0)
- {
- var lastIndex = content.IndexOf("<", startIndex);
- var findStr = content.Substring(startIndex, lastIndex - startIndex);
- content = content.Replace(findStr, GetProjectName(bIsTest));
- }
-
- StreamWriter writer = new StreamWriter(new FileStream(filePath, FileMode.Create));
- writer.WriteLine(content);
- writer.Flush();
- writer.Close();
- }
- catch (Exception e)
- {
- UnityEngine.Debug.Log("UpdateAppName - Failed: " + e.Message);
- return false;
- }
-
- return true;
- }

4.米大师iOS充值游戏币失败问题
用的是米大师Unity插件版,几乎没有文档,全部照着Demo写的,幸运的是安卓一路接下来没啥问题,但iOS充值一直报错,报无效的物品。后来尝试注释iOS上的参数,成功,记录一下,靠猜真心累。
5.隐藏米大师安卓测试界面问题
之前以为测试环境才会显示,正式环境不显示测试界面,后来切换到正式环境也显示,就询问米大师技术,得到的反馈是isCanChange开启了,然后看了代码,发现大厂把这个代码给注释了,还以为弃之不用,正准备自己写的时候,反编译下了Jar包,才知道这些参数作为json传入的:
修改后:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。