2013-06-02 15 views

Odpowiedz

6

Załóżmy, że jeśli aplikacja jest niedostępna, strona pod numerem http://play.google.com/store/apps/details?id=<package_name> zawiera na przykład słowo error-section. Jeśli aplikacja jest dostępna, nie zawiera tego słowa.

Ustaw HTTP na URL i wyszukaj error-section.

  • Nie error-section - Twoja aplikacja jest dostępna.
  • W przeciwnym razie jest niedostępny.

Jak to:

final HttpClient client = new DefaultHttpClient(); 
final String getURL = "http://play.google.com/store/apps/details?id=<package_name>"; 
final HttpGet get = new HttpGet(getURL); 
final HttpResponse responseGet = client.execute(get); 
final HttpEntity resEntityGet = responseGet.getEntity(); 
if (resEntityGet != null) 
{ 
    final String response = EntityUtils.toString(resEntityGet); 
    if (response.indexOf("error-section") == -1) 
    { 
     // available 
    } 
    else 
    { 
     // unavailable 
    } 
} 
+0

Wygląda to rozsądne. Dzięki za to. – Booger

+0

To był dobry pomysł, ale nie zadziałał. Myślę, że Internet nie zawsze filtruje na podstawie urządzenia (więc wszystkie weryfikacje wracają, ponieważ strona internetowa była tam w Sklepie Play). – Booger

2
private class URLTest extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       String strurl = "https://play.google.com/store/apps/details?id=com.rovio.angrybirdsstarwars.ads.iap"; 
       // String strurl = 
       // "https://play.google.com/store/apps/details?id=com.rovio.angrybirdsstarwars.ads.iaptest"; 
       // //fake packagename append with "test" 
       HttpGet httpget = new HttpGet(strurl); 
       HttpResponse httpresp = httpclient.execute(httpget); 
       if (httpresp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 
        Log.e("Found", "YES"); 
       } else if (httpresp.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { 
        Log.e("Found", "NO"); 
       } 

      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } catch (Exception e) { 
      Log.e("", ""); 
     } 
     return null; 
    } 

} 

Próbowałem z poprawnymi & fałszywych pakietów i jego dając Bad Request responze jeśli aplikacja nie jest dostępna & dodatni (sukces kod 200), jeśli aplikacja jest tam .. więc plz sprawdź to, gdy może ci pomóc.

android 2.2 & app min req 2,3

Correct URL 200 Response Success Resultfake url. app url which is nt available on play store Failure result 404

+0

Cóż, twój przykład zadziała, jeśli pakiet nie istnieje, jednak chcę przetestować poprawne nazwy pakietów (nie angrybirds_test). Muszę wysłać prawidłowy URL (zawierający pakiet) i odpowiedzieć Sklepie Play. Niestety, po uruchomieniu tego testu dla aplikacji nie w systemie Android 2.3 (przy użyciu mojego Nexusa One) nadal otrzymuję prawidłową odpowiedź z serwera (ponieważ adres URL jest prawidłowy - mimo że aplikacja nie jest dostępna na serwerze). Aby było jasne - używanie fałszywej nazwy pakietu nie jest prawidłowym testem - musi się to udać (ponieważ aplikacja nie znajduje się w sklepie), nawet jeśli podam prawidłowy adres URL. – Booger

+0

Testowałem z dostępnym urządzeniem i pytałem o poziom api, na którym testowałeś nd nie działało ... więc użytkownik może odpowiedzieć odpowiednio. To daje odpowiedź 200, jeśli aplikacja jest dostępna na rynku i jeśli m przekazuje nazwę pakietu, który nie jest dostępny na rynku, podaje odpowiedź 404 Nie znaleziono ... jeśli jest możliwe podanie adresu URL lub nazwy pakietu dla wyjaśnienia. – user1140237

+0

Testowałem poprzedni kod za pomocą NexusaOne z uruchomionym 2.3 (CyanogenMod). Nie mam tego urządzenia ze mną, żeby sprawdzić ten niuans. Mam nadzieję, że to zadziała, i przetestuję to ponownie (aby móc nagrodzić nagrodę, jeśli dotyczy). – Booger

Powiązane problemy