iOS常见问题
一、 通用链接在iOS 11.2+
中,偶尔会出现失效,无法唤醒拉起 app,为什么?
这是因为苹果 iOS 11.2+ 出现的系统 bug 导致的(偶然发生的),解决方法“删除 app,重启设备,重新安装app
”,苹果目前还没有完全解决这个问题,我们将持续跟进。
二、.iOS无法获取自定义参数?
(1)检查是否按照文档集成相关代码 (2)是否将集成好sdk
的ipa
包上传到Xinstall (ios上传包是方便测试,上传第一个包后可以通过xcode安装的方式进行调试) (3)测试时需要将已安装的App卸载,不能覆盖安装测试 (测试时可以使用Xinstall
控制中心提供测试网页测试- 在线测试)
三、为什么Universal link 无法正常调起?
(1)网络连接代理
会导致Universal link 无法正常调起
Android 常见问题
一、 每次调用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();
}
});
}
二、 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;
}
三、 应用在后台时,通过网页拉起应用无法正常获取到参数
检查对应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浏览器等)
四、如何在代码混淆时忽略 XInstall sdk?
在proguard文件中添加配置:
-keep class com.xinstall.**{*;}
五、 如何提高android用户的下载体验和匹配精度?
尽量选择安装包托管在 XInstall 平台
下载,这样对下载体验和参数获取精度会有很大帮助。
六、网页尝试唤醒已经安装好的app时,会先出现是否打开app的提示,然后下载任务又会弹出,挡住打开app的提示窗口
该问题是由于在点击按钮触发wakeupinstall
方法时,js会先尝试执行唤醒操作,然后执行延时下载操作。但因为js无法判断对应的app是否已安装,就会出现唤醒后面的下载会继续执行,从而出现打开app的提示后又出现下载任务提示。
七、 Android下载设置中不同下载方式的区别
(1)托管APK:下载上传到XInstall控制台的apk包,可以自行选择对应的安装包文件。
(2)外部APK:可以填写apk安装包下载地址、下载页面(包含第三方平台的地址)。
WEB 常见问题
-
集成和测试时,web 端需要注意哪些问题?
app 端测试无误后,可以在自己的下载网页(或者分享页)里面集成我们的web
文档,来实现和在线测试二维码一样的传递参数功能; 集成时需要注意,触发下载时必须调用我们的下载 api。不能自己额外写其他的下载代码来引导,还有下载 api 要用按钮触发执行(不能自动执行或者伪点击触发),否则影响参数的获取和精度。 - 自定义参数该怎么传递?
(1)第一种自定参数在落地页的地址后面以 key=value
的形式传递,如果参数过长,建议通过一个唯一标志获取参数,在页面中直接写入
(2)第二种是在websdk
调用的时候使用按钮传参的形式传递参数,如果参数过长,建议通过一个唯一标志获取参数,在页面中直接写入。
- 为什么没有获取到自己的参数?
没有获取到参数有很多原因,WEB 端的话请确认appkey
是否和应用的appkkey
一致。定义的按钮ID是否和dom里的一致,然后确认是否正常调用了wakeupOrInstall
方法。
4 为什么有些浏览器不能唤醒?
首先检查自己的app相关的拉起配置是否正确,然后查看网页是否集成正确(为排除问题,建议先用在线测试网页测试)。 如果配置没问题,需要确认是否是浏览器或设备因素:
(1)有些浏览器由于用户自己设置UA为非移动端,或者之前测试唤醒时,选择了否,后面不再提示等类似选项,浏览器也是不会提示拉起或直接拉起。(可在手机桌面-设置-里面找到对应的浏览器应用-清除该浏览器的应用缓存、数据)。
(2)iOS有时会出现通用链接功能暂时失效的现象(低概率,具体出现的原因和解决办法还未知),此时无法使用通用链接拉起应用。(微信7.0.5
及以上,iOS支持在微信中通用链接唤起app)