Android常见问题

1.如何在代码混淆时忽略OpenInstall SDK?

在proguard文件中添加配置:

#忽略警告
-dontwarn com.fm.openinstall.**
-dontwarn io.openinstall.**
#避免混淆
-keep public class com.fm.openinstall.** {*; }
-keep public interface com.fm.openinstall.** {*; }

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.从OpenInstall导出的渠道包加固后导致渠道统计不上

请先使用第三方加固后再上传到OpenInstall平台,最后再导出渠道包用于统计。

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

该问题是由于用户打开H5网页点击按钮触发API(m.wakeupOrInstall();)时,OpenInstall js会先尝试执行唤醒操作,然后执行延时下载跳转。如果在网页询问用户是否开打App的过程中,js的延时期限达到,就会执行到下载跳转,此时就会出现打开App的询问弹窗和下载任务弹窗同时存在的现象。

5. Android webview中加载落地页,界面出现net::err_unknown_url_scheme错误

Android webview中不支持scheme协议,无法正常识别。需要重写WebviewClient类中的shouldOverriderUrlLoading方法,对scheme协议进行拦截。详细操作可以参考此内容(scheme、Appkey替换为对应openinstall应用分配的scheme、Appkey即可):

webView.setWebViewClient(new WebViewClient() {
@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url==null){
            return false;
        } 
        try {
            if (url.startsWith("scheme://")|| url.startsWith("https://app-Appkey.openinstall.io")) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
            }
        }
    }
});

6. Android10以上系统粘贴板读取失败处理

Android SDK参数还原功能在非托管下载的情况下,主要依赖于系统粘贴板机制,通过读取系统粘贴板数据成功还原安装参数。所以在Android SDK读取系统粘贴板失败的情况下,将极大影响还原成功率。建议开发者不要存在以下导致粘贴板读取失败的行为,如:在初始化和获取参数接口(getInstall)调用时,不要有权限申请或其它可能使应用处于后台不可见状态的操作;不要在Activity的onCreate中同时调用(init)和(getInstall)。