强制用户更新到最新版本

时间:2018-07-11 05:02:08

标签: c# xamarin.forms xamarin.ios xamarin.android app-update

我在Play和App Store中发布了一个应用,现在我正在为Play(Android)和App Store(iOS)发布该应用的新版本。现在,我希望所有用户在使用应用程序时都将其更新为新版本,并且不允许他们继续使用旧版本的应用程序而不更新为新版本。

有人能建议我如何在Play和App Store中发布该应用程序后,如何迫使用户将其更新为最新版本吗?

4 个答案:

答案 0 :(得分:1)

我们必须在Play和App商店中停止旧版本。

为了将来不要停止(如果我们有主机,我们应该拥有它:)):

  • 以某种方式将版本保存在服务器端
  • 每次需要时检查当前版本: getPackageManager()。getPackageInfo(getPackageName(),0).versionCode ,其中包含服务器版本,并根据需要强制进行更新。

祝你好运

答案 1 :(得分:1)

我不知道这是不是专业的方法,但这就是我的想法。

在App.cs或Mainpage.cs中添加具有该应用版本的变量,并添加具有当前版本作为响应的API。

现在检查应用程序的版本和当前版本,然后重定向到主页/其他任何页面。

var version = 1.0;
var currentversion = 2.0; /* from API */
if(version == currentversion)
{
  Navigation.PushModalAsync(new HomePage());
}
else
{
  Navigation.PushModalAsync(new UpdatePage());
}

答案 2 :(得分:1)

我的应用程序运行状况如何,当应用程序在MyActivity中启动时,我下面有代码

private void CompareVersion()
{
    double currentVersion = 0d;
    double appStoreversion =Convert.ToDouble(CosntValues.PlayStoreValues);
    bool IsUpdateRequired = false;

    if (Context.PackageName != null)
    {
        PackageInfo info = Context.PackageManager.GetPackageInfo(Context.PackageName, PackageInfoFlags.Activities);
        string currentVersionStrig = info.VersionName;
        currentVersion = Convert.ToDouble(currentVersionStrig);
    }
    try
    {
        if (IsUpdateRequired == false)
        {
            if (CheckNetConnection.IsNetConnected())
            {
                using (var webClient = new System.Net.WebClient())
                {
                    var task = new VersionChecker();
                    task.Execute();
                    if ((appStoreversion.ToString() != currentVersion.ToString() && (appStoreversion > currentVersion)))
                    {
                        IsUpdateRequired = true;
                    }
                }
            }
        }
        if (IsUpdateRequired)
        {
            Activity.RunOnUiThread(() =>
            {
                AlertDialog dialog = null;
                var Alertdialog = new Android.App.AlertDialog.Builder(Context);
                Alertdialog.SetTitle("Update Available");
                Alertdialog.SetMessage($"A new version of [" + appStoreversion + "] is available. Please update to version [" + appStoreversion + "] now.");
                Alertdialog.SetNegativeButton("Cancel", (sender, e) =>
                {
                    if (dialog == null)
                    {
                        dialog = Alertdialog.Create();
                    }
                    dialog.Dismiss();
                });
                Alertdialog.SetPositiveButton("Update", async (sender, e) =>
                {
                    string appPackage = string.Empty;
                    try
                    {
                        appPackage = Application.Context.PackageName;
                        await Utilities.Logout(this.Activity);
                        var ints = new Intent(Intent.ActionView, Android.Net.Uri.Parse("market://details?id=" + appPackage));
                        ints.SetFlags(ActivityFlags.ClearTop);
                        ints.SetFlags(ActivityFlags.NoAnimation);
                        ints.SetFlags(ActivityFlags.NewTask);
                        Application.Context.StartActivity(ints);
                        //StartActivity(new Intent(Intent.ActionView, Android.Net.Uri.Parse("market://details?id=" + "com.sisapp.in.sisapp")));
                    }
                    catch (ActivityNotFoundException)
                    {
                        var apppack = Application.Context.PackageName;
                        //Default to the the actual web page in case google play store app is not installed
                        //StartActivity(new Intent(Intent.ActionView, Android.Net.Uri.Parse("https://play.google.com/store/apps/details?id=" + "com.app.in.app")));
                        await Utilities.Logout(this.Activity);
                        var ints = new Intent(Intent.ActionView, Android.Net.Uri.Parse("market://details?id=" + appPackage));
                        ints.SetFlags(ActivityFlags.ClearTop);
                        ints.SetFlags(ActivityFlags.NoAnimation);
                        ints.SetFlags(ActivityFlags.NewTask);
                        Application.Context.StartActivity(ints);
                    }
                    //this kills the app 
                    Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
                    System.Environment.Exit(1);
                });
                if (dialog == null)
                    dialog = Alertdialog.Create();
                dialog.Show();
            });
        }
    }
    catch (Exception ex)
    {
        var objLog = new LogService();
        objLog.MobileLog(ex, SISConst.UserName);
    }
}

后面是上面使用的两个单独的类

public class VersionChecker : AsyncTask
{
    protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] @params)
    {
        var val1 = Jsoup.Connect("https://play.google.com/store/apps/details?id=" + "com.app.in.app" + "&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();
        var val2 = val1.Select(".htlgb");
        var val3 = val2.Get(7).ToString();
        //here mobile app version is of 3 values like 2.1, 4.2 etc
        var version = val3.Substring(val3.IndexOf(">") + 1, 3); //fetching only 3 values ex 1.1
        CosntValues.PlayStoreValues = version;
        return version;
    }
}
public static class CosntValues
{
    public static string PlayStoreValues { get; set; }
}

免责声明:使用您的应用包名称,以上代码静态支持1.1、1.2等3位数版本。 希望对您有帮助

答案 3 :(得分:0)

使用 this 插件,我找到了一个很好的解决方案,并且在生产环境中完美运行。我强烈推荐这个插件。使用此解决方案,您甚至可以让用户直接从您的应用前往商店

例如:

var isLatest = await CrossLatestVersion.Current.IsUsingLatestVersion();

        if (!isLatest) //If the user does not have the last version
        {
            var update = await DisplayAlert("New version available", "There is a new version of our app. Would you like to download it?", "Yes", "No");

            if (update) 
            {
                //Open the store
                await CrossLatestVersion.Current.OpenAppInStore();
            }
        }