You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Forms点击本地通知能否跳转页面?求技术方案

Xamarin Forms 实现点击本地通知跳转页面(Plugin.LocalNotification)

完全可行,Plugin.LocalNotification 原生支持监听通知点击事件,结合 Xamarin Forms 的导航服务即可实现页面跳转。针对你提供的代码,以下是优化调整建议及关键配置说明:

代码逻辑优化

你的核心思路是正确的,但需要处理导航上下文就绪问题,避免App后台唤醒或冷启动时导航服务未初始化的情况:

private async void Current_NotificationActionTapped(NotificationActionEventArgs e)
{
    try
    {
        // 确保导航栈已初始化(冷启动或后台唤醒场景)
        if (NavigationService.MainPage == null)
        {
            await NavigationService.NavigateAsync("NavigationPage/MainPage");
        }

        var notificationData = JObject.Parse(e.Request.ReturningData);
        int notificationId = notificationData.Value<int>("id");

        if (notificationId == 89)
        {
            // 切换到Tab页(如果是TabbedPage结构)
            await NavigationService.SelectTabAsync(nameof(Report));
            // 若需跳转新页面而非切换Tab,使用:
            // await NavigationService.NavigateAsync(nameof(Report));
        }
        else
        {
            LocalNotificationCenter.Current.Cancel(e.Request.NotificationId);
        }
    }
    catch (Exception ex)
    {
        // 可添加日志记录逻辑
    }
}

通知发送时的参数正确性

确保发送通知时ReturningData是合法JSON格式,否则解析会报错:

var notificationRequest = new NotificationRequest
{
    NotificationId = 89,
    Title = "通知标题",
    Description = "点击跳转至Report页面",
    ReturningData = "{\"id\":89}" // 必须为有效JSON字符串
};
await LocalNotificationCenter.Current.Show(notificationRequest);

平台必需配置

Android 端

  1. 在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.VIBRATE" />
  1. 在MainActivity.cs的OnCreate方法中初始化通知通道:
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    LocalNotificationCenter.Current.RegisterNotificationChannel();
}

iOS 端

  1. 在Info.plist中添加权限描述:
<key>NSUserNotificationUsageDescription</key>
<string>需要发送本地通知提醒您重要事项</string>
<key>NSRemoteNotificationUsageDescription</key>
<string>需要发送本地通知提醒您重要事项</string>
  1. 在AppDelegate.cs的FinishedLaunching方法中请求通知权限:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    LocalNotificationCenter.Current.RequestNotificationPermission();
    return base.FinishedLaunching(app, options);
}

额外注意点

  • 当App被完全杀死后点击通知,OnInitialized会重新执行,此时NotificationActionTapped事件仍会触发,上述代码中的导航初始化逻辑已兼容该场景。
  • 避免在async void事件处理中遗漏异常捕获,防止App崩溃。

内容的提问来源于stack exchange,提问作者Cinmay2014

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:22:51