今天偷偷懒,把以前的工作笔记,略加装饰发出来,没办法没啥时间啊...
首先要明确 任何一个浏览器链接都是一个隐式意图
大家是否遇到过,点击浏览器的某个文字或者按钮或者图片就回去打开本地的应用?
按理说浏览器只是用来打开网页的,为什么可以去打开应用呢?这就要归结于我前面说的,任何一个浏览器的链接都是一个隐式意图,我们知道打开activity的两种方式隐式意图和显示意图,所以....浏览器的链接就是隐式意图,那么我们配置应用的过滤器不就可以了?
之前的项目有个需求,希望浏览器打开微信分享我们活动的页面,就能打开我们的app,这个大家玩开心消消乐,每天三次分享到朋友圈,点击朋友圈跳转到浏览器打开了这个链接获取金币..此时重点来了 浏览器会提示你是否打开一个外部应用,你点是就会回到开心消消乐的应用,而我们的需求与这个并无太大差异
首先是配置app的过滤器
//必须配置,重点,这个表示可以通过浏览器打开的类型应用
//scheme配置协议 host配置主机 还可以配置路径pathprefix
当然通过隐式意图打开的应用我们同样可以拿到隐式意图携带来的数据
Intent intent = getIntent();
Uri uri = intent .getData();
String xxx= uri.getQueryParameter(键值);
String xxx= uri.getQueryParameter(键值);
当然了浏览器可以给应用携带数据,自然应用也可以给浏览器页面携带数据(我这里指的是给浏览器页面而不是浏览器),这里就要涉及到安卓的java代码与浏览器页面JS之间的交互了,这个现在不做重点
咳咳,忘记说了以上只针对安卓原生浏览器,像第三方的浏览器是不起作用的,可能是因为安全考虑被拦截了吧.
但是现在的浏览器基本都是第三方的吧,那你上面说的岂不是都是废话?打不开app我还get这个技能干什么?
莫慌莫慌,小兄弟,听我慢慢道来,开心消消乐我也玩过,我也是分享到UC浏览器但是却可以打开开心消消乐呀,为什么自己写的Demo却无法被吊起呢?
为此,我又去下载了开心消消乐...
打开消消乐的分享页面,查看源代码,貌似并没有找到关键性代码,很普通的html页面地址奉上
http://animalmobile.happyelements.cn/winter_week_match_2016_qr_code.html?uid=1304178408&invitecode=4705694397&pid=360&action=1&index=6&ts=1489161353000&qrid=1304178408X2X1489161351000&from=groupmessage
但是重点实在js代码中去实现的,奉上地址
http://animalmobile.happyelements.cn/js/activity_3.js
进里面翻翻,咦,貌似看到一个很熟悉的东西,源码奉上
openAppInChrome: function () {
var intent = "intent://xxl.happyelements.com#Intent" +
";scheme=" + activity.redirect.openAppHref +
";package=com.happyelements.AndroidAnimal" +
";S.browser_fallback_url=" + encodeURIComponent(activity.redirect.officialHref) +
";end";
location.replace(intent);
},