Xamarin.Forms 弹出 "New Version Available"

Xamarin.Forms popup "New Version Available"

我正在研究 Xamarin.forms Android 项目,我正在搜索以显示用户的弹出窗口:

New Version Available

当用户尝试打开应用程序并且 play-store 上有可用的新更新时。

我认为最简单的方法是在您自己的服务器上拥有一个 returns 当前版本号的网络服务,不幸的是,您每次在商店中更新应用程序时都需要更新此版本号.

private class GetVersionCode extends AsyncTask<Void, String, String> {
    @Override
    protected String doInBackground(Void... voids) {

        String newVersion = null;
        try {
            newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + SplashActivity.this.getPackageName() + "&hl=it")
                    .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()
                    .select("div[itemprop=softwareVersion]")
                    .first()
                    .ownText();
             return newVersion;
        } catch (Exception e) {
            return newVersion;
        }
    }

    @Override
    protected void onPostExecute(String onlineVersion) {
        super.onPostExecute(onlineVersion);
        String currentVersion = null;
        try {
            currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        if (onlineVersion != null && !onlineVersion.isEmpty()) {
            if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) {

                    final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(SplashActivity.this);
                    alertDialogBuilder.setTitle("Product Update");
                    alertDialogBuilder.setMessage("A new version is available. Would you like to Upgrade now? (Current: "+currentVersion+" Latest: "+onlineVersion+")");
                    alertDialogBuilder.setPositiveButton("ok",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface arg0, int arg1) {
                                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+SplashActivity.this.getPackageName())));
                                }
                            });

                    alertDialogBuilder.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            alertDialogBuilder.setCancelable(true);
                            finish();
                            loginUserCheck();
                        }
                    });

                    AlertDialog alertDialog = alertDialogBuilder.create();
                    alertDialog.show();
             }

在 GitHub Gist 帐户中创建一个包含最新版本号的文本文件。

获取原始数据URL

字符串url = "https://gist.githubusercontent.com/YOUR_ACCOUNT_NAME/0df1fa45aa11753de0a85893448b22de/raw/UpdateInfo.txt";

private static async Task<string> GetLatestVersion(string URL)
    {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(URL));
        request.ContentType = "application/json"; //i am using a json file 
        request.Method = "GET";
        request.Timeout = 20000;
        // Send the request to the server and wait for the response:
        try
        {
            using (WebResponse response = await request.GetResponseAsync())
            {
                // Get a stream representation of the HTTP web response:
                using (Stream stream = response.GetResponseStream())
                {                    
                    StreamReader reader = new StreamReader(stream);
                    return reader.ReadToEnd();
                }
            }
        }
        catch (Exception ex)
        {
            return string.Empty;
        }
    }

这将 returns 您应用的最新版本。并检查 activity

中的现有应用程序版本
var versionName = Application.Context.ApplicationContext.PackageManager.GetPackageInfo(Application.Context.ApplicationContext.PackageName, 0).VersionName;
        var currentVer = double.Parse(versionName);

但是每次在 Play 商店中更新应用程序时都必须更新此版本号。