Xamarin中的移动警报插件


在本文中,我们将介绍Xamarin.Forms中的移动警报。对于任何移动应用程序,与用户、客户端或产品所有者一起定义您是否将在敏捷环境(Scrum)中工作,并针对Android或iOS进行定义,这一点很重要。即使我们将致力于单个共享项目,我们也需要知道每个环境在本机应用程序中可以提供什么。

敬酒

这是一个简单的插件,名为Toasts.Forms.Plugin,我们可以在一个名为Xamarin.Forms的项目中使用。我建议从它开始,因为它类似于原生Toast或通知API,特别是对于iOS开发人员。通知放置在中心内联以靠近本地平台,在设计上做了一些更改,并且允许开发人员执行声音和徽章。

本地环境中的通知

iOS使用UNNotificationRequest对象来管理通知。

Android使用

  • Snackbar,它显示一条简单的消息,并在一定时间跨度后消失。

  • Notification.Builder(如果我们至少使用棒棒糖版本),您可以在其中设置标题和图标。

  • UWP/WinRT使用ToastNotification它包括文本或图像。

如何使用插件

我们从Visual Studio 2017中的NuGet Package Manager控制台为每个平台添加此插件,甚至包括您的便携库,因为它使用依赖项服务。

 Install-Package Toasts.Forms.Plugin -Version 3.3.2 

或者,我们只需在Nuget Package Manager中打开搜索Toasts.Forms.Plugin,然后单击“Install”。

正如GitHub项目描述中提到的,我们需要在每个平台(Android或iOS或UWP/WinRT)上注册依赖项。

因此,对于每个项目,我们将在MainActivity.cs或MainPage.cs中添加这些引用:

using Xamarin.Forms;  
using Plugin.Toasts; 

我们对其他平台也是这样做的。

对于Android,在MainActivity.OnCreate的末尾会添加以下代码,以注册并初始化依赖:

DependencyService.Register<ToastNotification>();
ToastNotification.Init(this);

对于iOS,我们需要添加一个请求权限才能显示通知:

// Request Permissions
if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
{
    // Request Permissions
    UNUserNotificationCenter.Current.RequestAuthorization(UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound, (granted, error) =>
    {
// Deal with the problem
    });
}
else if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
{
    var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(
    UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null);
    app.RegisterUserNotificationSettings(notificationSettings);
}

现在,我们可以在应用程序的任何位置调用通知。例如,让我们返回到Portable Project的主页,开始一个简单的示例。

我们首先定义通知选项,如标题、描述,这是接口INotificationOptions:

public interface INotificationOptions
{
    string Title { get; }
    string Description { get; }
    bool IsClickable { get; }
    // Platform Specific Options
    IWindowsOptions WindowsOptions { get; }
    IAndroidOptions AndroidOptions { get; }
    IiOSOptions iOSOptions { get; }
}



让我们开始吧:


var options = new NotificationOptions()
{
    Title = "Display notifications",
    Description = "Some Description related to this title….",
    IsClickable = false // Set to true if you need the result Clicked to come back (if the user clicks it)
};
// Use dependency service in order to resolve IToastNotificator.
var notification = DependencyService.Get<IToastNotificator>();
var result = await notification.Notify(options);

结果将返回NotificationResult,其中Action具有下列值之一:

[Flags]
public enum NotificationAction
{
    Timeout = 1, // Hides by itself
    Clicked = 2, // User clicked on notification
    Dismissed = 4, // User manually dismissed notification
    ApplicationHidden = 8, // Application went to background
    Failed = 16 // When failed to display the toast
}

或者我们以这种方式调用设备:

void ToastMessage(String title, String description)
{
    Device.BeginInvokeOnMainThread(async () =>
    {
        var notifier = DependencyService.Get<IToastNotificator>();
        var options = new NotificationOptions()
        {
            Title = title,
            Description = description
        };
        var result = await notifier.Notify(options);
    });
}

DisplayAlert

DisplayAlert是一个弹出式窗口;它与其他通知窗口不同,因为我们在Alert中有按钮(OK或Yes/No)。

这是一个示例:

DisplayAlert ("Alert!", "This is my first Alert", "OK");

或者

var answer = await DisplayAlert ("First question", "Do you know notifications in Xamarin", "Yes", "No");
Debug.WriteLine ("Answer: " + answer);

你可以找到一个完整的样品here

用户对话框

我使用插件Acr.UserDialogs艾伦·里奇写的。这是一种与Toast和Alert不同设计弹出式链接的新使用方式。正如GitHub文档中提到的,它允许开发人员“调用来自共享/可移植库、动作表、警报、确认、加载、登录、进度、提示、吐司的标准用户对话框。”

在这段视频中,我将解释如何集成Acr.UserDialog插件。


简单的方式:原生的

this article,作者解释了如何在Android环境中使用a component在纯模式下。GitHub是here