web-dev-qa-db-ja.com

Android Playストアアプリのバージョンを取得

このコードを使用してPlayストアアプリのバージョンを取得していますが、これによりアプリがハングします。 Playストアアプリのバージョンを取得する他の方法、またはこのコードを使用してアプリがハングして正常に実行されないようにする方法を指定してください。前もって感謝します。

    public class VersionChecker extends AsyncTask<String, String, String> {

    private String newVersion;

    @Override
    protected String doInBackground(String... params) {

        try {
            newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + "trai.gov.in.dnd" + "&hl=en")
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get()
                    .select("div[itemprop=softwareVersion]")
                    .first()
                    .ownText();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newVersion;
    }
}

これは、asynctaskからバージョンを取得するための私のコードです

VersionChecker versionChecker = new VersionChecker(); 
try 
{ String appVersionName = BuildConfig.VERSION_NAME; 
String mLatestVersionName = versionChecker.execute().get(); 
if (versionChecker.compareVersionNames(appVersionName, mLatestVersionName) == -1) 
{ 
showAppUpdateDialog(); 
} 
} catch (InterruptedException | ExecutionException e) { 
e.printStackTrace(); 
} 
5

コードを置き換えるだけです

                    .get()
                    .select("div[itemprop=softwareVersion]")
                    .first()
                    .ownText();

以下で:

                   .get()
                   .select(".hAyfc .htlgb")
                   .get(3)
                   .ownText();

それが動作します..!

3
Ketan Patel

GoogleはAPIを「softwareVersion」から「currentVersion」に変更し、「。hAyfc.htlgb」を使用して同じバージョンを取得できます。

以下のコードは機能しません。

latestVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + context.getPackageName() + "&hl=en").timeout(30000) .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") .referrer("http://www.google.com") .get().select("div[itemprop=softwareVersion]").first().ownText();

上記のコードの代わりに、このコードを追加するだけで、正常に機能します。

Document document = Jsoup.connect("https://play.google.com/store/apps/details?id=" + context.getPackageName() + "&hl=en").timeout(30000)
    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6").referrer("http://www.google.com").get();
    if(document != null) {
        if(document.select(".hAyfc .htlgb").get(5) != null) {
            latestVersion = document.select(".hAyfc .htlgb").get(5).ownText();
        } else {
            latestVersion = currentVersion;
        }
    }

Note: There is no official API to get the current application version from Google Play. So use the above code to get the current version. Sometimes get(5).ownText() will change as google is updating the Google Play site. [Previously it was working with get(2).ownText()].
0
BDeveloper

この2行を変更します

_{
 newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + "package name" + "&hl=en")
     .timeout(30000)
     .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
....
_

_BuildConfig.APPLICATION_ID_を使用していますが、_package_name_が必要です

BuildConfigはGradleによって提供されます。 Gradleを使用してビルドしていない場合、BuildConfigを使用してパッケージ名にアクセスすることはできません。

結果はビルドパラメータの定数ではなくオペレーティングシステムから提供されるため、Context.getPackageName()を使用します。

0

この問題は、要素div [itemprop = softwareVersion]がGooglePlayウェブサイトで見つからなくなったために発生します(したがって、バージョン番号を返さなくなりました)。この要素は、ウェブサイトでgoogleが行った変更を加えた新しいクエリにのみ変更する必要があります。

注:構造を再度変更する場合は、このコードを変更する必要があることに注意してください。

お役に立てば幸いです

public class VersionChecker extends AsyncTask<String, String, String> {

    private String newVersion;

    @Override
    protected String doInBackground(String... params) {

        try {
            newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + "trai.gov.in.dnd" + "&hl=en")
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get()
                    .select(".xyOfqd .hAyfc:nth-child(4) .htlgb span")
                    .get(0)
                    .ownText();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newVersion;
    }
}

Codigo Java

VersionChecker versionChecker = new VersionChecker();
try {
    String latestVersion = versionChecker.execute().get();
    String versionName = BuildConfig.VERSION_NAME.replace("-DEBUG","");
    if (latestVersion != null && !latestVersion.isEmpty()) {
        if (!latestVersion.equals(versionName)) {
            showDialogToSendToPlayStore();
        }else{
            continueWithTheLogin();
        }
    }
    Log.d("update", "Current version " + Float.valueOf(versionName) + ", Playstore version " + Float.valueOf(latestVersion));

} catch (InterruptedException e) {
    e.printStackTrace();
} catch (ExecutionException e) {
    e.printStackTrace();
}
0
NayZer

これを試してみてください

コードを置き換えます、

                .get()
                .select("div:containsOwn(Current Version)")
                .next()
                .text();
0

あなたはそれをAsyncTaskに入れる必要があります

 //********* Check for Updated Version of APP
    private class GetVersionCode extends AsyncTask<Void, String, String> {
        String currentVersion = null;

        @Override
        protected String doInBackground(Void... voids) {

            String newVersion = null;

            try {
                currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
                newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + Activity.this.getPackageName() + "&hl=it")
                        .timeout(30000)
                        .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                        .referrer("http://www.google.com")
                        .get()
                        .select("div[itemprop=softwareVersion]")
                        .first()
                        .ownText();
                return newVersion;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String onlineVersion) {
            super.onPostExecute(onlineVersion);
            if (onlineVersion != null && !onlineVersion.isEmpty()) {
                if (!currentVersion.equalsIgnoreCase(onlineVersion)) {
                    //Todo code here

                }
            }
            Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion);
        }
    }
0
Nikunj Peerbits