최근 친구가 저에게 이런 질문을 했습니다. 먼저 프로젝트 요구사항을 알려드리겠습니다. QR 코드를 스캔하여 앱을 열면 앱이 실행되지 않습니다.
웹 페이지를 사용하여 앱을 직접 호출하는 것은 불가능합니다. 먼저 네이티브 측에서 일부 구성을 수행해야 합니다.
먼저 안드로이드와 애플은 통화방식이 다릅니다.
그래서 단말기를 먼저 판단해야 합니다.
var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器 var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
그 후에는 Apple이 헤더에 app-id< Meta name='apple-itunes-app' content='app-id=1115968341'>
다음은 Apple의 코드입니다
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name='apple-itunes-app' content='app-id=1115968341'> <title></title> </head> <body> <a href="https://itunes.apple.com/cn/app/yi-fang-kuai-le-xue-tang/id1115968341?mt=8" id="openApp">点击打开</a> <script type="text/javascript"> //苹果 document.getElementById('openApp').onclick = function(e){ // 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为 // 否则打开a标签的href链接 var ifr = document.createElement('iframe'); ifr.src = 'iosefunbox://'; ifr.style.display = 'none'; document.body.appendChild(ifr); window.setTimeout(function(){ document.body.removeChild(ifr); },3000) }; </script> </body> </html>
여기의 ifr.src는 앱을 열 수 있는 프로토콜 경로입니다. Android와 Apple은 다릅니다.
안드로이드 기기라면 간단할 것입니다
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no"> </head> <body> <a href="http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile" id="openApp">点击打开</a> <script type="text/javascript"> //安卓 // /**/window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile"; // 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为 // 否则打开a标签的href链接 var ifr = document.createElement('iframe'); ifr.src = 'efunbox://efunbox.app/efunbox/open'; ifr.style.display = 'none'; document.body.appendChild(ifr); window.setTimeout(function(){ document.body.removeChild(ifr); },3000); </script> </body> </html>
네, 애플이 앱스토어로 바로 점프할 수 있다고 하더군요. 직접 열어야 합니다. Android의 경우 직접 열어야 합니다.
이렇게 하면 하나의 웹페이지에 정리할 수 있습니다.
위의 링크는 Tencent App Store로 바로 이동합니다.
웹페이지를 스캔해서 접속하면 문제 없습니다.
그런데 무슨 일이 일어날 것 같은 느낌이 들어서 위챗으로 스캔했는데 속았습니다. Android는 링크만 열며 WeChat이 이를 가로채기 때문에 앱으로 이동할 수 없습니다. Apple의 경우에도 마찬가지입니다. 유일한 해결책은 사용자에게 브라우저에서 링크를 열라는 메시지를 표시하는 것입니다. 문제없어요. 이 방법은 무력한 조치였지만 나중에 Apple 컴퓨터에 대한 해결책이 발견되었습니다. 링크 A의 점프는 Tencent App Store에 나열된 링크로 직접 점프한 다음 WeChat이 이를 내부적으로 처리하고 자동으로 앱 스토어로 점프합니다.
마지막은 통합코드입니다.
보충:
QR 코드를 스캔하여 앱으로 이동
1. 설치됨
<html> <head> <meta name="viewport" content="width=device-width" /> </head> <body> <h2><a id="applink1" href="mtcmtc://profile/116201417">Open scheme(mtcmtc) defined in iPhone with parameters </a></h2> <h2><a id="applink2" href="unknown://nowhere">open unknown with fallback to appstore</a></h2> <p><i>Only works on iPhone!</i></p> <script type="text/javascript"> // To avoid the "protocol not supported" alert, fail must open another app. var appstore = "itms://itunes.apple.com/us/app/facebook/id284882215?mt=8&uo=6"; function applink(fail){ return function(){ var clickedAt = +new Date; // During tests on 3g/3gs this timeout fires immediately if less than 500ms. setTimeout(function(){ // To avoid failing on return to MobileSafari, ensure freshness! if (+new Date - clickedAt < 2000){ window.location = fail; } }, 500); }; } document.getElementById("applink1").onclick = applink(appstore); document.getElementById("applink2").onclick = applink(appstore); </script> </body> </html>
2. 프로젝트 대상에서 schemurl을 열고 //
을 추가합니다.