c# - 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;
}
}
解决方案
如果这是您遵循的文档,我看到它说要显式添加到 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)
{
...
}
推荐阅读
- django - 根据另一个字段中的选择动态填充一个 Django 表单字段
- html - 有没有办法在没有 JS 的情况下以不同的方式设置本地和全局链接的样式?
- signal-processing - 使用 1 个 SDR 源创建 3 个 ZMQ PUB
- reactjs - Framer Motion中退出动画的不同过渡
- python - 只能合并 Series 或 DataFrame 对象,一个
通过了 - api - 用于获取特定警报策略事件的 API
- python - Python3 线程:为什么我只启动了一个线程时有 2 个线程处于活动状态?
- php - PHP数组转换成mysql表
- node.js - 将 typescript 文件导入 nodejs CLI 脚本
- python - 如何在满足无限循环内的elif条件时制作计时器,尽可能轻