如何使用 xamarin 表单从 Play 商店获取应用程序的版本号

neh*_*eha 1 xamarin.android xamarin xamarin.forms google-play-console

我需要检查已安装应用程序和 Playstore 应用程序版本的当前版本。如果不是同一个应用程序应导航到 Playstore 。我使用 xam.Plugin.LatestVersion(2.1.0) 从播放控制台获取应用程序的最新版本号。不幸的是,没有从 Play 商店获取应用程序的最新版本号。我使用下面的代码。

 private async void ChekAppVersion()
      {
          try
          {
               latestVersionNumber = await CrossLatestVersion.Current.GetLatestVersionNumber();
               installedVersionNumber = CrossLatestVersion.Current.InstalledVersionNumber;
              if (installedVersionNumber != latestVersionNumber)
              {
                  await DisplayAlert("New Version", "There is a new version of this app available. Please update now?", "Ok");
                  await CrossLatestVersion.Current.OpenAppInStore();
                  ChekAppVersion();
                                 
              }
              else
              {
                  
              }
          }
          catch (Exception ex)
          {

          }
      }
Run Code Online (Sandbox Code Playgroud)

我正在获取已安装的版本号,但无法获取最新版本号(Playstore)。请帮忙解决这个问题。

Nic*_*sky 5

他们已经删除了版本div,现在用js显示,但数据仍然在标签内<script>。我当前的固定代码是:

    private bool _lockCheckUpdates;

    public async Task<bool> CheckNeedUpdate()
    {
        if (Connectivity.NetworkAccess != NetworkAccess.Internet || _lockCheckUpdates)
            return false;

        _lockCheckUpdates = true;

        try
        {
            HttpClient myClient = CreateClient();

            if (Device.RuntimePlatform == Device.Android)
            {
                var bundle = "com.todo.app"; //ANDROID BUNDLE NAME HERE
                string url = $"https://play.google.com/store/apps/details?id={bundle}&hl=en";
                string raw = await myClient.GetStringAsync(new Uri(url));

                var doc = new HtmlDocument();

                doc.LoadHtml(raw);

                var scripts = doc.DocumentNode.Descendants()
                    .Where(n => n.Name == "script" && n.InnerText.Contains("AF_initDataCallback({key: 'ds:4'"))
                    .ToArray();

                var script = scripts.First().InnerText;

                var engine = new Jurassic.ScriptEngine();
                var eval = "(function() { var AF_initDataCallback = function(p) { return p.data[1][2][140][0][0][0]; };  return " + script + " })()";
                var result = engine.Evaluate(eval);
                //var json = JSONObject.Stringify(engine, result); //for debug, check in browser console with JSON.parse(json) 

                var remote = $"{result}".ToDouble();
                var local = App.Version.ToDouble();
                return local < remote;

            }
            else if (Device.RuntimePlatform == Device.iOS)
            {
                var bundle = "com.todo.app";//iOS BUNDLE NAME HERE
                string url = $"http://itunes.apple.com/lookup?bundleId={bundle}";
                string raw = await myClient.GetStringAsync(new Uri(url));

                var dto = JsonConvert.DeserializeObject<AppStoreRecord>(raw);
                double local = App.Version.ToDouble();
                if (dto.ResultCount > 0)
                {
                    double remote = dto.Results[0].Version.ToDouble();
                    return remote > local;
                }
            }
        }
        catch (Exception e)
        {
            Logger.Error("CheckNeedUpdate", e);
        }
        finally
        {
            _lockCheckUpdates = false;
        }

        return false;

    }
Run Code Online (Sandbox Code Playgroud)

使用金块

Jurassic评估页面上的脚本、 解析HtmlAgilityPackhtml、 Xamarin.Essentials检查我们是否在线AppoMobi.Specials等等.ToDouble()

我希望这也有助于修复https://github.com/edsnider/latestversionplugin/issues/43 :)