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

Xamarin跨平台Firebase推送通知无法正常工作求助

解决Xamarin中Plugin.FirebasePushNotification推送无法接收的问题

我来帮你一步步排查这个推送通知的问题,结合你提供的代码和配置,下面是几个关键的检查点和修复方案:

1. 确认google-service.json的配置与位置

首先要确保你的google-service.json文件:

  • 完全匹配Firebase控制台中创建的应用包名(和Android项目的AndroidManifest.xml里的package属性一致)
  • 放在Android项目的Assets文件夹下,并且在属性窗口设置Build Action为AndroidAsset
  • 文件里的API密钥、项目ID等信息没有错误

2. 检查AndroidManifest.xml的权限与组件配置

插件可能不会自动添加所有必需的配置,手动确认以下内容是否存在:

权限配置

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />

<!-- Android 13+ 需要的通知权限 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" android:maxSdkVersion="33" />

服务与接收器配置

<service android:name="com.google.firebase.messaging.FirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="${applicationId}" />
    </intent-filter>
</receiver>

3. 验证Token是否正常获取

你的代码在OnStart中打印了Token,先确认调试窗口是否输出了有效的Token:

  • 如果Token为空或未输出,说明Firebase初始化失败,大概率是google-service.json配置错误或者包名不匹配
  • 拿到Token后,直接用这个Token在Postman中测试推送,确保目标设备正确

4. 修正Postman的推送请求格式

确保你的FCM请求格式正确,旧版API的示例如下:

请求URL

https://fcm.googleapis.com/fcm/send

请求头

  • Authorization: key=你的Firebase服务器密钥
  • Content-Type: application/json

请求体

{
  "to": "你的设备Token",
  "notification": {
    "title": "测试标题",
    "body": "测试消息"
  },
  "data": {
    "custom_key": "自定义数据"
  }
}

注意:如果只发送data字段,应用在后台或杀死状态下可能不会弹出通知,建议同时包含notification和data字段。

5. 修复MainApplication的初始化代码

你的MainApplication的OnCreate方法缺少base.OnCreate();调用,这会导致初始化异常,修正后:

public override void OnCreate()
{
    base.OnCreate(); // 必须添加这一行
    FirebasePushNotificationManager.Initialize(this, 
        new NotificationUserCategory[] { 
            new NotificationUserCategory("message", new List<NotificationUserAction> { 
                new NotificationUserAction("Reply", "Reply", NotificationActionType.Foreground), 
                new NotificationUserAction("Forward", "Forward", NotificationActionType.Foreground) 
            }), 
            new NotificationUserCategory("request", new List<NotificationUserAction> { 
                new NotificationUserAction("Accept", "Accept", NotificationActionType.Default, "check"), 
                new NotificationUserAction("Reject", "Reject", NotificationActionType.Default, "cancel") 
            }) 
        }, true);
}

6. 处理Android 13+的通知权限申请

Android 13及以上版本需要手动申请通知权限,在MainActivity的OnCreate中添加:

protected override void OnCreate(Bundle bundle)
{
    TabLayoutResource = Resource.Layout.Tabbar;
    ToolbarResource = Resource.Layout.Toolbar;
    base.OnCreate(bundle);

    // 申请Android 13+通知权限
    if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu)
    {
        if (CheckSelfPermission(Manifest.Permission.PostNotifications) != Permission.Granted)
        {
            RequestPermissions(new string[] { Manifest.Permission.PostNotifications }, 100);
        }
    }

    global::Xamarin.Forms.Forms.Init(this, bundle);
    LoadApplication(new App());
    FirebasePushNotificationManager.ProcessIntent(Intent);
}

7. 排查厂商后台限制问题

如果应用在前台能收到推送,后台/杀死状态下收不到,大概率是国内厂商(小米、华为、OPPO等)的后台限制:

  • 进入系统设置,将应用加入后台白名单
  • 允许应用自启动和后台运行权限

按照以上步骤逐一排查,应该能解决你的推送接收问题。

内容的提问来源于stack exchange,提问作者Aswathy K R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:46:31