Как я могу получить последнюю версию приложения для Android в магазине Google Play? Раньше для этого использовали приведенный ниже код
using (var webClient = new System.Net.WebClient())
{
var searchString = "itemprop=\"softwareVersion\">";
var endString = "</";
//possible network error if phone gets disconnected
string jsonString = webClient.DownloadString(PlayStoreUrl);
var pos = jsonString.IndexOf(searchString, StringComparison.InvariantCultureIgnoreCase) + searchString.Length;
var endPos = jsonString.IndexOf(endString, pos, StringComparison.Ordinal);
appStoreversion = Convert.ToDouble(jsonString.Substring(pos, endPos - pos).Trim());
System.Diagnostics.Debug.WriteLine($"{currentVersion} :: {appStoreversion}");
System.Diagnostics.Debug.WriteLine($"{appStoreversion > currentVersion}");
if ((appStoreversion.ToString() != currentVersion.ToString() && (appStoreversion > currentVersion)))
{
IsUpdateRequired = true;
}
}
и код ниже даже генерирует исключение
var document =
Jsoup.Connect("https://play.google.com/store/apps/details?id = " + "com.spp.in.spp" + "&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();
Eception:
Android.OS.NetworkOnMainThreadException: Exception of type 'Android.OS.NetworkOnMainThreadException' was thrown. at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
Но теперь магазин Play, похоже, изменил несколько условий, поэтому существующая функциональность нарушена. Здесь уже доступно несколько подобных тем, но они, похоже, устарели.
Вам нужно запустить его в фоновом потоке.





На основе этого ссылка на сайт это исключение выдается, когда приложение пытается выполнить сетевую операцию в своем основном потоке. Вы можете сослаться на этот нить, в котором говорится, что сетевые операции на Android должны выполняться вне основного потока пользовательского интерфейса. Самый простой способ - использовать Task, чтобы протолкнуть его в поток в пуле потоков по умолчанию.
Это вернет строковую версию, по крайней мере, до тех пор, пока Google снова не изменит содержимое html-страницы.
var version = await Task.Run(async () =>
{
var uri = new Uri($"https://play.google.com/store/apps/details?id = {PackageName}&hl=en");
using (var client = new HttpClient())
using (var request = new HttpRequestMessage(HttpMethod.Get, uri))
{
request.Headers.TryAddWithoutValidation("Accept", "text/html");
request.Headers.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
request.Headers.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");
using (var response = await client.SendAsync(request).ConfigureAwait(false))
{
try
{
response.EnsureSuccessStatusCode();
var responseHTML = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
var rx = new Regex(@"(?< = ""htlgb"">)(\d{1,3}\.\d{1,3}\.{0,1}\d{0,3})(?=</span>)", RegexOptions.Compiled);
MatchCollection matches = rx.Matches(responseHTML);
return matches.Count > 0 ? matches[0].Value : "Unknown";
}
catch
{
return "Error";
}
}
}
}
);
Console.WriteLine(version);
@ CGPA6.4 См. Мое обновление регулярного выражения, теперь оно должно соответствовать многосимвольным форматам xxx.xxx и xxx.xxx.xxx.
@ CGPA6.4 Рад, что помог