Xamarin.Forms中跨平台通知实现指南

在敏捷开发环境中,无论是与用户、客户还是产品所有者合作,明确每个平台能够提供的原生应用功能都是非常重要的。本文将介绍如何在Xamarin.Forms项目中实现跨平台通知功能,包括iOS、Android和UWP/WinRT平台的原生通知处理方法。

要实现本文中的功能,需要具备以下背景知识:

  • Xamarin.Forms
  • Visual Studio 2017

Toast插件介绍

Toasts.Forms.Plugin是一个简单的插件,可以在Xamarin.Forms项目中使用。对于iOS开发者来说,它与原生Toast或通知API非常相似。

在原生环境中,iOS使用UNNotificationRequest对象来管理通知,而Android则使用Snackbar来显示简单的消息并在一段时间后消失。对于UWP/WinRT,它使用ToastNotification,可以包含文本或图像。

如何在项目中使用插件

可以通过Visual Studio 2017的NuGet包管理器控制台为每个平台安装此插件,包括可移植库,因为它使用依赖服务。

安装命令如下:

Install-Package Toasts.Forms.Plugin -Version 3.3.2

或者,可以在Nuget包管理器中搜索Toasts.Forms.Plugin并点击安装。

根据项目GitHub描述,需要在每个平台(Android、iOS或UWP/WinRT)注册依赖项。

注册依赖项

对于每个项目,需要在MainActivity.cs或MainPage.cs中添加以下引用:

using Xamarin.Forms; using Plugin.Toasts;

对于Android,此代码将添加到MainActivity.OnCreate的末尾,以注册依赖项并初始化它:

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

对于iOS,需要添加请求权限以显示通知

if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0)) { UNUserNotificationCenter.Current.RequestAuthorization(UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound, (granted, error) => { // 处理问题 }); } else if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) { var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null); app.RegisterUserNotificationSettings(notificationSettings); }

定义通知选项

现在,可以在应用程序的任何地方调用通知。首先,定义通知选项,如标题、描述,这是INotificationOptions接口:

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

接下来,定义一个NotificationOptions实例:

var options = new NotificationOptions() { Title = "显示通知", Description = "与此标题相关的一些描述...", IsClickable = false // 如果需要结果点击返回,请设置为true(如果用户点击它) };

使用依赖服务来解析IToastNotificator:

var notification = DependencyService.Get(); var result = await notification.Notify(options);

结果将返回一个NotificationResult,其中包含一个Action,具有以下值之一:

[Flags] public enum NotificationAction { Timeout = 1, // 隐藏自身 Clicked = 2, // 用户点击通知 Dismissed = 4, // 用户手动关闭通知 ApplicationHidden = 8, // 应用程序进入后台 Failed = 16 // 显示Toast失败 }

显示警告框

警告框是一个弹出窗口,与通知不同,因为它有一个按钮(确定或确定/取消)。

示例:

DisplayAlert("警告!", "这是第一个警告", "确定");

或者:

var answer = await DisplayAlert("第一个问题", "知道通知在Xamarin中吗?", "是", "否"); Debug.WriteLine("答案: " + answer);

用户对话框插件

使用了Acr.UserDialogs插件,由Allan Ritchie开发。它是一种新的方式来使用弹出窗口,与Toast和Alert的设计有所不同。

GitHub文档中提到,它允许开发者“从共享/可移植库调用标准用户对话框,包括操作表、警告、确认、加载、登录、进度、提示、Toast”。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485