1.
今天公司让做一个从微信里面的h5点击唤醒本地安装的我们的app,并且要跳转到指定页面,我写好了代码之后,在其他浏览器还是app中点击都可以跳到我们的app,结果在微信中就是不行,邪了门了。
我就是找不到原因,配合写h5的哥们也很头疼,我就分析原因:
微信内置的X5内核的qq浏览器,但是外部的qq x5浏览器可以调起我们的app,微信内部浏览器就是不行,TMD,问题出在哪里呢,代码也写了
<!--要想在别的App上能成功调起App,必须添加intent过滤器-->
<!--Open links like scheme://host/?…-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<!--协议部分,随便设置-->
<data android:host="test.uri.activity" android:scheme="myactivity"/>
</intent-filter>
<!--在其他应用里调用也可以,写法是这样的:-->
Uri uri = Uri.parse("myactivity://test.uri.activity?action=1&shops_id=4");
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
貌似写的也没有错啊,结果就行不行,我又去查资料,
结果竟然是这样的:
每个接入微信的应用都需要上他的[开放平台]上注册申请,然后微信会分配一个AppID,这个AppID就是每个接入微信的第三方应用的标识;而接入微信时,需要你把此AppID作为接入应用的URL Scheme,也就是答案中说的自定协议,那么微信就可以通过检查这个AppID为值的URL Scheme在本机中是否已经注册(通过 UIApplication类中的 canOpenURL 方法),就可以判断出当前设备是否有安装相应的第三方应用了。
Uri uri = Uri.parse("myactivity://test.uri.activity?action=1&shops_id=4");
把myactivity也就是schema换成你微信申请的appid就可以跳转了。
又踩了一个坑,使用okhttp的时候,经常会出现一个错误就是:cache is closed。原来是我设置了拦截器
okhttp日志拦截器 设置这个拦截器缓存文件夹里就会出现那个文件,不知道这个文件怎么影响到清除数据后有的手机在运行会出现java.lang.IllegalStateException: cache is closed异常。目前我在上线前去掉此拦截器,没找到很好解决方案。
看到这篇文章我才解决了这个问题http://blog.csdn.net/dongbeitcy/article/details/77679822