代码之家  ›  专栏  ›  技术社区  ›  urukh

尝试接收Android API级别低于26的OneSignal通知时发生异常

  •  0
  • urukh  · 技术社区  · 6 年前

    今天我注意到我的应用程序在Oreo之前的设备(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)
    

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

    我用的是一个信号 3.10.6 带有定制NotificationExtender服务的gradle实现。( 你知道这是什么原因吗?最近我更改了我们的项目proguard规则,但即使禁用了proguard,错误仍然存在。

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

    0 回复  |  直到 6 年前