短网址(短链)实现唤起App

短网址,顾名思义就是相对较短的网址,比如t.cn/abcd,实际是通过abcd来查询对应的源网址(长网址)。

现在短信及微信等都能遇到很多短网址,且点击后能唤起app并调转到对应的功能页面,微信目前可能由于框架屏蔽了唤起app机制,一般微信需要提示用户手动浏览器方式打开,

大家可能会问,短网址唤起app是怎么实现的?

其实原理很简单,网上搜索也很多。简单原理:用户点击短网址发起请求(或者浏览器直接访问),手机系统识别到地址的schema,如果有安装该schema对应的app就会唤起打开,如果没有则可能没有响应或者停留在页面(个别手机机型浏览器可能屏蔽了比如三星部分机型等,由于不是本文重点,暂不细说)。

那怎么处理才能最大用户体验最好呢?目前大多是采取折中的处理,如果未唤起app,则停留默认页面,默认页面会提供下载及其他温馨提示信息引导用户操作。

   

function AppOpen(schema) {
    var ua = navigator.userAgent.toLowerCase();
    //由于ios9以上系统不能直接iframe方式唤起app,需要通过创建a链接才能唤起
    if ((ua.indexOf('safari') > -1 && (ua.indexOf('os 5') == -1|| ua.indexOf('os 6') == -1|| ua.indexOf('os 7') == -1|| ua.indexOf('os 8') == -1)) { 
    var schemaLinkOpen = document.getElementById('schemaLinkOpen'); 
	if (!schemaLinkOpen) { 
		schemaLinkOpen = document.createElement('a'); 
		schemaLinkOpen.id = 'schemaLinkOpen'; 
		schemaLinkOpen.style.display = 'none';
		document.body.appendChild(schemaLinkOpen); 
	} schemaLinkOpen.href =schema;
	// 执行click schemaLinkOpen.dispatchEvent(CustomClickEvent()); 
	} 
	var iframeObj = document.createElement("iframe"); 
	var startTime = (new Date()).getTime(); 
	if (iframeObj != null) {
		 iframeObj.setAttribute("style", "height:0px;width:0px;display:none;");
		iframeObj.setAttribute("src", scheme); 
		document.body.appendChild(iframeObj); 
		document.body.removeChild(iframeObj); 
		} 
		setTimeout(function () { 
			var endTime = (new Date()).getTime(); 
			if (isiPhone) { 
				if (endTime - startTime < 700) { 
								window.open(sHrefUrl, "_parent"); 
								} 
							}
				 }, 550);
			}
function CustomClickEvent() {
	var clickEvent; 
	if (window.CustomEvent) { 
		clickEvent = new window.CustomEvent("click", { 
		canBubble: true, 
		cancelable: true 
		}); 
	} else { 
		clickEvent = document.createEvent('Event'); 
		clickEvent.initEvent('click', true, true); 
		} 
	return clickEvent;
}

 代码及原理其实很简单,但为什么需要有判断及不同的打开方式呢? 

<pre name="code" class="javascript">if ((ua.indexOf('safari') > -1 && (ua.indexOf('os 5') == -1|| ua.indexOf('os 6') == -1|| ua.indexOf('os 7') == -1|| ua.indexOf('os 8') == -1)) 

 
 

由于ios9以上系统不能直接iframe方式唤起app,需要通过创建a链接才能唤起,但为什么不能直接用a链接方式呢,如果直接用a方式,ios8以下的浏览器(如safari)每次打开时会有提示,需要用户手动点击是否打开还是取消,用户体验不佳,这就是为什么这样处理的原因。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot是一个开源的Java框架,可以简化Java应用程序的开发。它提供了很多方便的功能,可以帮助我们快速构建稳定可靠的应用程序。 要实现短链生成和统计,可以借助SpringBoot的特性和第三方库来完成。以下是一个基本的实现思路: 1. 短链生成 首先,我们需要设计一个用于生成短链的算法或方法。常见的方法是将长链接通过哈希算法转换为字符串。你可以选择使用MD5、SHA1等哈希算法,并取其中一部分字符作为短链接。另外,为了避免生成过长的短链,可以将其进一步进行压缩。 在SpringBoot中,可以通过创建一个生成短链的Controller来实现。Controller接收长链接作为参数,调用短链生成的方法,然后将生成的短链接返回给前端。 2. 短链重定向 当用户点击短链接时,服务器需要将其重定向到原始的长链接地址。可以在SpringBoot中创建一个Controller,设置一个路由映射,并在该Controller中获取短链接对应的长链接,然后进行重定向。 3. 统计短链点击量 为了统计短链的点击量,我们可以在数据库中创建一个表,用于记录短链的相关信息,例如短链、长链接、点击次数等。 在SpringBoot中,可以定义一个点击事件的Controller,当用户点击短链时,将触发该Controller。该Controller负责将点击事件信息保存至数据库,并更新短链对应的点击次数。 以上是一个基本的实现思路,你可以根据具体需求和场景进行进一步的优化和改进。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值