c# - 从 Play 商店 xamarin 获取最新的应用程序版本

标签 c# android xamarin xamarin.android google-play-services

如何从 Google Play 商店获取最新的 Android 应用程序版本?早些时候使用下面的代码来这样做

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

欺骗:

Android.OS.NetworkOnMainThreadException: Exception of type 'Android.OS.NetworkOnMainThreadException' was thrown. at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()

但现在 Play 商店似乎改变了一些条件,因此现有功能被分解了。此处几乎没有类似的主题,但这些主题似乎已经过时。

最佳答案

这将返回一个基于字符串的版本,至少在 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);

关于c# - 从 Play 商店 xamarin 获取最新的应用程序版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51241855/

相关文章:

c# - 如何在不更改查询的情况下对条形图进行排序?

android - 退出应用程序时未保存 SharedPreferences

java - 无法在 Android 上的 Xamarin 中使用 PayPal SDK 找到明确的 Activity 类付款 Activity

android - 如果没有该屏幕密度的资源,屏幕上会发生什么?

android - 访问安卓解锁屏幕

android - 使用 XA_HTTP_CLIENT_HANDLER_TYPE 在 AndroidEnvironment 设置中部署应用程序

android - 无法使用oauth登录到Facebook

c# - Android Compass 不指向北方并不断变化

c# - 如何使用全局 Hook 确定按下的键的主机应用程序?

c# - 我可以更改用于 ODataController 请求的 ODataQueryOptions 吗?