如何从Google Play商店获取Android应用程序的最新版本?

7

问题

我想从Google Play商店获取我的应用程序的最新版本。如果最新版本中有一些更改需要强制升级,我想添加此功能。

现状

我目前正在更新服务器上的最新版本,并强制应用程序请求并检查其版本。这有效。但是,我不想每次发布新版本时都在服务器上进行更新。我希望应用程序能够从Google Play商店中获取相同的信息。

需求

我可以处理客户端(应用程序)的逻辑。我所需要的只是调用API以获取Playstore中自己应用程序的最新生产版本。如果有人能够为我提供一些指针,那将非常有帮助。


检查 这个 是否仍然可用。如果是,则无需进行任何 API 调用。 - Siddharth Lele
@IceMAN:看起来不错。但我仍然更喜欢更轻量级的东西。这就是为什么我想知道,是否可以调用Playstore的API并自己获取数据。 - Rohitesh
@IceMAN:所以,我查看了代码,他们也在从Playstore上的应用程序网页中进行抓取。这是我最初的想法,但我认为这不是一个非常优雅的解决方案。因此,我想知道是否有API可用。 - Rohitesh
据我所知,目前没有官方API。过去我见过的大多数库都是通过网站爬取数据。据我所知,要么自己爬取数据,要么使用该库(如果它仍然有效),并节省编写代码的时间。或者,如果您的现有系统不太麻烦,可以继续使用它。 - Siddharth Lele
@IceMAN:目前我正在自己爬取数据!非常感谢你指引我正确的方向! :) - Rohitesh
3
可能是 query the google play store for the version of an app? 的重复问题。 - Vipul Asri
2个回答

4

1

有一个技巧可以用来获取当前Play Store版本。

public void getUpdate() {
        final String appPackageName = getPackageName();
        Document doc = null;
        try {
            doc = Jsoup.connect("https://play.google.com/store/apps/details?id=" + appPackageName).get();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // Document doc = Jsoup.parse(resString);
        if(doc!=null) {
            Element meta = doc.select("div[itemprop=softwareVersion]").first();
            String content = meta.ownText();
            System.out.println(content);
            Double playStoreVersion = Double.valueOf(content);
            Double currentVersion = getVersionName();
            if (playStoreVersion > currentVersion) {
                try {
                    new AlertDialog.Builder(SplashScreen.this)
                            .setTitle("Alert")
                            .setMessage("Update Is Available.Do You Want To Update?")
                            .setIcon(R.mipmap.ic_launcher)
                            .setCancelable(false)
                            .setPositiveButton("Update",
                                    new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog,
                                                            int id) {
                                            try {
                                                startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)), UPDATE_FROM_PLAY_STORE_REQUEST);

                                            } catch (Exception e) {
                                                try {
                                                    startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)), UPDATE_FROM_PLAY_STORE_REQUEST);
                                                } catch (Exception e1) {

                                                }
                                            }
                                            dialog.dismiss();
                                        }
                                    }).setNegativeButton("Not yet", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            dialogInterface.dismiss();
                            Handler();

                        }
                    }).show();
                    //startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
                } catch (android.content.ActivityNotFoundException anfe) {
                    try {
                        startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)), UPDATE_FROM_PLAY_STORE_REQUEST);
                    } catch (Exception e) {
                    }
                }
            } else {
                Handler();
            }
        }else {
            Handler();
        }
}

获取我们自己应用的版本号。
public Double getVersionName() {
    Double VersionName = 0.0;
    try {
        String vName = SplashScreen.this.getPackageManager().getPackageInfo(SplashScreen.this.getPackageName(), 0).versionName;
        VersionName = Double.valueOf(vName);

    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return VersionName;
}

这是一个很好的解决方法@ChandraShekhar!但它仍然从playstore列表中抓取数据。这就是我目前正在做的事情。但我曾经问过是否有任何API可用于此。抓取数据绝不是一个好主意,因为即使playstore列表的HTML发生微小变化,逻辑也会被破坏。 - Rohitesh
1
不,目前没有官方API可以从Play商店获取应用程序版本。 - ChandraShekhar Kaushik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接