䌁業のアプリストアが必芁な堎合







䌁業アプリケヌションのトピックは、数幎にわたっお䌚議や蚘事で掻発に議論されおきたした。 誰もが「蜂蜜の暜」を描きたす。家やオフィスからすぐに、い぀でも手元に...䞀般的に、ビゞネス䞊の問題を迅速に解決するための有望で䟿利なツヌルです。







しかし、「軟膏で飛ぶ」ずいうこずで止めたしょう。 牧歌的な写真は、埓業員間でアプリケヌションを配垃および曎新する問題によっお損なわれる可胜性がありたす。 経隓によれば、゚ンタヌプラむズアプリケヌションの䜜成だけでは䞍十分です。 たた、タヌゲットオヌディ゚ンスに配信する䟿利な方法を芋぀けお、曎新する必芁がありたす。







EastancTechnologiesでは、倚数の䌁業モバむルアプリケヌションを䜜成しおきたしたが、むンストヌルず曎新の問題は垞にホットなトピックでした。 すべおのオプションの䞭で、1぀はむしろ技術的で興味深いようです-独自のアプリストア。 投皿では、゚ンタヌプラむズアプリケヌションのナヌザヌ向けにAndroid甚ストアを実装した方法の詳现を共有したす。









実際、問題は䜕ですか



問題があるかどうか考えおみたしょう。 結局のずころ、Androidに䌁業アプリケヌションをむンストヌルする方法はいく぀かありたす。









第二に、垞識では、䌚瀟の埓業員ではないナヌザヌにずっおは、公開アプリケヌションがナヌザヌの閉じたグルヌプのみに焊点を合わせおいるこずは問題に思えるかもしれたせん。







Appleは間違いなく握手をしおいる。 Googleの物事はよりシンプルで、厳密な制埡はありたせん。 しかし、基本的な倫理がありたす。 このようなアプリケヌションを䜿甚しおストアをスロヌするこずは、開発者にずっお適切な動䜜ではありたせん。







3番目の理由もありたす。 䌁業には耇数の䌁業モバむルアプリケヌションがある堎合がありたす。 たた、公匏アプリケヌションストアでそれらを探す必芁がなく、すべおが1か所にある堎合に䟿利です。









はい、アプリケヌションに自己曎新メカニズムを組み蟌むこずができたす。 起動時に、アプリケヌションはサヌバヌに移動し、新しいアセンブリがむンストヌルされおいるかどうかを確認したす。 もしそうなら、それは自己亀換のプロセスを開始したす。 このようなスキヌムは機胜したすが、パフォヌマンスを維持するには倚倧な劎力が必芁です。









よく知られおいるMDM AirWatch゜リュヌションの䟋では、デバむス1台あたり月額4〜6ドルで䌚瀟が泚いでいるこずがわかりたす。







埓業員ごずに毎幎倚額を支払う必芁があるのは恥ずかしいこずです。 たた、埓業員が倚い堎合はどうなりたすか 率盎に蚀っお、それは高䟡な喜びです。









ご芧のずおり、それぞれのアプロヌチは十分ではありたせんでした。 これにより、考えを集め、アプリケヌションストアを蚭蚈および実装したした。

実装の詳现に぀いおさらに説明したす。







たず最初に



ストアを䟿利にするには、利甚可胜なアプリケヌションのリストを衚瀺するだけでは䞍十分です。 新しいバヌゞョンの確認、アプリケヌションディストリビュヌションのダりンロヌドずむンストヌルなど、倚くの䜿い慣れたナヌザヌアクションをプログラムに教える必芁がありたす。 幞いなこずに、Android APIはそのような機胜を実装するための倚くの䟿利なツヌルを提䟛したす。







䜿甚可胜なアプリケヌションのリストを取埗する



おそらく最も簡単な郚分:)デヌタの圢匏ず内容に぀いおサヌバヌず亀枉し、利甚可胜なアプリケヌションに関する情報のリストを提䟛するように圌に教える必芁がありたす。 誰もがHTTPS / REST / JSONが倧奜きです。







コンテンツに関しおは、アプリケヌションごずに以䞋を報告したす。









サヌバヌからの応答䟋







[ { "id": "etr.appstore", "name": "App Store", "info": "      ", "versionName": "1.3", "versionCode": 6, "url": "https://myappstore.ru/appstore/etr.appstore.apk", "icon": "https://myappstore.ru/appstore/appstore/etr.appstore.android.png" }, { "id": "ru.eastbanctech.mobileregistrator", "name": " ", "info": "     ,           ", "versionName": "v1.1.5", "versionCode": 115, "url": "https://myappstore.ru/appstore/appstore/ru.eastbanctech.mobileregistrator.release.apk", "icon": "https://myappstore.ru/appstore/appstore/ru.eastbanctech.mobileregistrator.release.android.png" } ]
      
      





ストア自䜓のモバむルクラむアントもアプリケヌションストアにあるため、自身を曎新できるこずに泚意しおください:)







この問題を解決するために、Retrofit2 / OkHttpの䜿甚が実質的に暙準になりたした。 RxJava-オプション。 むンタヌネットからアむコンを衚瀺するには、FacebookのFrescoを䜿甚したす。これは、他のプロゞェクトで既に正垞に䜿甚されおいるためです。 ピカ゜は機胜性ず䜿いやすさの䞡方でフレスコず競合できたすが。 ずころで、私たちはすでにKotlinを䜿甚しおいるので、蚘事のすべおの䟋がその䞊にありたす。







むンストヌルされたアプリケヌションに関する情報



ストアの各アプリケヌションは、ナヌザヌによっお既にむンストヌルされおいる堎合ずただむンストヌルされおいない堎合がありたす。 さらに、むンストヌルされた各アプリケヌションは、珟圚のバヌゞョンであるか、すでに叀くなっおいる可胜性がありたす。 もちろん、これはすべお、ストアの゚ンドナヌザヌを知るのに圹立ちたす。 幞いなこずに、Android APIを䜿甚するず、むンストヌルされおいるすべおのアプリケヌションに関する情報を取埗できたす。このため、特別な暩限も必芁ありたせん。







 val installedApps = context.packageManager.getInstalledPackages(PackageManager.GET_META_DATA)
      
      





このコマンドは、むンストヌルされたアプリケヌションに関する情報をPackageInfo圢匏で返したす 。 そこでは倚くの有甚なデヌタを芋぀けるこずができたすが、 packageName



ずversionCode



のみが有甚です。







むンストヌル枈みのリストず利甚可胜なアプリケヌションのリストを受け取ったら、結果のアプリケヌションのリストずすべおの結合情報を衚瀺する必芁がありたす。 RxJavaに関するいく぀かの蚘事のチュヌトリアルのようですね。 ;䜿甚するRxJava







  class RemoteAppModel //        class DeviceAppModel //        val storeAppsObs: Observable<List<RemoteAppModel>> = appsService.getApps() val localAppsObs: Observable<List<DeviceAppModel>> = deviceService.installedApps() Observable.combineLatest(storeAppsObs, localAppsObs) { onlineAppList, localAppList -> //     //              onlineAppList.map { onlineApp -> //       ,    val localApp = localAppList.find { it.id == onlineApp.id } AppInfo(onlineApp, localApp) } }
      
      





結果のリストは、RecyclerViewなどを䜿甚しおナヌザヌに既に衚瀺されおいたす。 ナヌザヌが䜿甚できるアクションのリストは非垞に明癜です。















アプリケヌションのむンストヌル



アプリケヌションのむンストヌルでは、すべおがそれほど単玔ではありたせん。 この問題は、次の2぀の方法で解決できたす。配垃キットをむンストヌルするか、プログラムで自分で実行するようにナヌザヌに䟝頌したす。







最初のアプロヌチは非垞に簡単に実装されたす。







  //uri -    apk- override fun install(uri: Uri) { val intent = makeInstallerIntent(uri) context.startActivity(intent) } private fun makeInstallerIntent(uri: Uri): Intent { val intent = Intent(Intent.ACTION_VIEW) intent.setDataAndType(uri, "application/vnd.android.package-archive") intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //  Android N             Uri, //        ,        val targets = context.packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY) targets.forEach { info -> context.grantUriPermission(info.activityInfo.packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION) } } return intent }
      
      





意図を開始し、制埡を配垃システムのむンストヌラヌの手に枡したす。













2番目のむンストヌル方法ではさらに倚くのコヌドが必芁になりたすが、䞻な問題はコヌドの量ではなく、apkファむルのプログラムむンストヌルにはプログラムがandroid.permission.INSTALL_PACKAGES



特暩を必芁ずするずいう事実です。







次の2぀の堎合、アプリケヌションをシステムず芋なすこずができたす。









ご存じのずおり、すべおのナヌザヌが2番目の方法でストアのむンストヌルに察凊できるわけではありたせん。 ただし、䞡方のオプションを組み合わせるこずに煩わされるこずはありたせん。別のプラグむンアプリケヌションで゜フトりェアむンストヌルを実装したす。 クラむアントは、むンストヌルされたプラグむンの可甚性を確認し、利甚可胜な堎合はむンストヌルを委任できたす。それ以倖の堎合は、通垞の方法でディストリビュヌションをむンストヌルしたす。 2番目のパスに埓うこずにした堎合、いく぀かの有甚なリ゜ヌスがありたす。









曎新を確認する



圌らの正しい心の誰もが1時間ごずに店を開いお新しいバヌゞョンをチェックするこずはありたせん、電話はそれを独立しおそしお目に芋えないようにナヌザヌに行うべきです。 Androidには、定期的なバックグラりンド䜜業を行う方法がいく぀か甚意されおいたす。 倚くの䞀般的な方法を分析したした。







アラヌムマネヌゞャヌ



おそらく最も人気のある方法です。 ネットワヌク䞊でAlarmManagerを䜿甚するための十分な指瀺ずガむドがありたす。







長所









短所









再起動埌、ブロヌドキャストBOOT_COMPLETEを聞くず、回埩を詊みるこずができたす。







SyncAdapterおよびSyncService



ロヌカルデヌタずサヌバヌ䞊のデヌタを同期するように蚭蚈されおいたす。 やりたいこずだけ。







長所









短所









Jobcheduler



AlarmManagerずSyncAdapterの利点を組み合わせた玠晎らしいフレヌムワヌク。 安定、効率的か぀柔軟に動䜜したす。 欠点が1぀ありたすAPI 21+







Firebase JobDispatcher



バックポヌトJobSchedulerず芋なすこずができたす。







長所









短所









どちらを遞択するかは個々の問題です。 以前のロリポップのSyncAdapterずAPI 21+のJobSchedulerのスキヌムにこだわりたす。













サヌバヌ



最初は、Firbase Hostingをバック゚ンドずしお䜿甚しお、独自のサヌバヌなしで完党に行うこずができたした。 ホスティングには、すべおのメタ情報を含むすべおのapkファむル、アむコン、jsonファむルがありたした。 このようなスキヌムはしばらくの間は機胜したしたが、倚くの明らかな欠点がありたした。誰もjsonファむルを手動で曞きたくないため、間違ったものを曞き蟌む倧きなリスクがありたす。







そこで、このプロセスを自動化し、NodeJSに基づいおサヌバヌを䜜成するこずにしたした。

倚皮倚様なnpmラむブラリの䞭で、apkファむルからversionCode



、 versionName



さらにはアプリケヌションアむコンを取埗できる非垞に䟿利なapp-bundle-infoモゞュヌルを芋぀けたした。







その結果、アプリケヌションの公開時の人的芁因が最小限に抑えられたす。サヌバヌは、配垃の有効性を独立しお怜蚌し、すべおの技術情報を独自に取埗したす。







おわりに



䌚瀟の埓業員にモバむルアプリケヌションを提䟛するずいうアむデアは適切で正しいものですが、同時に、アプリケヌションの配信ず関連性のサポヌトの問題を解決する必芁がありたす。







この蚘事では、埓業員が䌁業アプリケヌションのリストを手元に眮いおむンストヌルできるだけでなく、それらを曎新するメカニズムも提䟛する方法に぀いお説明しおいたす。







開始するには、デバむスの蚭定で䞍明な゜ヌスからアプリケヌションをむンストヌルし、ストアアプリケヌションをダりンロヌドする機胜を有効にする必芁がありたす。その埌、すべおが半自動モヌドで実行されたす。 アプリストア自䜓も、新しいバヌゞョンずアップデヌトをダりンロヌドできたす。







この゜リュヌションは、COPEスキヌムに非垞に適しおいたす埓業員に䌚瀟の電話が䞎えられ、事前のセットアップ手順が既に実行されおいる堎合。







私たちにずっお、このアプロヌチは特定の顧客に結び付けられおいないため、良いものでもありたした。 ゜リュヌションは再利甚できたす。 アプリケヌションがダりンロヌドされるサヌバヌのアドレスを、アプリケヌションストア内の䌚瀟のロゎから眮き換えるだけで十分です。







良い䞀日ず䌁業のアプリケヌションをお楜しみください








All Articles