当前位置: 首页 > news >正文

鸡泽网站建设/外贸网站平台有哪些

鸡泽网站建设,外贸网站平台有哪些,程序员做的导航网站,浏览器看外国网站许久没有写博客了,最近有个H5启动APP原生页面的需求,中间遇上一些坑,看了些网上的实现方案,特意来总结下 一、需要判断客户端的平台以及是否在微信浏览器中访问 1、客户端判断 在启动APP时,Android和IOS系统处理的方式…

许久没有写博客了,最近有个H5启动APP原生页面的需求,中间遇上一些坑,看了些网上的实现方案,特意来总结下

一、需要判断客户端的平台以及是否在微信浏览器中访问

1、客户端判断

在启动APP时,Android和IOS系统处理的方式是不一样的,Android这边由于开放,可以在浏览器中通过<a>标签以及meta标签的方式,让浏览器app获取手机打开应用的权限进而启动APP。

而在IOS这边,IOS9以后的系统,则可以在APP开发过程中加入配置和逻辑代码编写,系统在浏览器即将访问到某个域名前就把这个域名对应的APP打开,这个有点闪,封闭还是有封闭的好处。

所以首先要在客户端判断,是Android系统还是IOS系统,判断代码如下

function isInIos(){var userAgentInfo = navigator.userAgent ,Agents = ["iPhone" , "iPad", "iPod"];for(var v = 0; v < Agents.length; v++) {if (userAgentInfo.indexOf(Agents[v]) > 0) {return true;}}return false;
}        

2、是否在微信内置浏览器中

无论是在哪个平台的客户端Android/IOS,在微信的平台上访问都有一个问题,那就是无法启动客户端,这是微信为了安全性考虑的限制,android这边屏蔽schema协议,除非公司是微信的伙伴加入了白名单才能

使用,IOS系统可以去访问app对应appstore的下载页,但是微信经常屏蔽appstore的这个网址,进而访问不到。比较方便的做法就是在微信浏览器中,无论是IOS还是android都去应用宝的下载(IOS 这边最后会到

appstore中)页面打开。我这边的需求是提示用户点击“...”用默认浏览器打开。

判断是否是在微信中,代码如下:

function isInWx(){var agent = window.navigator.userAgent.toLowerCase();return agent.match(/MicroMessenger/i) == 'micromessenger';
}

 

 

二、原理

首先无论是andorid还是IOS端,在浏览器中通过JS都是无法判断该手机是否装有某APP的,即使这个浏览器有权限读取手机应用列表,也没有一个固定的对外API让咱们进行查询。而H5启动APP本质上是通过

URL scheme打开APP,一个APP可以设置一个或多个打开自己的URL scheme,浏览器去访问某一个APP的URL scheme,然后若系统安装有这个APP,则会请求权限去打开这个APP。其实也算是浏览器app

打开另一个app,iOS就可以使用 UIApplication 的 canOpenUrl 方法来检测URL scheme 是否能打开对应的APP,而android也是类似的方式。当然如果JS跳转URL scheme没有反应,也意味着这个手机没有

装这个app。

 

三、android平台

首先编辑AndroidManifest.xml,主要是增加第二个<intent-filter>

<activity android:name=".activity.LoadingActivity"android:label="${APP_NAME}"android:screenOrientation="portrait"android:theme="@style/FirstActivityTheme"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><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="android"android:scheme="wushang" /></intent-filter>
</activity>

比如此处wushang就是scheme,这个最好是app的唯一标识符,要不然在H5唤醒时,会出现一个选择框,选择启动哪一个APP。而host表示启动该页面,其实这个更应该用com.android.sky这样的包名来替代更好。

这样的情况完整的URL就是wushang://android?data=sky,后面是参数传递。在Activity中可以用如下代码获取参数

public void onCreate(Bundle savedInstanceState) {             Uri uridata = this.getIntent().getData();             String mydata = uridata.getQueryParameter("data");            
}

之后在进行字符串截取还是什么鬼的都随意啦。

 

接下来来谈谈前端代码,这里有两种情况

1、页面在刷新进入时,请求权限唤起APP

这个比较简单,就只用在页面的顶部head中加入meta标签即可

<meta http-equiv="refresh" content="0;url=wushang://android?data=sky">

这个标注当页面刷新即去访问这个链接,进而启动APP。但是存在一个问题,如果是苹果系统的Safari浏览器的话,访问有这个meta的头,会给出错误提示,所以这个头部可以在后端进行页面渲染时通过客户端的

总类在加上去。

2、通过点击事件唤起APP

最简单的办法当然是直接使用a标签,如下

<a href="wushang://android">open Android app</a>

但是在实际使用时,是需要对客户端的平台类型还有是否在微信内置浏览器中进行判断的,所以这样的做法肯定是不行的。

接下来谈谈在开发过程中,遇到的一个问题,记录下。因为这边移动端使用的工具库库是zepto,采用的点击事件是tap,但是在用tap进行处理是经常要点很多下,才能唤起APP

<script type="text/javascript">$('#go').tap(function(){window.location.href = "wushang://android";});
</script>

具体原因不知,可能是tap事件采用的是轻点触碰。然后摸索了下,才用click事件,或者直接在a标签上标注处理函数就没有这问题

<a id="go" >open Android app
</a>
<a href="javascript:startApp()">open
</a>
<script src="../res/lib/zepto.min.js"></script>
<script src="../res/lib/public.js"></script>
<script>$('#go').click(function () {if(publicFun.isIos()){alert('it is IOS')}else{window.location.href = "wushang://android";}});function startApp(){if(publicFun.isIos()){alert('it is IOS')}else{window.location.href = "wushang://android";}}
</script>

所以决定以后遇到这类问题,就用这两种方式了。下面是实际的处理函数

 window.startApp = function(){     //启动APPif(publicFun.isInWx()){     //微信中alert("请在浏览器中打开");}else{      //非微信中if(publicFun.isIos()){    //IOS系统,直接去itunes中,既可以下载也可以打开window.location.href = "https://itunes.apple.com/cn/app/[name]/id[id]";}else{      //android系统,通过定时器的方式,判断是否安装有APPvar hasApp = true , t = 1000;setTimeout(function () {  //没有安装APP则跳转至应用宝下载,延时时间设置为2秒if(!hasApp) window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=[name]";} , 2000);var t1 = Date.now();window.location.href = "wushang://android";setTimeout(function () {    //t的时间就是出发APP启动的时间,若APP启动了,再次返回页面时t2这行代码执行,hasApp即为true。反之若APP没有启动即为falsevar t2 = Date.now();hasApp = !(!t1 || t2 - t1 < t + 150);} , t);}}} 

其实有个非常简单的办法,就是直接跳转应用宝。无论是在android还是IOS,以及微信非微信。应用宝的下载页面都有下载和打开两个功能(如果是在IOS平台,它是通过连接app store的方式)

 

四、IOS平台

针对ios9及以上的打不开问题,实际上ios9提供了更好的解决方案————通用链接。

这是iOS9推出的一项功能,如果你的应用支持Universal Links(通用链接),那么就能够方便的通过传统的HTTP链接来启动APP(如果iOS设备上已经安装了你的app,不需要额外做任何判断等),或者打开网页(iOS设备上没有安装你的app)。或许可以更简单点来说明,在iOS9之前,对于从各种从浏览器,Safari、UIWebView或者 WKWebView中唤醒APP的需求,我们通常只能使用scheme。

以上来自网上关于通用链接的介绍,对于前端简单点讲就是你访问一个http的url,如果这个url带有你提交给开发平台的配置文件中匹配规则的内容,ios系统会去尝试打开你的app,如果打不开,系统就会在浏览器中转向你要访问的链接。很好的一个属性,因为通过这个属性在ios9上我们能够绕过微信的拦截从而打开app。

所以上面的点击事件,仅仅是去访问app store,因为若app已安装,在浏览器访问时,就已经去到APP中了。

这些都是IOS配置上的东西,就不多写了。至于传参,以及页面定向,其实也就是相当于在UIWebView中获取当前连接的URL,然后进行字符串拆分以及校验,即可判断去哪个页,以及获取参数值。

 

转载于:https://www.cnblogs.com/skyHF/p/7061600.html

http://www.lbrq.cn/news/761005.html

相关文章:

  • 网站的标题符号/网络运营推广怎么做
  • 网站建设网络公/运营商大数据精准营销
  • 网站做的和别人一样违法吗/宁波seo软件
  • dede 如何做视频网站/百度电脑版网页
  • 厨之梦进口食品网站谁做的/深圳网站建设开发公司
  • 打名字就说你是什么做的网站/制作企业网站的公司
  • 武汉网站建设询搜点网络/网页设计一般用什么软件
  • 合规部对于网站建设的意见/中国大数据平台官网
  • 昆山做网站费用/icp备案查询
  • mac系统可以做数据库网站开发/网页推广链接怎么做
  • 游戏网站做的思想步骤/app搜索优化
  • 关于做网站的笑话/精准的搜索引擎优化
  • 温州市建设工程质监站网站/网络营销以什么为中心
  • 网站电子商务类型/杭州seo顾问
  • 课程网站建设的步骤/seo的研究对象
  • 会计信息系统网站建设流程图/谷歌广告代理商
  • 高端网站建设方案模板范文/线上营销策略
  • 花生壳 wordpress/百度快速排名优化服务
  • 暖色网站/怎么开设自己的网站
  • wordpress文章名/游戏优化
  • 织梦网站移动化/重庆seo网络推广平台
  • 网站公安备案要多久/怎么自己刷推广链接
  • 深圳市seo推广联系方式/江苏seo团队
  • 怎么做幼儿园的网站/黑帽seo排名技术
  • 应聘网站运营建设面试/淘宝自动推广软件
  • 国内访问wordpress/常州seo收费
  • 外贸网站都有哪些/网络推广公司收费标准
  • 一个专门做标题的网站/百度竞价推广的技巧
  • 深圳做微信商城网站建设/企业网站推广方法实验报告
  • 眉山政府网站建设/什么是百度搜索推广
  • 【记录】Apache SeaTunnel 系统监控信息
  • Qt 实现Ymodem协议源码分享
  • 15.卷积神经网络
  • 北京-4年功能测试2年空窗-报培训班学测开-第七十四天-线下面试-聊的很满意但可能有风险-等信吧
  • 飞算 JavaAI -智慧城市项目实践:从交通协同到应急响应的全链路技术革新
  • 朝花夕拾(二)-------python中字符串的3种插值方法/(函数)