对于强制更新,我曾经调用app url并检查html标记值<softwareVersion><softwareVersion/>
,但突然停止工作,页面中没有softwareVersion标记,因此变为null。是否有谷歌API可用于检查谷歌播放应用程序版本。
更新 -
我调查了更多细节时,我曾经打电话给网址,回复是200但现在我得到了405
答案 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;就这样消失了。
因此,您需要一种新的方式来解析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;
}
}
以上代码的工作原理如下。
选择所有&#34; htlgb&#34;内容。
在[for循环]中,[Regex]找到与您的版本模式匹配的值(如2.0.4)并停止。
// 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实施解决方案,然后您可以更好地控制用户看到的最低版本。