Android常见问题

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

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

final SharedPreferences sp = getSharedPreferences("filename", MODE_PRIVATE);
boolean isFirst = sp.getBoolean("isFirst", true);
if(isFirst){
    OpenInstall.getInstall(new AppInstallListener() {
        @Override
        public void onInstallFinish(AppData appData, Error error) {
        //使用数据后,不想再调用,将isFirst设置为false
        sp.edit().putBoolean("isFirst", false).apply();
        }
    });
}

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

当App存在多个进程,并且OpenInstall是在ApplicationonCreate方法中初始化时,会因为多次调用ApplicationonCreate方法,导致OpenInstall初始化方法触发多次,从而导致安装参数获取不到。
使用以下代码判断当前进程是否是应用的主进程,然后只在主进程中调用OpenInstall.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信息。 经过验证,该现象为浏览器的机制,和是否使用openinstall sdk无关。 【测试:当app仅为一个activity构成时,即MainActivity为唤醒activity,按照上述流程不杀掉activity的情况下切换到后台,再次唤醒,不会触发oncreat、onnewintent生命周期,但是会触发onResume生命周期,此时可以获取到唤醒的intent信息】 存在上述现象的浏览器:华为系统浏览器、QQ浏览器、uc浏览器、欧朋浏览器、搜狗浏览器等 每次都会重新唤醒scheme标签对应的activity的浏览器:小米系统浏览器、google浏览器、三星浏览器、360浏览器等)

4. 从 openinstall 导出的渠道包加固后导致渠道统计不上?

请先使用第三方加固,再上传到 openinstall ,最后才从 openinstall 导出渠道包

5. 如何在代码混淆时忽略openinstall sdk?

在proguard文件中添加配置:

-dontwarn com.fm.openinstall.**
-keep public class com.fm.openinstall.* {*; }
-keep public interface com.fm.openinstall.* {*; }

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

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

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

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

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

(1)托管APK:下载上传到openinstall控制台的apk包,可以自行选择对应的安装包文件。
(2)外部APK:可以填写apk安装包下载地址、下载页面(包含第三方平台的地址)。
(3)本地应用市场:无需填写地址,直接选中即可,下载时,会使用market协议来打开手机本地的应用市场app,然后应用市场会根据包名(applicationid)来搜索对应的应用。因此当app还未覆盖市面应用市场较为广阔时,不建议开启该开关。