Android 常见问题

1. 每次调用 getInstallParam 方法都会回调,会触发业务重复调用,怎么办?

SDK内部将会一直保存安装数据,每次调用 getInstallParam 方法都会返回值,如果调用了 getInstallParam 并处理了自己的业务,后续不想再被触发,那么可以自己在业务调用成功时,设置一个标识,不再调用 getInstallParam 方法。

final SharedPreferences sp = getSharedPreferences("filename", MODE_PRIVATE);
        boolean isFirst = sp.getBoolean("isFirst", true);
        if (isFirst) {
            XInstall.getInstallParam(new XInstallListener() {
                @Override
                public void onInstallFinish(XAppData data, XAppError error) {
                    //使用数据后,不想再调用,将isFirst设置为false
                    sp.edit().putBoolean("isFirst", false).apply();
                }
            });
        }

2. App有多个进程时,多次调用 XInstall.init,导致安装参数获取不到?

当App存在多个进程,并且 XInstall 是在Application的onCreate方法中初始化时,会因为多次调用Application的onCreate方法,导致 XInstall 初始化方法触发多次,从而导致安装参数获取不到。 使用以下代码判断当前进程是否是应用的主进程,然后只在主进程中调用 XInstall.init 方法

public boolean isMainProcess(){
    int pid = android.os.Process.myPid();
    ActivityManager activityManager = (ActivityManager)
    getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) {
        if (appProcess.pid == pid) {
            return getApplicationInfo().packageName.equals(appProcess.processName);
        }
    }
    return false;
}

3. 应用在后台时,通过网页拉起应用无法正常获取到参数

检查对应activity的onNewIntent生命周期方法内是否添加了唤醒参数获取方法。如果未添加,会导致应用存在后台时,网页拉起应用后无法正常获取到唤醒参数 (Android在app未在后台的情况下,网页直接唤醒打开后,唤醒Activity被杀掉后,应用退回到后台,进入浏览器后不刷新,网页再次点击按钮尝试唤醒,部分浏览器会出现仅将app从后台切换到前台,并不会再次唤醒对应Activity,而且该情况下,切换到前台时的Activity中未能在各个生命周期中获取到唤醒的intent信息。 经过验证,该现象为浏览器的机制,和是否使用 XInstall sdk无关。 【测试:当app仅为一个Activity构成时,即MainActivity为唤醒Activity,按照上述流程不杀掉Activity的情况下切换到后台,再次唤醒,不会触发onCreat、onNewIntent生命周期,但是会触发onResume生命周期,此时可以获取到唤醒的intent信息】 存在上述现象的浏览器:华为系统浏览器、QQ浏览器、uc浏览器、欧朋浏览器、搜狗浏览器等 每次都会重新唤醒scheme标签对应的activity的浏览器:小米系统浏览器、google浏览器、三星浏览器、360浏览器等)

4. 如何在代码混淆时忽略 XInstall sdk?

在proguard文件中添加配置:

-dontwarn  com.shubao.xinstall.**
-keep class com.shubao.xinstall.** {*;}
-dontwarn  com.xinstall.**
-keep class com.xinstall.** {*;}

5. 如何提高android用户的下载体验和匹配精度?

尽量选择安装包托管在 XInstall 平台下载,这样对下载体验和参数获取精度会有很大帮助。

6. 网页尝试唤醒已经安装好的app时,会先出现是否打开app的提示,然后下载任务又会弹出,挡住打开app的提示窗口

该问题是由于在点击按钮触发wakeupinstall方法时,js会先尝试执行唤醒操作,然后执行延时下载操作。但因为js无法判断对应的app是否已安装,就会出现唤醒后面的下载会继续执行,从而出现打开app的提示后又出现下载任务提示。

7. Android下载设置中不同下载方式的区别

(1)托管APK:下载上传到XInstall控制台的apk包,可以自行选择对应的安装包文件。 (2)外部APK:可以填写apk安装包下载地址、下载页面(包含第三方平台的地址)。

8. Android SDK导入常见问题

8.1 build.gradle配置问题

默认Android侧边栏管理中模式中是看不到lib目录的,导入项目时候需要左上角切换到project模式,在src文件夹下找到build.gradle进行配置,如下图

8.2 minSdkVersion支持问题

Xinstall要求最低的兼容的版本minSdkVersion是19,如果如下提示

说明是SDK版本设置过低。直接修改build.gradle中配置minSdkVersion 19即可。如下图

8.3 集成后编译无法通过问题

这是因为代码还没有链接的关系,重启开发工具Androidstudio或重新加载即可

9. 一键拉起/唤起App失败

90%以上的唤起失败问题,可以通过下面方式排查快速解决

  • 在集成SDK以后,原来手机上的App需要重新卸载后再次安装才能唤起成功

  • 是否是模拟器,暂不支持模拟器一键拉起,请用真机测试

  • SDK是否集成成功,可以先在Android-集成-上传安装包底部选择测试,用Xinstall页面进行测试,如果这个页面也不能跳转,说明安卓SDK没有对接成功。如果能跳转,而自己页面不能跳转,说明自己页面的Web SDK集成不对,需要排查下。主要是scheme配置正确

  • 浏览器首次拒绝导致无法跳转。部分浏览器,如果你在首次跳转时候选择了取消,那么下次点击唤起时候,浏览器将默认不再提示跳转。可以尝试恢复出厂设置,和清楚缓存来解决这个问题。如Via,小米手机自带浏览器,夸克浏览器

  • 浏览器本身不允许跳转,如百度浏览器。

  • QQ/微信中限制,需要满足上架条件,微信需要上架应用宝,QQ需要上架应用包或本地应用市场,如华为手机就需要上架华为市场。见下图

10. 已经下载应用但还是提示去下载

由于浏览器权限限制,网页是无法判断手机是否已经安装了目标应用。为了保障首次下载客户能正常下载安装,正常需要每次点击安装后都需要提示安装

Xinstall通过体验优化,目前已经可以做到90%以上浏览器在手机已经下载时,不再提示下载,而是直接进行唤起。

但还是有少部分机型没法做到完全的适配,我们会首先尝试唤起应用,然后在一定时间间隔后提示下载

还有一种情况,是测试机在多次下载安装过程中,如果曾经在提示唤起时候选择过拒绝/取消跳转,这会导致之后部分浏览器不再给出唤起弹窗,如果这个情况,您可以尝试恢复浏览器出厂设置和清楚缓存来解决

11. 为什么安卓微信扫码以后没有去下载我的应用,而是去下载应用宝了?

这个是因为微信App限制的问题。微信在8月中旬对扫码下载(包括已经上架应用宝的)App进行了更新,任何下载需要先下载应用宝,需要先下载应用宝,然后会自动开始下载客户App。 如果App没上架应用宝Xinstall将会在微信内弹窗在浏览器打开选项。

12. 在接入安卓中,很多同学会问,当Launcher 的Acrtivity 的LaunchMode 设置为 "singleTask", 如何让这个Activity 只在冷启动的时候显示,热启动的时候不显示?

val flags = intent.getFlags();
val flags2 = Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT
if (flags.and(flags2) == 0) {
  setContentView(R.layout.activity_welcome)

  welcome.postDelayed({
    WakeUpActivity.start(this)
    finish()
  },1500)
} else {
  // 非第一次 会直接finish
  finish()
}

results matching ""

    No results matching ""