MASA Framework 事件总线 - 跨进程事件总线

概述

跨进程事件总线允许发布和订阅跨服务传输的消息, 服务的发布与订阅不在同一个进程中

在Masa Framework中, 跨进程总线事件提供了一个可以被开箱即用的程序

入门

跨进程事件与Dapr并不是强绑定的, Masa Framework使用了Dapr提供的pub/sub的能力, 如果你不想使用它, 你也可以更换为其它实现, 但目前Masa Framwork中仅提供了Dapr的实现

  1. 新建ASP.NET Core 空项目Assignment.IntegrationEventBus,并安装Masa.Contrib.Dispatcher.IntegrationEvents.Dapr、Masa.Contrib.Dispatcher.IntegrationEvents.EventLogs.EFCore、Masa.Contrib.Data.EFCore.Sqlite、Masa.Contrib.Data.UoW.EFCore、Masa.Contrib.Development.DaprStarter.AspNetCore、Microsoft.EntityFrameworkCore.Design
dotnet new web -o Assignment.IntegrationEventBus
cd Assignment.IntegrationEventBus

dotnet add package Masa.Contrib.Dispatcher.IntegrationEvents.Dapr --version 0.7.0-preview.8 // 使用dapr提供的pubsub能力
dotnet add package Masa.Contrib.Dispatcher.IntegrationEvents.EventLogs.EFCore --version 0.7.0-preview.8 //本地消息表
dotnet add package Masa.Contrib.Data.EFCore.Sqlite --version 0.7.0-preview.8 //使用EfCore.Sqlite
dotnet add package Masa.Contrib.Data.UoW.EFCore --version 0.7.0-preview.8 //使用工作单元
dotnet add package Masa.Contrib.Development.DaprStarter.AspNetCore --version 0.7.0-preview.8 //开发环境使用DaprStarter协助管理Dapr Sidecar
dotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0.6 //方便后续通过CodeFirst迁移数据库
  1. 新建用户上下文类UserDbContext,并继承MasaDbContext
public class UserDbContext : MasaDbContext
{
    public UserDbContext(MasaDbContextOptions<UserDbContext> options) : base(options)
    {
    }
}
  1. 注册DaprStarter, 协助管理Dapr Sidecar, 修改Program.cs
if (builder.Environment.IsDevelopment())
{
    builder.Services.AddDaprStarter();
}

通过Dapr发布集成事件需要运行Dapr, 线上环境可通过Kubernetes来运行, 开发环境可借助Dapr Starter运行Dapr, 因此仅需要在开发环境使用它

  1. 注册跨进程事件总线,修改类Program
builder.Services.AddIntegrationEventBus(option =>
{
    option.UseDapr()
        .UseEventLog<UserDbContext>()
        .UseUoW<UserDbContext>(optionBuilder => optionBuilder.UseSqlite($"Data Source=./Db/{Guid.NewGuid():N}.db;"));
});
var app = builder.Build();

#region dapr 订阅集成事件使用
app.UseRouting();

app.UseCloudEvents();
app.UseEndpoints(endpoints =>
{
    endpoints.MapSubscribeHandler();
});
#endregion
  1. 新增用户注册事件的集成事件 RegisterUserEvent
public record RegisterUserEvent : IntegrationEvent
{
    public override string Topic { get; set; } = nameof(RegisterUserEvent);

    public string Account { get; set; }

    public string Mobile { get; set; }
}
  1. 打开Assignment.IntegrationEventBus所在文件夹,打开cmd或Powershell执行
dotnet ef migrations add init //创建迁移
dotnet ef database update //更新数据库
  1. 发送跨进程事件,修改Program
app.MapPost("/register", async (IIntegrationEventBus eventBus) =>
{
    //todo: 模拟注册用户并发布注册用户事件
    await eventBus.PublishAsync(new RegisterUserEvent()
    {
        Account = "Tom",
        Mobile = "19999999999"
    });
});
  1. 订阅事件,修改Program
app.MapPost("/IntegrationEvent/RegisterUser", [Topic("pubsub", nameof(RegisterUserEvent))](RegisterUserEvent @event) =>
{
    Console.WriteLine($"注册用户成功: {@event.Account}");
});

订阅事件暂时未抽象,目前使用的是Dapr原生的订阅方式,后续我们会支持Bind,届时不会由于更换pubsub的实现而导致订阅方式的改变

尽管跨进程事件目前仅支持了Dapr,但这不代表你与RabbitMq、Kafka等无缘,发布/订阅是Dapr抽象出的能力,实现发布订阅的组件有很多种,RabbitMq、Kafka是其中一种实现,如果你想深入了解他们之间的关系,可以参考:

  1. 手把手教你学Dapr
  2. PubSub代理

源码解读

首先我们先要知道的基础知识点:

  • IIntegrationEvent: 集成事件接口, 继承 IEvent (本地事件接口)、ITopic (订阅接口, 发布订阅的主题)、ITransaction (事务接口)
  • IIntegrationEventBus: 集成事件总线接口、用于提供发送集成事件的功能
  • IIntegrationEventLogService: 集成事件日志服务的接口 (提供保存本地日志、修改状态为进行中、成功、失败、删除过期日志、获取等待重试日志列表的功能)
  • IntegrationEventLog: 集成事件日志, 提供本地消息表的模型
  • IHasConcurrencyStamp: 并发标记接口 (实现此接口的类会自动为RowVersion赋值)

IntegrationEvent

Masa.Contrib.Dispatcher.IntegrationEvents

提供了集成事件接口的实现类, 并支持了发件箱模式, 其中:

  • IPublisher: 集成事件的发送者
  • IProcessingServer: 后台服务接口
  • IProcessor: 处理程序接口 (后台处理程序中会获取所有的程序程序)
    • DeleteLocalQueueExpiresProcessor: 删除过期程序 (从本地队列删除)
    • DeletePublishedExpireEventProcessor: 删除已过期的发布成功的本地消息程序 (从Db删除)
    • RetryByLocalQueueProcessor: 重试本地消息记录 (从本地队列中获取, 条件: 发送状态为失败或进行中且重试次数小于最大重试次数且重试间隔大于最小重试间隔)
    • RetryByDataProcessor: 重试本地消息记录 (从Db获取, 条件: 发送状态为失败或进行中且重试次数小于最大重试次数且重试间隔大于最小重试间隔, 且不在本地重试队列中)
  • IntegrationEventBus: IIntegrationEvent的实现

在Masa.Contrib.Dispatcher.IntegrationEvents中仅提供了发件箱的功能, 但集成事件的发布是由 IPublisher的实现类来提供, 由Db获取本地消息表的功能是由IIntegrationEventLogService的实现类来提供, 它们分别属于Masa.Contrib.Dispatcher.IntegrationEvents.Dapr、Masa.Contrib.Dispatcher.IntegrationEvents.EventLogs.EFCore的功能, 这也是为什么使用集成事件需要引用包

  • Masa.Contrib.Dispatcher.IntegrationEvents
  • Masa.Contrib.Dispatcher.IntegrationEvents.Dapr
  • Masa.Contrib.Dispatcher.IntegrationEvents.EventLogs.EFCore

如何快速接入其它实现

那会有小伙伴问了, 我现在没有使用Dapr, 未来一段时间暂时也还不希望接入Dapr, 我想自己接入, 以实现集成事件的发布可以吗?

当然是可以的, 如果你希望自行实现集成事件, 那么这个时候你会遇到两种情况

接入方支持发件箱模式

以社区用的较多的库CAP为例, 由于它本身已经完成了发件箱模式, 我们不需要再处理本地消息表, 也无需考虑本地消息记录的管理, 那我们可以这样做

  1. 新建类库Masa.Contrib.Dispatcher.IntegrationEvents.Cap, 添加Masa.BuildingBlocks.Dispatcher.IntegrationEvents的引用, 并安装DotNetCore.CAP
dotnet add package DotNetCore.CAP
  1. 新增类IntegrationEventBus, 并实现IIntegrationEventBus
public class IntegrationEventBus : IIntegrationEventBus
{
    private readonly ICapPublisher _publisher;
    private readonly ICapTransaction _capTransaction;
    private readonly IUnitOfWork? _unitOfWork;
    public IntegrationEventBus(ICapPublisher publisher, ICapTransaction capTransaction, IUnitOfWork? unitOfWork = null)
    {
        _publisher = publisher;
        _capTransaction = capTransaction;
        _unitOfWork = unitOfWork;
    }
    
    public Task PublishAsync<TEvent>(TEvent @event) where TEvent : IEvent
    {
        // 如果使用事务
        // _publisher.Transaction.Value.DbTransaction = unitOfWork.Transaction;
        // _publisher.Publish(@event.Topic, @event);
        throw new NotImplementedException();
    }

    public IEnumerable<Type> GetAllEventTypes()
    {
        throw new NotImplementedException();
    }

    public Task CommitAsync(CancellationToken cancellationToken = default)
    {
        throw new NotImplementedException();
    }
}

CAP已支持本地事务, 使用当前IUnitOfWork提供的事务, 确保数据的原子性

  1. 新建类ServiceCollectionExtensions, 将自定义Publisher注册到服务集合
public static class ServiceCollectionExtensions
{
    public static DispatcherOptions UseRabbitMq(this IServiceCollection services)
    {
         //todo: 注册RabbitMq信息
         services.TryAddScoped<IIntegrationEventBus, IntegrationEventBus>();
         return dispatcherOptions;
    }
}

已经实现发件箱模式的可以直接使用, 而不需要引用

  • Masa.Contrib.Dispatcher.IntegrationEvents
  • Masa.Contrib.Dispatcher.IntegrationEvents.Dapr
  • Masa.Contrib.Dispatcher.IntegrationEvents.EventLogs.EFCore

以上未经过实际验证, 感兴趣的可以尝试下, 欢迎随时提pr

接入方不支持发件箱模式

我希望直接接入RabbitMq, 但我自己没有做发件箱模式, 那我可以怎么做呢?

由于Masa.Contrib.Dispatcher.IntegrationEvents已提供发件箱模式, 如果仅仅希望更换一个发布事件的实现者, 那我们仅需要实现IPublisher即可

  1. 新建类库Masa.Contrib.Dispatcher.IntegrationEvents.RabbitMq, 添加Masa.Contrib.Dispatcher.IntegrationEvents项目引用, 并安装RabbitMQ.Client
dotnet add package RabbitMQ.Client //使用RabbitMq
  1. 新增类Publisher,并实现IPublisher
public class Publisher : IPublisher
{
    public async Task PublishAsync<T>(string topicName, T @event, CancellationToken stoppingToken = default) where T : IIntegrationEvent
    {
        //todo: 通过 RabbitMQ.Client 发送消息到RabbitMq
        throw new NotImplementedException();
    }
}
  1. 新建类DispatcherOptionsExtensions, 将自定义Publisher注册到服务集合
public static class DispatcherOptionsExtensions
{
    public static DispatcherOptions UseRabbitMq(this Masa.Contrib.Dispatcher.IntegrationEvents.Options.DispatcherOptions options)
    {
         //todo: 注册RabbitMq信息
         dispatcherOptions.Services.TryAddSingleton<IPublisher, Publisher>();
         return dispatcherOptions;
    }
}
  1. 如何使用自定义实现RabbitMq
builder.Services.AddIntegrationEventBus(option =>
{
    option.UseRabbitMq();//修改为使用RabbitMq
    option.UseUoW<UserDbContext>(optionBuilder => optionBuilder.UseSqlite($"Data Source=./Db/{Guid.NewGuid():N}.db;"));
    option.UseEventLog<UserDbContext>();
});

本章源码

Assignment12

https://github.com/zhenlei520/MasaFramework.Practice

开源地址

MASA.Framework:https://github.com/masastack/MASA.Framework

如果你对我们的 MASA Framework 感兴趣,无论是代码贡献、使用、提 Issue,欢迎联系我们

  • WeChat:MasaStackTechOps
  • QQ:7424099

相关推荐

MASA MAUI 预览Office文件

在线预览Office文件Api,拼接自己的office文件地址参数后在浏览器中访问即可达到预览效果。接下来我们按照这个思路在Maui中实现这个效果。本文主要介绍了如何在Maui下预览Office文件,并分享开发过程正踩过的坑以及对应的解决方案。希望能帮助到遇到同样需求问题的朋友。

MASAteam的博客 552

MASA MAUI iOS 文件下载与断点续传

是 iOS 中用于处理网络请求和数据下载的核心类之一。它提供了强大的功能,使应用程序能够与远程服务器通信、下载文件、上传数据等。本文我们借助中的来创建下载任务。下载任务直接将服务器的响应数据写入临时文件,在数据从服务器到达时为应用提供进度更新。在后台会话中使用下载任务时,即使应用处于挂起状态或未运行,这些下载也会继续。可以暂停(取消)下载任务,稍后再恢复它们(需要服务端支持)还可以恢复由于网络连接问题而失败的下载。

MASAteam的博客 774

MAUI+Masa Blazor APP 各大商店新手发布指南(三)vivo篇

上架vivo商店,使用厂家的离线推送当然是一个重要原因,与小米不同,vivo的推送服务可以在应用未上架的情况下通过添加测试手机的方式进行测试安卓平台的商店审核规则基本都是一致的,但是审核人员的标准和“仔细”程度不尽相同。vivo也提供了在线咨询客服的功能,国内商店基本都有在线人工客服,这点比App Store方便很多。这些审核相关的内容我们如果之前没有App的开发经验,可以提前学习一下,对开发和相关设计都是很有帮助的。

MASAteam的博客 651

MAUI+Masa Blazor APP 各大商店新手发布指南(二)小米篇

先说一下我们上架厂家应用商店的原因:除了方便用户下载之外,需要厂家的离线推送和微信内容分享等都需要上架应用商店(微信分享不上架有调用次数限制)。如果你的App需要在国内使用离线推送功能,也就是App不启动的场景下接收消息推送,那么你需要集成厂家的SDK,如果你使用了第三方推送,例如 极光、个推。

MASAteam的博客 611

MAUI+Masa Blazor APP 各大商店新手发布指南(一)App Store篇

作为新手App开发,iOS由于众所周知的原因,必须通过App Store下载安装App,所以通过App Store的审核是必须的(当然如果您有299美元一年的企业版证书可以走内部分发渠道的场景除外)。以下是我们首次使用MAUI+MASA Blazor开发App并上传App Store中遇到的审核意见和我们的解决方法,供MAUI新手开发参考。首先强调:1、App Store不需要软著。2、发布App Store需要确认证书为个人或者公司,企业证书是不能发布App Store的。

MASAteam的博客 841

MAUI+MASA Blazor 兼容性测试报告及分析

由于越来越多的Net开发者开始使用MAUI+Blazor的框架来开发移动端应用,我们决定对MASA Blazor组件在MAUI框架进行兼容性测试,以确保其在移动端App中的兼容性和稳定性。通过这次测试,我们的目标是验证MASA Blazor组件在MAUI框架下的表现,识别任何潜在的问题和缺陷,并提供改进和优化建议,以确保用户可以在各种移动设备上无缝使用该组件。MASA Blazor作为Blazor家庭中广受欢迎的组件,无论在PC端还是移动端都可以提供良好的交互与性能,并提供了大量移动端专用组件。

MASAteam的博客 1372

2023年北京.NET线下技术沙龙圆满落幕!

第三位嘉宾是代强老师,他是云联网信技术负责人、.NET开发者,从业五年,微信公众号【美男子玩编程】维护者之一,博客园【关关长语】HandyControl开源项目文档贡献者之一,多能力开发者。接下来是李国梁老师,他是公众号、博客园【yi念之间】的作者,拥有近10年的.NET开发经验,主导过多个大型TOB平台从0到1的架构设计,热衷于开源项目贡献。他的分享主题是“.NET在工业软件的应用实践”,通过实际案例和技术方案,让听众们深入了解了.NET在工业软件领域的应用和实践。

MASAteam的博客 433

北京.NET线下技术沙龙倒计时一天

(中关村智能制造创新中心)(距海淀黄庄地铁站100米)【地下停车场可停车】.NET技术沙龙活动与你不见不散。

MASAteam的博客 392

2023年北京.NET线下技术沙龙来了!大咖分享,还有精品好礼等你

MASA技术团队来北京啦!为了与北京的.NET开发者们更深入的交流学习,我们将在北京市举办一场.NET线下技术沙龙。同时也是希望通过举办这样的线下沙龙,让更多的.NET开发者了解我们,加入.NET开源技术生态,向更多的.NET开发者分享我们的理念。期间,我们邀请到的四位技术大咖,将会围绕各自的主题向大家分享他们的技术心得。当然,我们也为大家准备了许多礼物,相信大家一定会喜欢,快来报名参加吧!2023年5月20日13:30-18:00。

MASAteam的博客 1071

使用MASA全家桶从零开始搭建IoT平台(三)管理设备的连接状态

获取一个设备的在线和离线状态,是一个很关键的功能。我们对设备下发的控制指令,设备处于在线状态才能及时给我们反馈。这里的在线和离线,我们可以简单的理解为设备与MQTT的连接状态。

MASAteam的博客 1319

使用MASA全家桶从零开始搭建IoT平台(二)设备注册

以上就是本文要讲的内容,本文介绍了通过账号密码的方式通过接口在EMQX中创建用户,并连接EMQX的过程,EMQX支持的认账方式还有很多,例如JWT认证方式可以授权一次性密码认证,可以控制认证的有效期,我们在后面的章节具体应用中会进行说明。如果你对我们的 MASA 感兴趣,无论是代码贡献、使用、提 Issue,欢迎联系我们QQ:7424099。

MASAteam的博客 1666

使用MASA全家桶从零开始搭建IoT平台(一)环境准备

本系列文章以IoT开发小白的角度,从零开始使用.Net为主要技术搭建一个简单的IoT平台,由于是入门系列,所有代码以围绕IoT基础业务场景为主,不会涉及DDD等设计思想。

MASAteam的博客 1668

成都.NET线下技术沙龙倒计时一天

四川省成都市武侯区世纪城路198号世纪城新国际会展中心2区3楼。2023年4月15日下午13:30。.NET技术沙龙与你不见不散。点击链接即可报名活动。

MASAteam的博客 257

2023年成都.NET线下技术沙龙来了!大咖分享,报名从速

MASA技术团队来成都啦!我们联合了成都.NET俱乐部,将在成都市举办一场.NET线下技术沙龙,为.NET开发者创造一次交流学习的契机,我们邀请到的几位技术大咖,将会围绕各自的主题向大家分享他们的技术心得。2023年4月15日13:30-17:30四川省成都市武侯区世纪城路198号世纪城新国际会展中心2区3楼(知域空间)【楼下可停车】

MASAteam的博客 619

Blazor在IoT领域的前端实践 @.NET开发者日

2023年3月11号,MASA技术团队参加了“.NET开发者日”,IoT项目经理郭浩在活动中做“”的主题分享数闪科技 IoT 项目经理从事 .NET 开发10余年,目前在数闪科技担任 IoT 项目经理,有大量 IoT 产品的开发经验,在 Android 和 iOS 的 Blazor MAUI 开发上有大量实践经验。本次分享主要分为两个部分第一部分我们为什么要在IoT项目中使用Blazor技术,Blazor给IoT带来了什么?第二部分。

MASAteam的博客 1015

MASA MAUI Plugin (十)iOS消息推送(原生APNS方式)

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。Apple 推送通知服务(Apple Push Notification service),简称 APNs。与之前Android使用个推不同,由于APNs国内可用,所以我们可以直接使用APNs来实现远程消息推送,不依赖其他第三方组件和服务。我们这里推送使用的是p8证书,p8证书相对p12证书来讲,更灵活,而且没有p12证书有效期1年的限制。

MASAteam的博客 1359

MASA MAUI Plugin (九)Android相册多选照片(使用Android Jetpack套件库)

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。Jetpack 包含一系列 Android 库,它们都采用最佳做法并在 Android 应用中提供向后兼容性。hl=zh-cn上一篇我们是通过Intent实现的,今天我们用Jetpack 实现相册的多选功能。

MASAteam的博客 936

MASA MAUI Plugin (八)Android相册多选照片(Intent 方式)

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。项目中有需要从相册多选图片的需求,MAUI提供的无多选功能,虽然可以实现多选,但是多选文件需要长按,而且没有预览和返回按钮,用户交互效果不好。作为安卓开发小白,本人目前找到两种UI交互良好而且不需要定制选取界面的方法和大家分享。

MASAteam的博客 1542

MASA Stack 1.0 发布会 —— 社区问题解答

社区关心的问题都在这统一解答

MASAteam的博客 421

MASA Stack 1.0 发布会讲稿——生态篇

首先感谢贡献者们为MASA Stack社区所作的积极贡献,这些贡献者给我们提出了很多宝贵的建议,更是积极的提交PR帮助我们一起让产品更健壮,更完善,还在各种场合推广我们的解决方案,非常给力,大家都是为爱发电,给你们点赞!

MASAteam的博客 510

MASA Stack 1.0 发布会讲稿——实践篇

大家可能都有类似排查问题的经历,有很多大公司尤其是外企,非常重视流程管理,这时候如果你的数据经过了多个业务系统,但又没有使用类似TSC的平台支撑,那么你要调查具体的问题就很麻烦,你需要向多个系统的项目经理提出申请,让他们安排具体的运维或者DBA甚至开发来协助你调查,如果涉及的数据存在涉密或者用户的个人信息,那么还需要涉及到产品和业务人员签字,那么如果这个问题的优先级不够高,一个问题调查一两周都是很常见的情况。如图是我们部分系统界面展示,包含我们的IoT后台,用户端小程序,云商城小程序,和业务端App。

MASAteam的博客 719

MASA Stack 1.0 发布会讲稿 —— 产品篇

这三种方式里Caller都出现了,如果说你的项目比较复杂,可能用了不同的协议,还是更推荐Caller,因为Caller是我们的一个构建块,它是面对接口的方式去编程的,不管你对接哪一种方式,只需要调换Contrib包,书写方式没有特别大的区别。以上三种方式是大家比较常见的,最后一种方式是还在开发中的MASA Stack 2.0 集成平台,在2.0里,我们会做一个集成平台,它会帮大家去接管内外的应用,HTTP、gRPC、Dapr在我们的集成平台里面都可以快速接进来。从最初的底层环境创建,部署和创建对应的集群。

MASAteam的博客 613

MASA Stack 1.0 发布会讲稿——趋势篇

随着时间推移,云计算技术越来越成熟,能力越来越丰富,有很多的需求可以用云的能力直接提供,所有陆续会出现一些比如PaaS这样的平台,其实就是云计算提供的中间件能力。到了2014之后,随着容器和K8s这样的技术出现,我们能在云计算平台拿到更多的能力,这是一种非常强大的平台层的抽象,我们前面讲过的不可变基础设施等都是通过容器、K8s技术实现的,之前需要花很多资源和精力搭建的中间件的能力,现在开发者可以非常容易的获取和实践,从此开发者的诉求和基础设施之间的鸿沟不断的在变小。

MASAteam的博客 310

MASA Stack 1.0 发布会圆满收官

MASA Stack 1.0 发布会圆满收官,此次发布会得到了大家的热烈反响,视频号和B站两个平台观看人数突破千人,点赞超过两万本次发布会分为五大部分——MASA Stack 1.0趋势篇、产品篇、实践篇、生态篇、圆桌座谈

MASAteam的博客 364

MASA MAUI Plugin (七)应用通知角标(小红点)Android+iOS

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。上一篇文章我们集成了个推的消息通知,那么消息到达移动端之后,除了会在通知栏显示之外,在应用的角标也会显示未读消息的数量(小红点),然后用户点击查看消息之后,这些数字角标也可以自动消除,这个功能在MAUI中如何实现呢。

MASAteam的博客 1124

MASA Framework 事件总线 - 进程内事件总线

事件总线是一种事件发布/订阅结构,通过发布订阅模式可以解耦不同架构层级,同样它也可以来解决业务之间的耦合,它有以下优点松耦合横切关注点可测试性事件驱动根据需要我们可以自定义中间件,并注册到EventBus的请求管道中,比如通过增加, 将参数验证从业务代码中剥离开来,从而使得处理程序更专注于业务注册, 修改Program.cs自定义验证中间件,用于验证参数{_logger;{}{_logger?{_logger?typeName,

MASAteam的博客 495

MASA MAUI Plugin (六)集成个推,实现本地消息推送[Android] 篇

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。鉴于现在运营需求的增强,消息推送在Android开发中应用的场景是十分常见,如电商的活动宣传、资讯类产品进行新闻推送等等,所以关于这个功能我就不过多介绍了。

MASAteam的博客 811

MASA MAUI Plugin (五)Android 指纹识别

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。在API 级别 23 (Android 6.0)设备上引入指纹扫描仪为应用程序提供了传统的用户名/密码用户身份验证的替代方法。相较于用户名和密码,采用指纹对用户进行身份验证使应用程序安全性的实现更具隐私性,之后中添加了生物识别身份验证Biometric,增加了人脸认证相关功能。我们今天讨论的只涉及指纹认证,考虑到兼容性问题采用版本提供的。

MASAteam的博客 920

MASA MAUI iOS如何绑定微信

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。App开发中难免不了要对接第三方平台,这些平台官网也提供了SDK供开发者使用。对于Android和iOS平台而言,只需要下载官方的SDK,按照官方说明文档进行集成就可以轻松实现了。但是对于MAUI来说,并没有官方的SDK,这个时候就需要我们绑定适用于.NET MAUI 的本机库。

MASAteam的博客 1052

MASA Framework 缓存入门与设计

提供了分布式缓存以及多级缓存的实现

MASAteam的博客 498
上一篇: MASA Framework 事件总线 - 进程内事件总线
下一篇: MASA MAUI Plugin (七)应用通知角标(小红点)Android+iOS
MASA team
MASA team 数闪科技+MASA team 官方账号 数闪科技+MASA team 官方账号
博客等级 码龄5年 122粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值