在Play商店获取当前应用版本

时间:2018-03-12 19:39:39

标签: android jsoup

我已经实现了代码以在Play商店中获取我的应用程序的当前应用程序版本,因此我可以建议用户在Play商店中有任何新版本时升级应用程序。这段代码工作正常,但现在它无法正常工作。

获取我使用的当前应用版本的代码如下:



newVersion = Jsoup.connect(
    "https://play.google.com/store/apps/details?id=" +
    "<app 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")
  .referrer("http://www.google.com").get()
  .select("div[itemprop=softwareVersion]").first()
  .ownText();
&#13;
&#13;
&#13;

似乎goole play商店网页现在已经更新,我无法找到任何div与itemprops = softwareVersion。我已经检查了我的应用程序的谷歌游戏商店网页的源代码,但它也没有显示当前的应用程序版本。

我得到的例外是:

&#13;
&#13;
Process: com.srsvalutech.theparkking, PID: 25357
java.lang.RuntimeException: An error occured while executing doInBackground()
 at android.os.AsyncTask$3.done(AsyncTask.java:300)
 at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
 at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
 at java.util.concurrent.FutureTask.run(FutureTask.java:242)
 at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
 at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.jsoup.nodes.Element.ownText()' on a null object reference
 at com.srsvalutech.theparkking.view.SplashScreenActivity$GetAppCurrentVersionAsyncTask.doInBackground(SplashScreenActivity.java:124)
 at com.srsvalutech.theparkking.view.SplashScreenActivity$GetAppCurrentVersionAsyncTask.doInBackground(SplashScreenActivity.java:102)
 at android.os.AsyncTask$2.call(AsyncTask.java:288)
 at java.util.concurrent.FutureTask.run(FutureTask.java:237)
 at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
 at java.lang.Thread.run(Thread.java:818) 
&#13;
&#13;
&#13;

有没有其他方法可以在Android中以编程方式在Play商店中获取Android应用程序的当前应用程序版本。

3 个答案:

答案 0 :(得分:2)

我有同样的问题和jppavez的答案来自这个问题: How to get the play store version number for Xamarin Android 为我工作。

只需替换

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

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

编辑: 如果谷歌再次对Play商店的来源进行了更改,请不要忘记捕获RuntimeException以防止您的应用程序崩溃。 例如,结合crashlytics crashreport:

    } catch (RuntimeException e) {
        Crashlytics.logException(e);

答案 1 :(得分:1)

对我们有用的解决方案!

.select("div:containsOwn(Current Version) + div")
                                          .first()
                                          .text(); 

答案 2 :(得分:0)

这个库基于JSoup来解析HTML https://github.com/danielemaddaluno/Android-Update-Checker

你想要的基本实现将是这样的

private boolean web_update(){
    try {       
        String curVersion = applicationContext.getPackageManager().getPackageInfo(package_name, 0).versionName; 
        String newVersion = curVersion;
        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")
                .referrer("http://www.google.com")
                .get()
                .select("div[itemprop=softwareVersion]")
                .first()
                .ownText();
        return (value(curVersion) < value(newVersion)) ? true : false;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

如果您只想验证版本之间的不匹配,可以更改:

带有value(curVersion) < value(newVersion)

value(curVersion) != value(newVersion)

快乐编码