.NET MAUI - 为什么推送通知在发布后无法正常工作?

问题描述 投票:0回答:3

因此,我有一个专门针对 Android 的 .NET MAUI 移动应用程序,它通过

OnMessageReceived()
方法和
OnNewToken()
使用意图过滤器和服务实现了推送通知。

在开发过程中,当我在连接的设备上运行应用程序时,一切都运行良好,并且按预期收到了

OnMessageReceived()

但是,当将其发布到 APK 文件而不是调用

OnMessageReceived()
时,即使在前台也会显示本地通知。我没有启用此功能的代码。

不确定这是 .NET MAUI 特定问题还是与 firebase 有关。 我接收通知的代码是:

[Service(Exported = false)]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class PushNotificationFirebaseMessagingService : FirebaseMessagingService
{
    /// <summary>
    /// Called when a new token is created
    /// </summary>
    /// <param name="token">The token created</param>
    public override void OnNewToken(string token)
    {
        try
        {
            // Set the token name to secure storage
            SecureStorage.SetAsync(Constants.PushNotificationTokenName, token)
                         .SafeFireAndForget(false);
        }
        catch (Exception)
        {
            // Could be secure storage is not supported
        }


    }

    /// <summary>
    /// Called when any new notification hub message is received
    /// </summary>
    /// <param name="message">The message received</param>
    public override void OnMessageReceived(RemoteMessage message)
    {
       // Code executed on UI here
                

}

    }



}

还有我的 MainActivity.cs 代码...

    protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.PostNotifications) != Permission.Granted)
    {
        ActivityCompat.RequestPermissions(this, new[] { Manifest.Permission.PostNotifications }, 0);
    }
    CreateNotificationChannelIfNeeded();


}


private void CreateNotificationChannelIfNeeded()
{
    if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
    {
        CreateNotificationChannel();
    }
}

private void CreateNotificationChannel()
{
    var channelId = $"{PackageName}.general";
    var notificationManager = (NotificationManager)GetSystemService(NotificationService);
    var channel = new NotificationChannel(channelId, "General", NotificationImportance.Default);
    notificationManager.CreateNotificationChannel(channel);
    FirebaseCloudMessagingImplementation.ChannelId = channelId;
    //FirebaseCloudMessagingImplementation.SmallIconRef = Resource.Drawable.ic_push_small;
}

注意事项:

  • 我在 AndroidManifest.xml 中拥有权限
     <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
c# android firebase maui
3个回答
1
投票

好吧,我发现了问题,似乎是启用了修剪后,修剪了发布时推送通知的某些功能。因此,请确保通过 右键单击项目 > 搜索“修剪” > 取消选择发布

将其关闭

0
投票

您可以首先重新检查您是否已将用于发布的 SHA-1 签名密钥添加到您的 Firebase 控制台。

对于发布版本,有不同的 SHA-1 密钥。

您可以尝试以下步骤:

  • 生成您的
    SHA-1
    以供发布
  • 将您的版本
    SHA-1
    添加到 firebase 控制台
  • 下载并使用新的
    google-services.json

注意: 确保 Play 商店用于签署您的版本的密钥是 也在步骤2中添加了

有一些关于这个问题的类似帖子,你可以在这里查看:

FCM 通知在发布应用程序中不起作用

Firebase google 身份验证在发布模式下不起作用


0
投票

虽然禁用修剪和 AOT 效果很好,但它会显着增加文件大小。因此,我建议确定需要保持未修剪的特定库并命名它们。

LinkerConfig.xml 像这样:

<linker>
  <!-- Preserve the entire Firebase Messaging library -->
  <assembly fullname="Xamarin.Firebase.Messaging" preserve="all" />
  <assembly fullname="Plugin.Firebase" preserve="all" />

  <!-- Alternatively, preserve only the specific service -->
  <assembly fullname="Namespace">
    <type fullname="Namespace.CustomFirebaseMessagingService" preserve="all" />
  </assembly>
</linker>

还将这些添加到您的 csproj 中:

<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net7.0-android33.0|AnyCPU'">
     <PublishTrimmed>True</PublishTrimmed>
     <RunAOTCompilation>False</RunAOTCompilation>
     <TrimMode>link</TrimMode>
     <LinkDescription>Linkers\LinkerConfig.xml</LinkDescription> 
</PropertyGroup>
        
<ItemGroup>
     <LinkDescription Include="Linkers\LinkerConfig.xml" />
</ItemGroup>
© www.soinside.com 2019 - 2024. All rights reserved.