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生命周期方法内是否添加了唤醒参数获取方法。如果未添加,会导致应用存在后台时,网页拉起应用后无法正常获取到唤醒参数

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还未覆盖市面应用市场较为广阔时,不建议开启该开关。