Google Playstore应用版本检查不再有效

时间:2018-03-23 03:17:23

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

对于强制更新,我曾经调用app url并检查html标记值<softwareVersion><softwareVersion/>,但突然停止工作,页面中没有softwareVersion标记,因此变为null。是否有谷歌API可用于检查谷歌播放应用程序版本。

更新 -

我调查了更多细节时,我曾经打电话给网址,回复是200但现在我得到了405

3 个答案:

答案 0 :(得分:2)

我想出了一个解决方案。当我在Play商店推新版本时,我会在新版本中添加版本,就像这样 -

  

什么是新的

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);
}

答案 1 :(得分:2)

也许,在3月底,谷歌改变了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商店更改后,您的代码将返回null。

因为,&#34; itemprop&#34;和&#34; sofrwareVersion&#34;就这样消失了。

enter image description here

因此,您需要一种新的方式来解析Google Play商店中使用Jsoup的附加信息中的应用版本。

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. 解析游戏商店的应用页面。
  2. 选择所有&#34; htlgb&#34;内容。

    • 喜欢图片,&#34; 2018年3月3日&#34;,&#34; 1,000 +&#34; &#34; 2.0.4&#34;,&#34; 4.4及以上等&#34;
  3. 在[for循环]中,[Regex]找到与您的版本模式匹配的值(如2.0.4)并停止。

  4. VersionMarket是您的应用版本&#34;并且你可以使用它。
  5. // 2018-08-04添加评论

    出于某种原因,上面的代码返回有关&#34; Installs&#34;的信息。而不是&#34;版本信息&#34;。

    因此,如果您修改如下所示的代码,则可以返回&#34;版本信息&#34;试。

    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;    
            }
        }
    

    以上代码更改了&#34;中的数字&#34; for break&#34;从5到10。

    因为&#34; htlgb&#34;代码在Google Play商店的HTML代码中已更改。

答案 2 :(得分:0)

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