OneSignal 通知未出现在 Xamarin Forms Android 中 - 发布模式

问题描述

我将 Onesignal SDK 用于 Xamarin Forms 通知 - 当我在调试模式下运行应用程序时,通知会到达设备。

但是,在 Release 模式下编译和运行时,设备(Android One)上不会出现任何通知

我怀疑(编译器/链接器?)可能有一些东西被剥离了 - 但我不知道如何解决这个问题。

应用在发布模式下运行,但在某些情况下似乎会崩溃,日志显示以下内容

java.lang.classNotFoundException: Didn't find class "com.onesignal.GcmbroadcastReceiver" on path: DexPathList.......



androidx.core.app.CoreComponentFactory.instantiateReceiver
java.lang.InstantiationException: java.lang.class<com.google.firebase.iid.FirebaseInstanceIdReceiver> cannot be instantiated


androidx.core.app.CoreComponentFactory.instantiateService
java.lang.InstantiationException: java.lang.class<com.onesignal.RestoreKickoffJobService> cannot be instantiated

解决方法

此类消息是由 ProGuard / R8 引起的。您可以禁用它,也可以向 Proguard.cfg 文件添加特定规则以防止代码被剥离。

,

对于可能遇到相同问题的其他人来说,这是为我解决的问题:

  1. 在 Android 项目 proguard.cfg 中创建一个空文件。将构建操作设置为 ProguardConfiguration

  2. 添加以下内容

-keep class com.onesignal.** { *; }
-keep class com.google.firebase.** { *; }

重新构建和重新部署。