首页 > 解决方案 > 尝试在低于 26 的 Android API 级别上接收 OneSignal 通知时出现异常

问题描述

今天我注意到我的应用程序停止在奥利奥之前的设备(API 级别低于 26)上接收来自 OneSignal 的通知。在尝试调试时,我注意到当我应该收到通知时会抛出这个异常。

Rejecting re-init on previously-failed class java.lang.Class<com.onesignal.JobIntentService$JobServiceEngineImpl>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/app/job/JobServiceEngine;
    at android.content.Intent com.onesignal.NotificationExtenderService.getIntent(android.content.Context) (NotificationExtenderService.java:212)
                at boolean com.onesignal.NotificationBundleProcessor.startExtenderService(android.content.Context, android.os.Bundle, com.onesignal.NotificationBundleProcessor$ProcessedBundleResult) (NotificationBundleProcessor.java:456)
                at com.onesignal.NotificationBundleProcessor$ProcessedBundleResult com.onesignal.NotificationBundleProcessor.processBundleFromReceiver(android.content.Context, android.os.Bundle) (NotificationBundleProcessor.java:430)
                at com.onesignal.NotificationBundleProcessor$ProcessedBundleResult com.onesignal.GcmBroadcastReceiver.processOrderBroadcast(android.content.Context, android.content.Intent, android.os.Bundle) (GcmBroadcastReceiver.java:125)
                at void com.onesignal.GcmBroadcastReceiver.onReceive(android.content.Context, android.content.Intent) (GcmBroadcastReceiver.java:72)
                at void android.app.ActivityThread.handleReceiver(android.app.ActivityThread$ReceiverData) (ActivityThread.java:3032)
                at void android.app.ActivityThread.-wrap18(android.app.ActivityThread, android.app.ActivityThread$ReceiverData) (ActivityThread.java:-1)
                at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1557)
                at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
                at void android.os.Looper.loop() (Looper.java:154)
                at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6123)
                at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
                at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:867)
                at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:757)
            Caused by: java.lang.ClassNotFoundException: Didn't find class "android.app.job.JobServiceEngine" on path: DexPathList[[ ... ],nativeLibraryDirectories=[ ... ]
                at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
                at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
                at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
                at android.content.Intent com.onesignal.NotificationExtenderService.getIntent(android.content.Context) (NotificationExtenderService.java:212)
                at boolean com.onesignal.NotificationBundleProcessor.startExtenderService(android.content.Context, android.os.Bundle, com.onesignal.NotificationBundleProcessor$ProcessedBundleResult) (NotificationBundleProcessor.java:456)
                at com.onesignal.NotificationBundleProcessor$ProcessedBundleResult com.onesignal.NotificationBundleProcessor.processBundleFromReceiver(android.content.Context, android.os.Bundle) (NotificationBundleProcessor.java:430)
                at com.onesignal.NotificationBundleProcessor$ProcessedBundleResult com.onesignal.GcmBroadcastReceiver.processOrderBroadcast(android.content.Context, android.content.Intent, android.os.Bundle) (GcmBroadcastReceiver.java:125)
                at void com.onesignal.GcmBroadcastReceiver.onReceive(android.content.Context, android.content.Intent) (GcmBroadcastReceiver.java:72)
                at void android.app.ActivityThread.handleReceiver(android.app.ActivityThread$ReceiverData) (ActivityThread.java:3032)
                at void android.app.ActivityThread.-wrap18(android.app.ActivityThread, android.app.ActivityThread$ReceiverData) (ActivityThread.java:-1)
                at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1557)
                at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
                at void android.os.Looper.loop() (Looper.java:154)
                at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6123)
                at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
                at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:867)
                at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:757)

有时不会抛出异常(尤其是在使用模拟器时),但通知仍然不会出现

我正在使用带有自定义 NotificationExtenderService的 OneSignal 3.10.6 gradle 实现。(关于可能导致这种情况的任何想法?最近我更改了我们的项目 proguard 规则,但即使在我禁用 proguard 之后,错误仍然存​​在。

编辑 似乎问题出在NotificationExtenderService中。当我禁用 CustomNotificationExtenderService 并添加 NotificationReceivedHandler 时,通知开始到达,但是,我无法切换到 NotificationReceivedHandler,因为我仍然需要能够选择要向用户显示的通知以及显示的内容作为警报或仅作为通知。

标签: androidnotificationsonesignal

解决方案


推荐阅读