首页 > 解决方案 > Visual Studio App Center 中的应用程序更新通知程序

问题描述

我正在使用 Visual Studio 应用程序中心来分发我的应用程序,问题是我需要在我的应用程序有更新时通知我的通讯组并强制它们更新,以便我的所有通讯组都将拥有最新版本。下面的代码是我从 Microsoft 网站获得的,并将其放在我的App.xaml.cs中的OnStart()下。问题是新版本的通知未显示或通知我的通讯组。

protected override void OnStart ()
{
    AppCenter.Start("android=<appsecret>;", typeof(Analytics), typeof(Crashes), typeof(Distribute));
    Analytics.SetEnabledAsync(true);

    Distribute.ReleaseAvailable = OnReleaseAvailable;

    bool OnReleaseAvailable(ReleaseDetails releaseDetails)
    {
        string versionName = releaseDetails.ShortVersion;
        string versionCodeOrBuildNumber = releaseDetails.Version;
        string releaseNotes = releaseDetails.ReleaseNotes;
        Uri releaseNotesUrl = releaseDetails.ReleaseNotesUrl;

        var title = "Version " + versionName + " available!";
        Task answer;

        if (releaseDetails.MandatoryUpdate)
        {
           answer = Current.MainPage.DisplayAlert(title, releaseNotes, "Download and Install");
        }
        else
        {
           answer = Current.MainPage.DisplayAlert(title, releaseNotes, "Download and Install", "Ask Later");
        }
        answer.ContinueWith((task) =>
        {
           if (releaseDetails.MandatoryUpdate || (task as Task<bool>).Result)
           {
               Distribute.NotifyUpdateAction(UpdateAction.Update);
           }
           else
           {
               Distribute.NotifyUpdateAction(UpdateAction.Postpone);
           }
       });

        return true;
      }
 }

标签: c#xamarinxamarin.formsvisual-studio-app-center

解决方案


如果这是您遵循的文档,我看到它说要显式添加到 OnStart() 方法的唯一内容是AppCenter.Start(...)方法调用:

在共享或可移植项目中打开 App.xaml.cs(或从 Xamarin.Forms.Application 继承的类),并在 OnStart() 覆盖方法中添加以下方法。

AppCenter.Start("ios={Your Xamarin iOS App Secret};android={Your Xamarin Android App secret}", typeof(Distribute));  

稍后,在本节中,它讨论了自定义更新对话框,其中说:

ReleaseAvailable您可以通过实现回调来自定义默认更新对话框的外观。您需要在调用之前注册回调,如下AppCenter.Start例所示:

Distribute.ReleaseAvailable = OnReleaseAvailable;
AppCenter.Start(...);

所以,根据上面的方法必须Distribute.ReleaseAvailable = OnReleaseAvailable;调用。你在之后调用它。 AppCenter.Start

也不确定当您发布问题时这是否只是格式错误,但看起来您正在OnReleaseAvailable方法内部实现该OnStart()方法,这在 C# 中是不合法的(或者直到 C# 7 才合法,我刚刚意识到......凉爽的)。因此,除非您使用 C# 7,否则您将希望在或任何其他OnReleaseAvailable方法之外实现该方法。OnStart()IOW 它应该作为类的直接成员来实现。例如:

protected override void OnStart ()
{
    Distribute.ReleaseAvailable = OnReleaseAvailable;
    AppCenter.Start("android=<appsecret>;", typeof(Analytics), typeof(Crashes), typeof(Distribute));
    Analytics.SetEnabledAsync(true);
}

bool OnReleaseAvailable(ReleaseDetails releaseDetails)
{
     ... 
}

推荐阅读