2 日前にワイヤレスのリクエストを受け取りました。初心者なので、ここ数日忙しかったのですが... ユーザーが APP をインストールしている場合は、クリックして対応する APP を開きます。インストールされていない場合は、クリックして対応するアプリを開きます。ネットで検索したところ、基本的には実現できるとのことですが、実際の状況は楽観的ではありません。
もちろん、これは要件の 1 つにすぎません。現在、共有されている H5 ページには、ローカルにインストールされているアプリが直接呼び出されるボタンが付いています。インストールされていない場合は、ダウンロードにジャンプします。これはプロモーションとトラフィック誘導のためのごく普通の戦略で、最近ではプロダクト マネージャーが Toutiao 機能のようなアプリを開いた状態でダウンロード バーを作成するなどの要望を出しました。残りについては説明しません。
さて、今日の本題に移りましょう。H5 は携帯電話でローカル アプリをどのように開くか、アクティブにするのでしょうか。Baidu と Google での回答を見ると、次の 2 つのタイプしかありません。
最初の方法:もちろん、HTML の a タグ内の href 内で Android 側のスキーマを直接設定することで、他のホスト設定がある場合は、それに従うだけです。 Android 側の設定とコードは次のとおりです。
アンドロイド側の設定:
<アクティビティ android:name = .MainActivity> <intent-filter> <アクション android:name = android.intent.action.MAIN /> <カテゴリ android:name = android.intent.category.LAUNCHER /> </intent-filter> <インテントフィルター> <アクション 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> </アクティビティ>
注: これを開始ページで設定する場合は、ラベルと並べて配置する必要があります。そうしないと、実行後にモバイル アプリのアイコンが表示されなくなります。スキーマ プロトコルは小文字にする必要があることに注意してください。そうでない場合は、例外が発生します。それは応答できません!
htmlコード:
<html> <head> <meta http-equiv=Content-Type content=text/html> <title>ここにタイトルを挿入</title> </head> <body> <a href=abraham: //jingewenku.com/?pid=1>アプリを開く</a><br/> </body></html>
ここでは、スキーマ スプライシング プロトコルの形式を見てみましょう。
< a href=[scheme]://[host]/[path]?[query]>アプリケーションの開始</a>
各項目の意味は以下のとおりです。
スキーム: 開始されたアプリを識別します。 ※詳細は後述
ホスト: 適切な説明
path: 値を渡す際に必要なキー ※無くても大丈夫
クエリ:値のKeyとValueを取得 ※無くても大丈夫
もちろん、アプリが存在する場合は、上記のコマンドを使用してローカル アプリを開くことができます。それ以外の場合は応答がありません。
Android で設定されているスキーマ プロトコルは上記の HTML コードで設定されているのではないかと疑問に思われるかもしれません。明らかに pid を設定していないのに、なぜこれを書く必要があるのでしょうか?これは、ローカル アプリを呼び出すときに、これらのパラメーターを oncreate で取得するだけで設定できる場合があるためです。
インテントテント = getIntent(); Uri uri =tent.getData(); if (uri != null) { String pid = uri.getQueryParameter(pid);
Android で設定されたスキーマ プロトコルを取得したい場合は、次のようにすることもできます。
Uri uri = getIntent().getData();if(uri != null) { // 完全な URL 情報 String url = uri.toString(); // スキーム部分 String;スキーム = uri.getScheme(); Log.e(TAG, スキーム: + スキーム); // ホスト部分 String host = uri.getHost(); host); //ポート部分 int port = uri.getPort(); //アクセスパス String path = uri.getPath(); path); List<String> pathSegments = uri.getPathSegments(); // クエリ部分 String query = uri.getQuery(); //指定されたパラメータ値を取得 String GoodsId = uri.getQueryParameter(goodsId) Log.e(TAG, GoodsId: + GoodsId);}
スキーマが有効かどうかを判断する方法:
PackageManager packageManager = getPackageManager();Intenttent = newIntent(Intent.ACTION_VIEW, Uri.parse(abraham://jingewenku.com:8888/goodsDetail?goodsId=10011002));List<ResolveInfo> アクティビティ = packageManager.queryIntentActivities(intent, 0);ブール値有効 = !activities.isEmpty();if(isValid) { startActivity(intent);}
この方法も Baidu で最も一般的な方法ですが、上記の要件は、ユーザーが APP をインストールしている場合、対応する APP をクリックして開くことです。がインストールされている場合、クリックして対応する設定接続を開きます。これは明らかに要件を満たしておらず、一部の個別のニーズにのみ使用できます。
2番目の方法:href でスキーマ プロトコルを構成することはできないため、この方法でのみ、利用可能な場合は判断に基づいてアプリを開き、利用できない場合はダウンロード リンクにジャンプしてダウンロードできます。
js は特定のアプリが携帯電話にインストールされているかどうかを判断できないことを知っているため、アプリが長時間呼び出されない場合は、曲線を通じてのみ国を保存できます。インストールされていない場合は、ダウンロードページに移動します。もちろん、これは私が考えたことではなく、インターネット上の偉い人たちが考えていることです。ここで、それを 2 つの状況に分類する必要があります。
1. 直接目覚める
注: たとえば、URL にアクセスし、ボタンをクリックしてアプリケーションを開きます。アプリケーション APP がインストールされていない場合は、App Store の APP ダウンロード ページに直接ジャンプします。アプリをインストールすると、主要なモバイル ブラウザ (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><!--説明: たとえば、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 ( +新しい日付 - clickedAt < 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.クリックして起動します
注: URL にアクセスすると、アプリケーションを直接開くことができ、アプリケーション APP がインストールされていない場合は、App Store の APP ダウンロード ページに直接ジャンプできます。一般的な互換性: 主要な携帯電話ブラウザ (360 ブラウザ、uc ブラウザ、Sogou ブラウザ、QQ ブラウザ、Baidu ブラウザ) で起動できます。 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{ font -size:40px;}</style><!--説明: URL にアクセスすると、アプリケーションを直接開くことができます。アプリケーション APP がインストールされていない場合は、直接ジャンプします。アプリに。ストアの APP ダウンロード ページには一般的な互換性があり、すべての主要なモバイル ブラウザー (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(function(){ !window.document.webkitHidden; && setTimeout(function(){ if (+新しい日付 - clickedAt < 2000){ window.location = 'https://itunes.apple.com/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#weixin.qq.com'; } }, 500) }, 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)){ 文字列 arg0=uri.getQueryParameter(arg0); arg1=uri.getQueryParameter(arg1); }else{ view.loadUrl(url) }});
また、ローカル アプリが WeChat で呼び出された場合、携帯電話の WeChat は WeChat の組み込みブラウザを使用することにも注意してください (サーバー上で以前に取得したページのアドレスを連絡先に送信できます。 Web ページを開くためのメッセージを送信します) その単純な HTML ページを開きます。 注: スキーム://host/datastring を直接開くことはできません。WeChat はこの文字列を URL に解析しません。 WeChat で閲覧するページ。デバイスの電源が入っています。入力すると、先ほどデザインしたページが表示されます。現時点では、クリックしてアプリケーションを直接起動しても、以前にインストールしたアプリは起動しません。WeChat によってブロックされているため、右上隅のメニューからブラウザで開くことを選択する必要があります。このとき、一部のブラウザは起動できますが、一部のブラウザは起動できません。たとえば、作者のテスト マシン MX4 の内蔵ブラウザが動作しない場合、UC Browser が起動する可能性があります。いくつかのブラウザは起動できません。私は多くの情報を調べましたが、完全に解決することはできません。今考えられるのは、問題が発生したブラウザをフロントエンドに判断させることです。サポートされていないので、どのブラウザを使用する必要がありますか。解決策を知っている読者の方がいらっしゃいましたら、メッセージを残してください。ありがとうございます。
追記:
WeChat でアプリを起動できず、ブラウザで開く必要があるのはなぜですか?
WeChat はすべての共有接続にスキーム シールドを実装しているため、つまり、共有接続内のスキームへのすべての呼び出しが WeChat によってブロックされています。
では、なぜ Dianping や Didi Taxi などの一部のアプリケーションが呼び出される可能性があるのでしょうか?
非技術的な観点から見ると、点評と滴滴タクシーはどちらも WeChat の名付け子であり実の息子です。彼は息子に対して特別な配慮を持っています。
技術的な観点から見ると、WeChat にはホワイトリストがあり、ホワイトリスト内の共有接続に対してスキーム呼び出しはブロックされません。
分かりませんか?例を挙げてみましょう。
たとえば、Dianping の共有リンクは http://dazhongdianping.share.1.com です。
WeChat ホワイトリストに対応して、http://dazhongdianping という項目があります。この接続から発信されるすべての共有はスキームをブロックしません。
例: http://dazhongdianping.share.2.com
http://dazhongdianping.share.3.com
http://zigongsi.dazhongdianping.share.3.com は Dianping の子会社でも使用できます。ルート ドメイン名もホワイトリストに含まれているため、使用できます。
この時点で、共有リンクを Dianping のルート ドメイン名にリンクできない限り、Dianping のスキームを借用してこの問題を回避することは不可能であることを誰もが理解する必要があります。
この質問については、明確に説明する必要があります。APK のダウンロードに関しては、WeChat はあらゆるアプリケーションをブロックします。そのため、ダウンロード リンクを提供したい場合は、息子であろうとなかろうと関係ありません。 、低レベルの方法のうち、ブラウザを使用して開くことはできません。
付録: 一般的なアプリケーションの URL スキーム
1. システムのデフォルトアプリケーション
名前 | URLスキーム | バンドル識別子 |
---|---|---|
サファリ | http:// | |
地図 | http://maps.google.com | |
電話 | 電話番号:// | |
SMS | SMS:// | |
郵便 | mailto:// | |
iブック | ibooks:// | |
アプリストア | itms-apps://itunes.apple.com | |
音楽 | 音楽:// | |
動画 | 動画:// |
2. 一般的に使用されるサードパーティ製ソフトウェア
名前 | URLスキーム | バンドル識別子 |
---|---|---|
mqq:// | ||
微信 | 微信:// | |
テンセント微博 | テンセント微博:// | |
タオバオ | タオバオ:// | |
アリペイ | アリペイ:// | |
微博 | シナウェイボ:// | |
ウェイコウェイボー | weico:// | |
QQブラウザ | mqqbrowser:// | com.tencent.mttlite |
UCブラウザ | イルカ:// | com.dolphin.browser.iphone.chinese |
ブラウザを開く | http:// | com.oupeng.mini |
総合ブラウザ | 総合MSE:// | com.sogou.SogouExplorerMobile |
百度地図 | バイドゥマップ:// | com.baidu.map |
クロム | googlechrome:// | |
優酷 | ようく:// | |
京東 | openapp.jdmoble:// | |
みんな | れんれん:// | |
美団 | imeituan:// | |
1号店 | wccbyihaodian:// | |
確認します | wcc:// | |
ヨウダオ辞書 | yddictproapp:// | |
志湖 | 志胡:// | |
レビュー | 点平:// | |
マイクロディスク | sinavdisk:// | |
ドゥーバンFM | 豆板ラジオ:// | |
NetEase オープンクラス | ntesopen:// | |
万能名刺王 | カムカード:// | |
QQミュージック | qqmusic:// | |
テンセントビデオ | テンビデオ:// | |
豆板映画 | ドゥバンムービー:// | |
NetEase クラウド ミュージック | オルフェウス:// | |
NetEaseニュース | ニュースアプリ:// | |
NetEase アプリケーション | 適切な:// | |
NetEase 宝くじ | ンテスカイピャオ:// | |
ヨウダオクラウドノート | youdaonote:// | |
もっと見る | デュオカンリーダー:// | |
全国大気質指数 | 汚い北京:// | |
百度音楽 | 百度音楽:// | |
キッチンに行く | xcfapp:// |
以上がこの記事の全内容です。皆様の学習のお役に立てれば幸いです。また、VeVb Wulin Network をご支援いただければ幸いです。