Github ブログ投稿アドレス、ここでの更新はあまりタイムリーではない可能性があります。
長い間ブログを書いていませんでしたが、それは大きな間違いでした。たまたま最近、総合マーケットの高速ダウンロード機能が完成したので、それを利用して穴を埋めました。
ユーザー数の増加、ユーザーアクティビティの向上、プロモーションへの協力のためと言われていますが、さらに欺瞞的なのは、他のマーケットにもこれらの機能などがあり、バンドルされたダウンロード機能が必要であるということです。なんてことだ。
もちろん、苦情は苦情であり、それでもタスクは完了する必要があります。
具体的な要件は次のとおりです: ユーザーが携帯電話で WAP サイトを閲覧するとき、 1. アプリケーションの詳細ページに入るとき、このアプリケーション (Sogou Market) の詳細ページを開きます。 2. 高の WAP 側をクリックすると、 -speed download、このアプリケーションがインストールされている場合は、このアプリケーションを呼び出してダウンロードします。そうでない場合は、このアプリケーションのバンドルをダウンロードします。インストールが完了した後、このアプリケーションを開いたときに、ユーザーが以前にダウンロードしたいアプリケーションをダウンロードします。 これら 2 つの関数を実装するにはどうすればよいですか?以下の段階的な分析:
1. 機能要件前述の通り。
一般的に言えば、前の 2 つの機能を完了するには、アプリケーションをインストールしてバックグラウンドで実行する必要があります (最も単純に理解すると、アプリケーションは開かれており、他のプログラムによって強制終了されていないということです)。この場合、アプリケーションはインストールされているとみなされます。それ以外の場合は、インストールされていないとみなされます (以下で特に指定しない限り、これが当てはまります)。
2. 競合製品の分析もちろん、競合製品にもこれらの機能があるので、まずは理論を使ってそれがどのように機能するかを研究しましょう。 Chrome パケット キャプチャ分析による最終分析は次のようになります。
Baidu モバイル アシスタント http://127.0.0.1:6259/
Sogou モバイル アシスタント http://127.0.0.1:12388/
Wandoujia カスタム契約 wandoujia://detail/app/cn.buding.martin
Baidu Mobile Assistant と Sogou Mobile Assistant のソリューションは基本的に同じです 携帯電話のローカル サービス アドレス 127.0.0.1 (ループバック アドレス) を使用します ポート アドレスは異なります。をクリックし、ブラウザがそれを wadoujia プロトコルで登録されたアクティビティに自動的に配布できるようにします。
アプリケーションの詳細を開く ブラウザの対応する詳細ページを開くと、Baidu Mobile Assistant と Sogou Mobile Assistant が同時にローカル ループバック アドレスにアクセスし、Wandoujia がカスタム プロトコルを呼び出して関連するアプリケーション (通常は Wandoujia) を呼び出します。システムにより)。
高速ダウンロードの原則 Wandoujia は、アプリケーションのインストール時にクライアントを呼び出してダウンロードする機能を実装していません。ダウンロードをクリックすると、バンドル パッケージをダウンロードするか、ダウンロードするアプリケーションを直接ダウンロードするかを尋ねられます (添付ファイルを参照)。説明については記事の最後にある画像を参照してください)。 [バンドルのダウンロード] を選択して、特定のファイル名で Wandojia インストール パッケージをダウンロードします。インストールが完了したら、特定のディレクトリ (通常はダウンロードおよび一般的なブラウザのダウンロード ディレクトリ) をスキャンし、ルールを満たすファイルがある場合は、該当するリソース ID を抽出し、バンドルされた APP をダウンロードします。
詳細ページを起動します。HTTP サーバーまたはカスタム プロトコルを使用できます。カスタム プロトコルは HTTP サーバーをホストするサービスをバックグラウンドで実行する必要がないため、電力が節約されます。 。
続編の 高速ダウンロード では、Wandoujia は利用できなくなりました。電力を節約するためにプロトコルをカスタマイズすることについて話しましたが、検討してもよいでしょうか。必要に応じて、アプリケーションがインストールされていない場合は、バンドル パッケージを直接ダウンロードします。アプリケーションがインストールされている場合は、どちらの場合も問題ありません。カスタムプロトコルを使用して実行できますか?アプリがインストールされているかどうかを確認するにはどうすればよいですか?ブラウザには対応する API がありますか?明らかにそうではなく、たとえあったとしても部分的にしか利用できない可能性がありますが、すべてのブラウザをサポートする必要があります。唯一の方法は、HTTP サーバーにアクセスしてタイムアウトを設定することです。一定時間内に応答がない場合、アプリケーションはインストールされていないとみなされ、対応するバンドルがダウンロードされます。さらに、その後の HTTP サーバーの拡張により、Web サーバーを介して Web との双方向の対話を実行できるようになり、たとえば、Baidu Mobile Assistant は Web 経由で位置情報を取得できます。カスタム プロトコルではこれを行うことはできません。もちろん節電も兼ねて。
高速ダウンロードの調整は解決されましたが、アプリケーションがインストールされていない場合、アプリケーションのインストール後、ユーザーが事前にどのアプリケーションをダウンロードする必要があるかをどのように知ることができますか?それは、バンドルされているアプリケーションの識別です。 Sogou Market の当初の計画では、バンドルされたアプリケーションの ID 番号をアプリケーション (アセット フォルダーの下) にファイルを入力して保存する予定です。ただし、少数のアプリケーションには使用できます (当初はバンドル効果をテストするために使用されました)。現時点では、多数のパッケージと 1 つのファイルが必要です。たくさんの収納スペース。
競合製品のソリューションを参照してください。これは確かに完璧ですが、現在の携帯電話のセキュリティ ソフトウェアやクリーニング ソフトウェアのほとんどは、アプリケーションが正常にインストールされた後にインストール パッケージを削除するように求められます。ブラウザのダウンロードディレクトリは変更される場合があります。ここでSDカード全体をスキャンして、条件を満たすファイルを見つけることはできますか?絶対にそうではありません。時間がかかりすぎます。
アプリケーションがインストールされていない場合、またはバックグラウンドで実行されていない場合に、バンドルされているアプリケーション ID を確認する方法。上記 2 つの解決策はどちらも完璧ではありません。それを解決するにはどうすればよいですか。バックエンドのYanfeiと協議した結果、APKを高速でダウンロードする際、Webページには携帯電話にダウンロードされたバンドルアプリIDとパッケージ名、およびデバイスの一意のID (uuid)が記録され、マーケットを開くときにリクエストが行われます。対応するインターフェイスと uuid を渡し、対応するアプリケーションをダウンロードするためのデータを取得します。このアイデアは素晴らしかったですが、後に実用的な価値がないことが判明し、当面は uuid には適切な解決策がありませんでした。重要なのは、両端で生成されるものは一意でなければならないということです (mac、ip?)。生成方法は?
Guochang との夕食とディスカッションの後、関連タスクを実行するためにローカル コードを呼び出すことができるかどうかを検討しました。しかし、よく考えてみると、これは通常、WebView と js の間のやり取りであることがわかりました。現在の使用シナリオではこれは不可能です。この Webview は独自のアプリケーション内に存在する必要があります。
多くの要因を考慮し、最終的には、欠陥があるにもかかわらず、Baidu Mobile Assistant と Sogou Mobile Assistant のソリューションを参照することにしました。 カスタム プロトコル モードについては、この記事を参照してください。Android カスタム プロトコルと HTML は、ロード時に自動的にローカル APP を呼び出そうとします。この記事では、あまり詳しく説明しません。
最後の解決策は、携帯電話のバックグラウンドでサービスを介して HttpServer を実行し、ポート 12307 をリッスンすることです。
1. 高速ダウンロード
Web ページで高速ダウンロードをクリックして、http://127.0.0.1:12307/appdown?downid=1&packagename=com にアクセスします。 sogou.map
成功した場合、返される json 文字列は
{ "status":1, "message":"OK" }
ステータス 0 は失敗を示し、ステータス 1 は成功を示します。メッセージは具体的な説明です。
一定時間以内に電話が応答しない場合、デフォルトのアプリケーションがインストールされていない場合は、バンドルされている APK パッケージをダウンロードしてください。
モバイル端末が応答した場合、Web ページは対応するダウン ID とパッケージ名を取得し、最初にアプリケーションがインストールされているかどうかを判断します。インストールされている場合は、アプリケーションがインストールされていることを確認するメッセージが表示されます。インストールされていない場合は、アプリケーションをダウンロードしてダウンロード リストに追加することをユーザーに通知します。
2. 詳細ページを開きます
http://127.0.0.1:12307/godetail?downid=1&packagename=com.sogou.map&backtohome=ture backtohome が true の場合、携帯電話の戻るボタンを押して戻りますアプリケーションのホームページに移動し、 false の場合はブラウザに戻ります。 (Wandoujia を参照してください。(http://www.wandoujia.com/apps/com.tencent.mm など) [http://www.wandoujia.com/apps/com.tencent.mm] には、次の方法でアクセスする必要があります。携帯電話。ユーザーエージェントは PC アクセスとは異なります)
どのアプリケーションがバンドルされているかを確認するには?
後述の競合製品の実装方法を参照してください。異なるファイル名でファイルをダウンロードし(ファイル名には規則があります)、ユーザーがアプリケーションをインストールして開いた後、ダウンロードフォルダーを読んで、条件を満たすapkがあるかどうかを判断します。ルール。存在する場合は、対応する ID を抽出し、それに応じてダウンロードします。サーバーがブラウザーに同じファイルをダウンロードできるインターフェイスを提供している限り、ブラウザーはそのファイルを別のファイル名で表示します。
たとえば、Sogou Mobile Assistant の WeChat 詳細アドレスは http://wap.sogou.com/app/apkdetail.jsp?ppid=34&cid=49&docid=8271386494777466339&e=1394 であり、インストールの高速ダウンロード用のアドレスはパッケージは http://download.zhushou.sogou.com/zhushou/android/MobileTools.apk?dn=MobileTools_8271386494777466339_71.apk ダウンロードされた APK の名前は MobileTools_8271386494777466339_71.apk です。バンドルされているアプリケーション ID は 8271386494777466339 で、アプリケーションは WeChat です。これは、HTTP 戻りデータのヘッダーの Content-Disposition フィールドをattachment filename="MobileTools_8271386494777466339_71.apk"に設定することで実現できます。一般に、主流のブラウザーはこの属性をサポートしています。
したがって、APK の命名方法は SogouAppmall_binding_downid_9.apk であることが最終的に決定され、アプリケーションがこの形式であると判断された場合 (通常のマッチングで一致できる)、downid が抽出されます (downid は整数である必要があります)。 )。アプリケーションがインストールされていない場合は、「高速ダウンロード」をクリックして、上記のルールに従って名前が付けられた apk をフォルダーにダウンロードします。ユーザーがアプリケーションをインストールして開くとき、一般的に使用されるダウンロード フォルダー (一般的な /download、/downloads、およびブラウザーのダウンロード フォルダーなど) 内の APK をスキャンします。ルールを満たすものがあれば、特定のファイル内の ID が検出されます。完了したら、インストール パッケージをダウンロードして削除します (将来の干渉を防ぐため)。同じフォルダー内にルールに準拠するインストール パッケージが複数存在する可能性があることを考慮して、ルールに準拠する最新の 2 つが時系列で選択され、その他のフォルダーは無視され、次回処理されます (通常はこのような状況になります)。これも比較的まれです)。もちろん、対処する必要がある詳細は他にもありますが、ここでは詳しく説明しません。
4. パフォーマンスの最適化と展望プログラムの最適化は、意欲的な攻城戦マスターが行うべきものであるため、当然最適化する必要があります。
電力を節約するために、次の 2 つの戦略が指定されています。
1. ネットワークが変更されると、ネットワークがなければサービスが終了し、ネットワークがあればサービスが開始されます。画面のロックを解除するときとロックするときに、それぞれサービスをオンおよびオフにします。
2. サービスを開始するには、インターネット接続と画面のオンが必要な条件です。アプリケーションがロックされているときにネットワークの変更によって引き起こされる電力消費の問題を大幅に軽減できます。
上記の 2 つの戦略は重ねて使用することができ、たとえば、条件が満たされていてもサービスがオンにならない場合があります (ネットワークの頻繁な切り替えが原因である可能性があります)。
上記の条件が設定されるのは、その後の操作がインターネット接続がある場合にのみ完了できるためです。第二に、画面がロックされている場合、プログラムが自動的にトリガーしない限り、一般のユーザーは関連するプロセスをトリガーできません (インスタント メッセージング ソフトウェアは次のような情報を受け取ります)。または自動的にダウンロードしますが、これは不正すぎます) 画面がロックされているときにバックグラウンドで実行する必要があります。
HTTP サーバーは、Github 上のオープン ソース Nanohttpd を使用します。高速ダウンロードに加えて、http サーバーは、コンピューターへのデータの送信、アプリケーションや Web ページとの対話など、さまざまな側面でも使用できます。
5. 最終的な実装http://m.app.sogou.com/ にアクセスして、最終的な効果を確認できます。
一般的な考え方は上記の説明です。この作品が皆さんにインスピレーションを与え、出発点になれば幸いです。
まだオンラインになっていないため、11 月 5 日まで待つ予定です。
6. 関連ツールと付録(1) Chrome 開発者ツール + デバイス モード (データ パケット キャプチャ)
(2) 3 つの市場での WeChat ダウンロードのデモ アドレス: Baidu Mobile Assistant、Sogou Mobile Assistant、Wandoujia
その時の(2014-10-27のページのスクリーンショットは以下の通り)
(3) 一般的なブラウザの APK ダウンロード パス (# は行の変更がコメントであることを示し、1 行に 1 つのディレクトリ、サブディレクトリの移動は現在サポートされていません)
#this is the binding apk file path#this is a comment#some system default, Chrome, Opera, Opera mini, Sogou Broswer, ES File Explorer,Dolphin Browserdownload#meizu browser, some system defaultdownload/apkdownloads#uc browserUCDownloads#QQ BroswerQQBrowser/安装包QQBrowser/下载qqbrowser/download#QQ Broswer HDQQBrowser#baidu broswerbaidu/flyflow/downloads#baidu appbaidu/searchbox/downloads#Maxthon BroswerMxBrowser/DownloadsTTDownload/installapkApplicationThunderDownload#liebao broswerkbrowser_fast/download/App#360 Broswer360Browser/download#360 Express Broswer360ExpressBrowser/download#2345 broswerDownload/2345浏览器下载/安装包#hao123hao123/down/apkDolphinBrowserCN/downloadUCDLFilesQCDownloadLXDOWNLOAD/DOWNLOADapc/ApcBrowser/downloads#YueDong Broswer,Ignore,The apk file name is changed by the broswer,the same with 4G Explorer(do not support header's Content-Disposition attribute)#ydBrowser/download#4G-explorer/apks
はははは、すべての問題に対する完璧な解決策です。後で拡張することもできます。