Как проверить приложение на присутствие в маркетах и что дает эта информация?
Класс PackageManager может сказать нам имя пакета приложения, установившего пакет.
Для этого используется метод getPackageManager().getInstallerPackageName(), который вернет строку.
Например, Play Маркет имеет com.google.market или com.google.market, Amazon App Store — com.amazon.venezia, маркет от Samsung — com.sec.android.app.samsungapps.
А вот приложения с F-Droid указывают не на него, а на com.google.android.packageinstaller, как будто бы их установил сам пользователь.
Зная источник установки и имя пакета самого приложения, можно постучаться в маркеты по конкретным URL. Наличие программы в маркете — уже некоторый повод для самоуспокоения, все-таки их иногда чистят.
А вот если приложение было из маркета удалено, то это серьезный сигнал для беспокойства (его, конечно, могли удалить из-за какой-нибудь чепухи, вроде нарушения чужих авторских прав, но, скорее всего, это было что-то реально нехорошее).
Для получения URL приложения в Play Маркет и F-Droid используй строчки
1 2 |
[crayon-6568a367cba4c810873664 inline="true" ]<span class="typ">String</span><span class="pln"> playStoreUrl </span><span class="pun">=</span> <span class="str">"https://play.google.com/store/apps/details?id="</span> <span class="pun">+</span><span class="pln"> packageName</span><span class="pun">;</span> <span class="typ">String</span><span class="pln"> fdroidStoreUrl </span><span class="pun">=</span> <span class="str">"https://www.f-droid.org/packages/"</span> <span class="pun">+</span><span class="pln"> packageName</span><span class="pun">;</span> |
[/crayon]
Аналогично можно проверять и остальные маркеты. Код простой проверки (запускай только в фоновых потоках, так как используется сеть):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[crayon-6568a367cba4f911586589 inline="true" ]<span class="kwd">private</span> <span class="kwd">void</span><span class="pln"> checkPlayMarket</span><span class="pun">(</span><span class="typ">String</span><span class="pln"> playStoreUrl</span><span class="pun">)</span> <span class="pun">{</span> <span class="kwd">try</span> <span class="pun">{</span><span class="pln"> URL url </span><span class="pun">=</span> <span class="kwd">new</span><span class="pln"> URL</span><span class="pun">(</span><span class="pln">playStoreUrl</span><span class="pun">);</span> <span class="typ">HttpURLConnection</span><span class="pln"> connection </span><span class="pun">=</span> <span class="pun">(</span><span class="typ">HttpURLConnection</span><span class="pun">)</span><span class="pln"> url</span><span class="pun">.</span><span class="pln">openConnection</span><span class="pun">();</span><span class="pln"> connection</span><span class="pun">.</span><span class="pln">setRequestMethod</span><span class="pun">(</span><span class="str">"GET"</span><span class="pun">);</span><span class="pln"> connection</span><span class="pun">.</span><span class="pln">connect</span><span class="pun">();</span> <span class="kwd">int</span><span class="pln"> code </span><span class="pun">=</span><span class="pln"> connection</span><span class="pun">.</span><span class="pln">getResponseCode</span><span class="pun">();</span> <span class="kwd">if</span> <span class="pun">(</span><span class="pln">code </span><span class="pun">==</span> <span class="lit">200</span><span class="pun">){</span> <span class="com">// Есть в маркете</span> <span class="pun">}</span> <span class="kwd">if</span> <span class="pun">(</span><span class="pln">code </span><span class="pun">==</span> <span class="lit">404</span><span class="pun">){</span> <span class="com">// Нет в маркете</span> <span class="pun">}</span><span class="pln"> connection</span><span class="pun">.</span><span class="pln">disconnect</span><span class="pun">();</span> <span class="pun">}</span> <span class="kwd">catch</span> <span class="pun">(</span><span class="typ">Exception</span><span class="pln"> e</span><span class="pun">)</span> <span class="pun">{</span> <span class="typ">Log</span><span class="pun">.</span><span class="pln">e</span><span class="pun">(</span><span class="str">"CheckStoreTask"</span><span class="pun">,</span><span class="pln"> e</span><span class="pun">.</span><span class="pln">toString</span><span class="pun">());</span> <span class="pun">}</span> <span class="pun">}</span> |
[/crayon]