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

Xamarin.Forms Android 12及以上版本推送通知异常求助

Android 12+推送通知问题排查与解决

一、初始Android 12+崩溃问题

  • 原因:Android 12(API 31)强制要求PendingIntent必须指定FLAG_IMMUTABLE或FLAG_MUTABLE,旧版Firebase Messaging库未做适配,导致崩溃。
  • 解决:更新Firebase库是正确方向,但要注意后续API的兼容替换。

二、更新Firebase.Messaging后收不到通知、类未找到错误

  • 原因:FirebaseInstanceId在新版Firebase中已被废弃,换成FirebaseMessaging获取Token是对的,但OneSignal 3.10.4仍依赖旧的FirebaseInstanceId类,导致类找不到,打断了通知接收流程。
  • 解决:
    • 确保Token获取逻辑正确,使用新版API:
      // 替换旧的FirebaseInstanceId.GetInstance().Token写法
      var token = await FirebaseMessaging.Instance.GetTokenAsync();
      
    • 清理项目依赖缓存,避免版本冲突:
      • 删除项目根目录下的packages文件夹,通过NuGet管理器清除所有缓存,再重新安装Xamarin.Firebase.Messaging和Com.OneSignal,确保所有依赖版本统一。
    • 临时补全依赖:如果仍报FirebaseInstanceId找不到,安装和Messaging版本匹配的Xamarin.Firebase.InstanceId库,临时兼容OneSignal的旧依赖。

三、更新OneSignal后仍收不到通知、无角标计数

  • 原因:
    1. OneSignal 3.x对Android 12+的通知渠道适配不足,HMS配置可能有遗漏;
    2. Android 13+需要单独申请POST_NOTIFICATIONS权限,未申请则收不到通知;
    3. 角标计数需要主动开启,部分厂商还需额外配置。
  • 解决:
    • 申请通知权限:
      • 在AndroidManifest.xml中添加权限声明:
        <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
        
      • Android 13+动态申请权限:
        if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu)
        {
            ActivityCompat.RequestPermissions(MainActivity.Instance, new[] { Manifest.Permission.PostNotifications }, 1001);
        }
        
    • 配置通知渠道:
      • OneSignal初始化时创建并启用通知渠道:
        OneSignal.Initialize("你的OneSignal AppID");
        OneSignal.Notifications.CreateNotificationChannel("default_channel", "默认渠道", "默认通知渠道", NotificationImportance.High, true);
        
    • 开启角标计数:
      • 打开OneSignal的角标支持:
        OneSignal.Notifications.SetBadgeEnabled(true);
        
      • 华为、小米等厂商需要在各自开发者平台配置角标权限,OneSignal 3.x内置了部分厂商适配,确认版本支持即可。
    • 检查HMS配置:
      • 确保NotificationOpenedActivityHMS的android:exported设为true,并在AndroidManifest.xml正确注册:
        <activity android:name="com.onesignal.NotificationOpenedActivityHMS" android:exported="true" />
        
      • 确认华为AGC推送服务配置正确,证书、AppID均匹配。

四、版本兼容建议

Xamarin.Firebase.Messaging 123.1.2.2版本较新,而Com.OneSignal 3.10.4发布时间较早,两者可能存在兼容问题。要么升级OneSignal到最新的Xamarin兼容版本(比如4.x,注意API变更),要么降级Firebase到OneSignal 3.x支持的版本(比如121.x.x.x系列),确保依赖版本匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:17:35