【问题标题】:Google playstore app version check not working any moreGoogle Play 商店应用程序版本检查不再起作用
【发布时间】:2018-03-23 03:17:22
【问题描述】:

为了强制更新,我曾经调用应用程序 url 并检查 html 标记值 <softwareVersion><softwareVersion/> 但突然停止工作,页面中没有 softwareVersion 标记,因此为空。是否有任何 google api 可用于检查 google play 应用版本。

更新 -

当我以前调用 url 时,我更详细地调查了响应是 200,但现在我得到了 405

【问题讨论】:

    标签: android google-play google-play-services google-play-developer-api


    【解决方案1】:

    我想出了一个解决方案。每当我在 Playstore 中推送新版本时,我都会在新增功能中添加 version,就像这样 -

    什么是新的

    Version - 2.11.0
    - New changes 1
    - New changes 2
    

    我正在寻找这个版本-

    所以完整的代码看起来像这样 -

    class VersionCheckTask extends AsyncTask<String, Void, String> {
        protected String doInBackground(String... urls) {
            String mVer = "";
            String mData = "";
    
            try {
                URL mUrl = new URL(urls[0]);
                BufferedReader in = new BufferedReader(new InputStreamReader(mUrl.openStream()));
                String inputLine;
                while ((inputLine = in.readLine()) != null){
                    if (inputLine == null)
                        break;
                    mData += inputLine;
                }
                in.close();
            } catch (Exception ex) {
                ex.printStackTrace();
                return null;
            }
    
            /*
            * we are looking for this tag <div itemprop="description"><content>Version - 2.11.0<br>
            * We need to make sure every time we release a new version we should add the line in what's new -
            *
            * Version - 2.11.1
            *
            * - New changes 1
            * - New changes 2
            */
            String startToken = "Version - ";
            String endToken = "<";
            int index = mData.indexOf(startToken);
    
            if (index == -1) {
                mVer = null;
    
            } else {
                mVer = mData.substring(index + startToken.length(), index
                        + startToken.length() + 100);
                mVer = mVer.substring(0, mVer.indexOf(endToken)).trim();
            }
            return mVer;
        }
    
        protected void onPostExecute(String store_version) {
            String currentVersion = "";
            try {
                PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
                currentVersion = pInfo.versionName;
            } catch (PackageManager.NameNotFoundException e) {
                Log.v(TAG, "Recv NameNotFoundException. Msg:" + e.getMessage());
            }
    
            Log.d(TAG, "store_version: " + store_version);
            Log.d(TAG, "device_version: " + currentVersion);
    
            if (store_version != null) {
                if (versionCompare(store_version, currentVersion) > 0) {
                    dialog.setMessage(String.format(getResources().getString(R.string.update_message), getResources().getString(R.string.app_name), store_version));
                    dialog.show();
                } else {
                    showDisclaimer();
                }
            }
        }
    }
    
    public int versionCompare(String storeVersion, String currentVersion) {
        String[] vals1 = storeVersion.split("\\.");
        String[] vals2 = currentVersion.split("\\.");
        int i = 0;
        // set index to first non-equal ordinal or length of shortest version string
        while (i < vals1.length && i < vals2.length && vals1[i].equals(vals2[i])) {
            i++;
        }
        // compare first non-equal ordinal number
        if (i < vals1.length && i < vals2.length) {
            int diff = Integer.valueOf(vals1[i]).compareTo(Integer.valueOf(vals2[i]));
            return Integer.signum(diff);
        }
        // the strings are equal or one string is a substring of the other
        // e.g. "1.2.3" = "1.2.3" or "1.2.3" < "1.2.3.4"
        return Integer.signum(vals1.length - vals2.length);
    }
    

    【讨论】:

      【解决方案2】:

      也许,在 3 月底,Google 更改了 Play 商店的 HTML 代码。

      附加信息的结构也发生了变化。

      包括我在内的一些开发者使用 Jsoup 在 Play 商店中检查最新版本。

      也许你正在使用这样的代码:

          Document doc = Jsoup.connect
      ("https://play.google.com/store/apps/details?id=name.package.your").get();
          Elements Version = doc.select(".content");
          for (Element v : Version) {
              if (v.attr("itemprop").equals("softwareVersion")) {
                  VersionMarket = v.text();
              }
          }
      

      但是,在 play store 更改后,您的代码返回 null。

      因为,“itemprop”和“softrwareVersion”就这样消失了。

      enter image description here

      因此,您需要一种新方法来使用 Jsoup 在 Google Play 商店的 ADDITION INFORMATION 中解析您的应用版本。

      try {
          Document doc = Jsoup
                  .connect(
                          "https://play.google.com/store/apps/details?id=name.package.your")
                  .get();
      
          Elements Version = doc.select(".htlgb ");
      
          for (int i = 0; i < 5 ; i++) {
              VersionMarket = Version.get(i).text();
              if (Pattern.matches("^[0-9]{1}.[0-9]{1}.[0-9]{1}$", VersionMarket)) {
                  break;    
              }
          }
      

      上面的代码工作如下。

      1. 解析 Play 商店的应用页面。
      2. 选择所有“htlgb”内容。

        • 如图片中的“2018 年 3 月 3 日”、“1,000+”、“2.0.4”、“4.4 及更高版本等”
      3. 在 [for Loop] 中,[Regex] 找到与您的版本模式(如 2.0.4)匹配的值并停止。

      4. VersionMarket 是您的“应用版本”,您可以使用它。

      //2018-08-04 添加评论

      由于某种原因,上面的代码返回了有关“安装”的信息,而不是“版本信息”。

      因此,如果你修改如下所示的代码,你可以再次返回“版本信息”。

      try {
          Document doc = Jsoup
                  .connect(
                          "https://play.google.com/store/apps/details?id=name.package.your")
                  .get();
      
          Elements Version = doc.select(".htlgb ");
      
          for (int i = 0; i < 10 ; i++) {
              VersionMarket = Version.get(i).text();
              if (Pattern.matches("^[0-9]{1}.[0-9]{1}.[0-9]{1}$", VersionMarket)) {
                  break;    
              }
          }
      

      以上代码将“for break”中的数字从5改为10。

      因为 Google Play 商店的 HTML 代码中“htlgb”代码的数量发生了变化。

      【讨论】:

      • 很好的分析,但如果 Google 将来更改类名,解决方案将会中断。另一个响应中建议的“Firebase 远程配置”服务可能值得研究。
      【解决方案3】:

      不,不存在用于在 Play 上检查您的应用版本的 API。相反,您可以使用Firebase Remote Config 实施解决方案,然后您可以更好地控制用户看到的最低版本。

      【讨论】:

        猜你喜欢
        • 2015-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-18
        • 2023-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多