이틀 전에 무선 요청을 받았습니다. 초보자로서 며칠 동안 바빴습니다. 사용자가 앱을 설치한 경우 클릭하여 해당 앱을 엽니다. 설치하지 않은 경우 해당 앱을 열려면 클릭하세요. 연결 설정 온라인에서 검색해 보니 기본적으로 달성할 수 있다고 했지만 실제 상황은 낙관적이지 않습니다.
물론, 요즘에는 다양한 앱이 있습니다. 일반적으로 공유되는 H5 페이지에는 앱이 로컬에 설치되어 있으면 로컬 앱이 직접 호출됩니다. 설치되지 않은 경우 다운로드로 이동하세요. 이는 프로모션 및 트래픽 전환을 위한 매우 일반적인 전략입니다. 최근 제품 관리자가 Toutiao 기능과 같이 앱이 열린 상태에서 다운로드 표시줄을 만드는 등의 요구를 내놓았는데 나머지에 대해서는 이야기하지 않겠습니다!
이제 오늘의 주요 주제인 H5가 휴대폰에서 로컬 앱을 어떻게 열거나 활성화하는지 살펴보겠습니다. Baidu와 Google의 답변을 보면 다음과 같은 두 가지 유형만 있습니다.
첫 번째 방법:물론 HTML의 a 태그에 있는 href에 Android 측 스키마를 직접 구성하면 됩니다. 다른 호스트 구성이 있는 경우에는 이를 따르기만 하면 됩니다. Android 측 구성 및 코드는 다음과 같습니다.
안드로이드 측 구성:
<activity android:name = .MainActivity> <intent-filter> <action android:name = android.intent.action.MAIN /> <category android:name = android.intent.category.LAUNCHER /> </intent-filter> <의도 필터> <action android:name=android.intent.action.VIEW/> <카테고리 android:name=android.intent.category.DEFAULT/> <category android:name=android.intent.category.BROWSABLE/> <data android:host=jingewenku.com android:scheme=abraham/> </intent-filter> </activity>
참고: 시작 페이지에서 구성한 경우 레이블과 나란히 배치해야 합니다. 그렇지 않으면 실행 후 모바일 앱 아이콘이 표시되지 않습니다. 스키마 프로토콜은 소문자여야 합니다. 그렇지 않으면 예외가 발생합니다. 그건 응답할 수 없어!
HTML 코드:
<html> <head> <meta http-equiv=Content-Type content=text/html; charset=UTF-8> <title>여기에 제목 삽입</title> </head> <body> <a href=abraham: //jingewenku.com/?pid=1>앱 열기</a><br/> </body></html>
여기서는 스키마 접합 프로토콜의 형식을 살펴보겠습니다.
< a href=[scheme]://[host]/[path]?[query]>애플리케이션 시작</a>
각 항목의 의미는 다음과 같습니다.
구성표: 시작된 앱을 식별합니다. ※자세한 내용은 후술
호스트: 적절한 설명
경로 : 값을 전달할 때 필요한 키 ※ 없어도 괜찮습니다.
쿼리: 해당 값의 Key와 Value를 가져옵니다. ※ 없어도 괜찮습니다.
물론 앱이 존재하는 경우 위의 내용을 사용하여 로컬 앱을 열 수 있습니다. 그렇지 않으면 응답이 없습니다.
위의 HTML 코드에 Android에 구성된 스키마 프로토콜이 구성되어 있지 않습니까? 분명히 pid를 구성하지 않았는데 왜 이것을 작성해야 합니까? 때로는 로컬 앱을 호출할 때 일부 매개변수를 앱에 전달할 수 있기 때문입니다. 여기서는 이러한 매개변수를 oncreate에서 가져오기만 하면 됩니다.
인텐트 인텐트 = getIntent(); Uri uri =intent.getData(); if (uri != null) { String pid = uri.getQueryParameter(pid) }
여전히 Android에서 스키마 프로토콜을 구성하려면 다음을 수행할 수도 있습니다.
Uri uri = getIntent().getData();if(uri != null) { // URL 정보 완료 String url = uri.toString() Log.e(TAG, url: + uri); // 구성 부분 String Scheme = uri.getScheme(); Log.e(TAG, Scheme: + Scheme); // 호스트 부분 String Host = uri.getHost(); 호스트); //포트 부분 int port = uri.getPort(); Log.e(TAG, 호스트: + 포트); //액세스 경로 String path = Log.e(TAG, 경로: + path); List<String> pathSegments = uri.getPathSegments(); // 쿼리 부분 String query = uri.getQuery()(TAG, query: + query); //지정된 매개변수 값을 가져옵니다. String GoodsId = uri.getQueryParameter(goodsId) Log.e(TAG, GoodsId: + GoodsId);}
스키마가 유효한지 확인하는 방법:
PackageManager packageManager = getPackageManager();의도 의도 = newIntent(Intent.ACTION_VIEW, Uri.parse(abraham://jingewenku.com:8888/goodsDetail?goodsId=10011002));List<ResolveInfo> 활동 = packageManager.queryIntentActivities(의도, 0);booleaniValid = !activities.isEmpty();if(isValid) { startActivity(의도);}
이 방법은 Baidu에서 가장 널리 사용되는 방법이지만 위의 요구 사항은 사용자가 앱을 설치한 경우 해당 앱을 열려면 클릭해야 한다는 것입니다. 설치된 경우 클릭하여 해당 설정 연결을 엽니다. 이는 분명히 요구 사항을 충족하지 않으며 일부 개별 요구에만 사용할 수 있습니다.
두 번째 방법:href에서 스키마 프로토콜을 구성하는 것은 불가능하므로 js 코드를 통해서만 달성할 수 있습니다. 이 방법을 통해서만 앱이 사용 가능한 경우 판단에 따라 열 수 있고, 사용 가능한 경우 다운로드 링크로 이동하여 다운로드할 수 있습니다.
우리는 js가 특정 앱이 휴대폰에 설치되어 있는지 확인할 수 없다는 것을 알고 있으므로, 앱을 오랫동안 호출할 수 없는 경우에는 곡선을 통해서만 국가를 저장할 수 있습니다. 설치되지 않은 다음 다운로드 페이지로 이동합니다. 물론 이것은 제가 생각해낸 것이 아니라 인터넷상의 거물들이 생각하는 것입니다. 여기서는 두 가지 상황으로 나누어야 합니다.
1. 바로 일어나기
참고: h5를 통해 앱을 변경할 수 있습니다. 예를 들어 URL을 방문하여 버튼을 클릭하고 애플리케이션을 열면 앱 스토어의 앱 다운로드 페이지로 바로 이동할 수 있습니다. 앱을 설치하면 주요 모바일 브라우저(360 브라우저, UC 브라우저, Sogou 브라우저, QQ 브라우저, Baidu 브라우저) 및 QQ 클라이언트에서 깨울 수 있습니다. WeChat, Sina Weibo 클라이언트, Tencent Weibo 클라이언트를 깨울 수 없습니다.
코드는 다음과 같습니다:
<html xmlns=http://www.w3.org/1999/xhtml><head><meta http-equiv=Content-Type content=text/html;charset=utf-8><head><script src=http://libs.baidu.com/jquery/1.9.0/jquery.js></script><title>데모를 깨우려면 클릭하세요</title></head><body><style>#zjmobliestart {font -size:40px;}</style><!--설명: h5를 통해 앱을 변경할 수 있습니다. 예를 들어 URL에 액세스하여 버튼을 클릭하고 애플리케이션 APP이 설치되어 있지 않은 경우, 앱으로 바로 이동하세요. 클릭하시면 스토어의 APP 다운로드 페이지로 이동합니다. 호환성이 좋습니다. 앱을 설치하면 모든 주요 모바일 브라우저(360 브라우저, UC 브라우저, Sogou 브라우저, QQ 브라우저, Baidu 브라우저) 및 QQ 클라이언트에서 깨울 수 있습니다. WeChat, Sina Weibo 클라이언트 및 Tencent Weibo 클라이언트를 깨울 수 없습니다. --><a href=zjmobile://platformapi/startapp id=zjmobliestart target=_blank>절강 모바일 모바일 사업관을 깨우세요! </a><script type=text/javascript> function applink(){ return function(){ var clickedAt = +new Date; setTimeout(function(){ !window.document.webkitHidden && setTimeout(function()) if ( +새 날짜 - 클릭한 시간 < 2000){ window.location = 'https://itunes.apple.com/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#weixin.qq.com' } }, 500) }; .getElementById(zjmobliestart).onclick = applink() </script> </body></html>
2. 깨우려면 클릭하세요.
참고: h5를 통해 앱을 깨울 수 있습니다. URL을 방문하면 앱을 직접 열 수 있습니다. 앱 앱이 설치되어 있지 않으면 App Store의 앱 다운로드 페이지로 바로 이동할 수 있습니다. 일반호환성 : 주요 휴대폰 브라우저(360브라우저, UC브라우저, 소고우브라우저, QQ브라우저, 바이두브라우저)에서 깨울 수 있습니다. WeChat, QQ 클라이언트, Sina Weibo 클라이언트, Tencent Weibo 클라이언트는 깨울 수 없습니다.
코드는 다음과 같습니다:
<!Doctype html><html xmlns=http://www.w3.org/1999/xhtml><head><meta http-equiv=Content-Type content=text/html;charset=utf-8><head> <스크립트 src=http://libs.baidu.com/jquery/1.9.0/jquery.js></script><title>데모 직접 깨우기</title></head><body><style>#zjmobliestart{ 글꼴 -size:40px;}</style><!--설명: h5를 통해 앱을 깨울 수 있습니다. URL을 방문하면 애플리케이션을 직접 열 수 있습니다. 앱이 설치되어 있지 않으면 바로 점프합니다. 앱에. 스토어의 앱 다운로드 페이지는 일반적인 호환성을 갖추고 있습니다. 모든 주요 모바일 브라우저(360 브라우저, UC 브라우저, Sogou 브라우저, QQ 브라우저, Baidu 브라우저)에서 활성화될 수 있습니다. WeChat QQ 클라이언트, Sina Weibo 클라이언트, Tencent Weibo 클라이언트를 깨울 수 없습니다. --><p id=zjmobliestart>절강 모바일 모바일 사업관을 깨워라! </p><script type=text/javascript> function applink(){ window.location = 'zjmobile://platformapi/startapp'; var clickedAt = +new Date; setTimeout(function(){ !window.document.webkitHidden && setTimeout(function(){ if (+new Date - clickedAt < 2000){ window.location = 'https://itunes.apple.com/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#weixin.qq.com' } }, 500) }applink() ;</script> </body></html>
이런 식으로 우리의 요구 사항이 완성되었습니다. 이 과정에서 많은 열정적인 사람들의 설명을 여기에 기록하겠습니다. 처음에는 일부 사람들이 내 요구 사항을 이해하지 못하고 Android 측에서 구현한다고 생각했습니다. 앱이 설치되었는지 확인하려면 여기에 메서드를 기록하세요. 코드는 다음과 같습니다.
더 많은 방법을 보려면 내 도구 클래스인 CommonUtilLibrary를 확인하세요.
다른 사람들은 앱에서 webview를 로드하여 로컬 앱을 호출하고 싶다고 생각합니다. 코드는 다음과 같습니다.
webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Uri uri=Uri.parse(url); if(uri.getScheme().equals(abraham)&&uri.getHost(). 같음(jingewenku.com)){ String arg0=uri.getQueryParameter(arg0); arg1=uri.getQueryParameter(arg1); }else{ view.loadUrl(url) } return true }});
또한 WeChat에서 로컬 앱이 호출되면 휴대폰의 WeChat은 WeChat의 내장 브라우저를 사용한다는 점에 유의해야 합니다(서버에서 이전에 얻은 페이지의 주소를 연락처에 보낼 수 있으며, 웹 페이지를 열려면 메시지를 보내세요. 참고: Scheme://host/datastring을 직접 여는 것은 불가능합니다. WeChat은 이 문자열을 웹으로 패키징해야 합니다. WeChat으로 탐색할 수 있는 페이지입니다. 장치가 켜져 있습니다. 들어가시면 방금 디자인한 페이지가 나옵니다. 이때 애플리케이션을 직접 시작하기 위해 클릭하면 이전에 설치된 앱이 깨어나지 않습니다. WeChat에서 차단했기 때문에 오른쪽 상단 메뉴에서 브라우저에서 열도록 선택해야 합니다. 이때 일부 브라우저는 깨어날 수 있지만 일부 브라우저는 깨어날 수 없습니다. 예를 들어 작성자의 테스트 머신 MX4에 내장된 브라우저가 작동하지 않으면 UC 브라우저가 깨어날 수 있습니다. 일부 브라우저는 깨어나지 않습니다. 많은 정보를 참조했지만 완전히 해결할 수 없습니다. 지금 생각할 수 있는 유일한 것은 문제가 발생한 브라우저에 대해 프런트 엔드가 판단하도록 하는 것입니다. 지원되지 않으며 어떤 브라우저를 사용해야 합니까? 독자들에게 해결책이 있다면 메시지를 남겨주세요. 감사합니다!
추신:
WeChat에서 앱을 깨울 수 없고 브라우저로 열어야 하는 이유는 무엇입니까?
WeChat은 모든 공유 연결에 대해 체계 차폐를 구현했기 때문에, 즉 공유 연결의 체계에 대한 모든 호출이 WeChat에 의해 차단되었습니다.
그렇다면 Dianping 및 Didi Taxi와 같은 일부 애플리케이션이 호출될 수 있는 이유는 무엇입니까?
비기술적인 관점에서 볼 때 Dianping과 Didi Taxi는 둘 다 WeChat의 대자이자 생물학적 아들입니다. 그는 아들을 특별히 돌본다.
기술적인 관점에서 WeChat에는 화이트리스트가 있으며, 화이트리스트에 있는 공유 연결에 대해서는 사기 전화가 차단되지 않습니다.
이해가 안 가시나요? 예를 들어 보겠습니다.
예를 들어 Dianping의 공유 링크는 http://dazhongdianping.share.1.com입니다.
WeChat 화이트리스트에 해당하는 http://dazhongdianping 항목이 있습니다. 이 연결에서 발생하는 모든 공유는 해당 구성표를 차단하지 않습니다.
예를 들어 http://dazhongdianping.share.2.com
http://dazhongdianping.share.3.com
Dianping의 자회사라도 http://zigongsi.dazhongdianping.share.3.com을 사용할 수 있습니다. 루트 도메인 이름도 화이트리스트에 있으므로 사용할 수 있습니다.
이 시점에서 공유 링크를 Dianping의 루트 도메인 이름에 연결할 수 없으면 Dianping의 방식을 빌려 이 문제를 우회하는 것이 불가능하다는 것을 모든 사람이 이해해야 합니다.
이 질문을 명확하게 설명해야 합니다. APK를 다운로드할 때 WeChat은 모든 애플리케이션을 차단하며 아들도 예외는 아니라는 것입니다. 따라서 다운로드 링크를 제공하려는 경우 아들인지 여부에 관계없이 가능합니다. , 브라우저를 사용하여 열 수 없습니다.
부록: 일반 애플리케이션을 위한 URL 체계
1. 시스템 기본 애플리케이션
이름 | URL 체계 | 번들 식별자 |
---|---|---|
원정 여행 | http:// | |
지도 | http://maps.google.com | |
핸드폰 | 전화:// | |
SMS | SMS:// | |
우편 | 메일로:// | |
아이북 | 아이북:// | |
앱스토어 | itms-apps://itunes.apple.com | |
음악 | 음악:// | |
비디오 | 동영상:// |
2. 일반적으로 사용되는 타사 소프트웨어
이름 | URL 체계 | 번들 식별자 |
---|---|---|
mqq:// | ||
위챗 | 웨이신:// | |
텐센트 웨이보 | 텐센트웨이보:// | |
타오바오 | 타오바오:// | |
알리페이 | 알리페이:// | |
웨이보 | 시나웨이보:// | |
웨이코 웨이보 | 웨이코:// | |
QQ 브라우저 | mqq브라우저:// | com.tencent.mttlite |
UC 브라우저 | 돌고래:// | com.dolphin.browser.iphone.chinese |
브라우저 열기 | 오http:// | com.oupeng.mini |
소고우 브라우저 | 소고우MSE:// | com.sogou.SogouExplorerMobile |
바이두 지도 | 바이두맵:// | com.baidu.map |
크롬 | 구글크롬:// | |
유쿠 | 유쿠:// | |
징둥 | openapp.jdmoble:// | |
모든 사람 | 렌렌:// | |
메이투안 | 이미투안:// | |
1위 매장 | wccbyihaodian:// | |
내가 확인해 볼게 | wcc:// | |
유다오사전 | yddictproapp:// | |
지후 | 지후:// | |
검토 | 디앤핑:// | |
마이크로 디스크 | 시나브디스크:// | |
두반프엠 | 두반라디오:// | |
NetEase 오픈 클래스 | ntesopen:// | |
만능 명함왕 | 캠카드:// | |
QQ 음악 | qqmusic:// | |
텐센트 비디오 | 텐비디오:// | |
두반 영화 | 두반영화:// | |
NetEase 클라우드 음악 | 오르페우스:// | |
넷이즈 뉴스 | 뉴스앱:// | |
NetEase 애플리케이션 | 어퍼:// | |
넷이즈 복권 | ntscaipiao:// | |
Youdao 클라우드 노트 | 유다오노트:// | |
자세히 보기 | 듀오칸-reader:// | |
국가 대기 질 지수 | 더티베이징:// | |
바이두 음악 | 바이두뮤직:// | |
부엌으로 가세요 | xcfapp:// |
위 내용은 이 기사의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. 또한 모든 분들이 VeVb Wulin Network를 지지해 주시길 바랍니다.