【问题标题】:Application update notifier in Visual Studio App CenterVisual Studio App Center 中的应用程序更新通知程序
【发布时间】:2019-02-07 01:37:09
【问题描述】:

我正在使用 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# xamarin xamarin.forms visual-studio-app-center


    【解决方案1】:

    如果您关注了this is the document,我看到的唯一要明确添加到 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));  
    

    然后,在 this section 中,它谈到了自定义更新对话框,它说:

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

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

    所以,根据上述Distribute.ReleaseAvailable = OnReleaseAvailable; 必须被称为之前 AppCenter.Start。你在之后调用它。

    当您发布问题时也不确定这是否只是格式错误,但看起来您正在 OnStart() 方法中实现 OnReleaseAvailable 方法,这在 C# 中是不合法的(或者直到 C# 7无论如何,我刚刚意识到......很酷)。因此,除非您使用 C# 7,否则您将希望在 OnStart() 或任何其他方法之外实现 OnReleaseAvailable 方法。 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)
    {
         ... 
    }
    

    【讨论】:

    • 我应该把 OnReleaseAvailable 放在哪里?
    • 与 OnStart() 同级;我会更新答案。
    • 我还需要做什么才能使其正常工作?
    • 据我所见,应该就是这样。再次查看文档,看看是否还有其他您可能误解的内容。
    • Customize or localize text 中的部分怎么样,我真的不明白它的用法
    猜你喜欢
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多