Skip to content

NotificationExtenderService no Extender prop at OverrideSettings #231

@lltwist

Description

@lltwist

Description:

I try to implement Android Notification Extender Service to change payload as it is described at https://documentation.onesignal.com/docs/service-extensions#notification-extender-service and also using this snippet #123 (comment)

    [Service(Permission = "android.permission.BIND_JOB_SERVICE", Exported = false)]
    [IntentFilter(actions: new[] {"com.onesignal.NotificationExtender"})]
    public sealed class OneSignalNotificationExtenderService : NotificationExtenderService
    {
        static readonly OverrideSettings _displaySettings = new OverrideSettings() {Extender = new Extender()};

        protected override bool OnNotificationProcessing(OSNotificationReceivedResult p0)
        {
            var notification = Com.OneSignal.NotificationOpenedHandler.OSNotificationToNative(new OSNotification() {Payload = p0.Payload});

            DisplayNotification(_displaySettings);

            // task.Wait();
            return true;
        }
        
        protected override void OnHandleIntent(Intent intent)
        {
        }

        private sealed class ExtenderEx : Java.Lang.Object, NotificationCompat.IExtender
        {
            public NotificationCompat.Builder Extend(NotificationCompat.Builder builder)
            {
                return builder
                    .SetContentTitle("modified")
                    .SetContentText("modified")
                    // .SetDefaults(~(int) NotificationDefaults.Sound);
            }
        }
    }

.. and having such problems:

  • in ver 3.10.4 there is no property Extender on class OverrideSettings (some binding attr problem, because in .aar such a field exists);
  • in ver 3.10.3 and older property Extender exists, but throws Java.Lang.NoSuchFieldError exception

Environment

  1. Targeting Android 10.0 API 29
  2. AndroidX.Migration packages are installed

3.10.3 and older crash stacktrace

Java.Lang.NoSuchFieldError: no type "Landroid/support/v4/app/NotificationCompat$Extender;" found and so no field "extender" could be found in class "Lcom/onesignal/NotificationExtenderService$OverrideSettings;" or its superclasses ---> Java.Lang.ClassNotFoundException: Didn't find class "android.support.v4.app.NotificationCompat$Extender" on path: DexPathList[[zip file "/data/app/com.tawasal.campus.mobile-O1CPsJ29_qaKpD3YgqcOmw==/base.apk"],nativeLibraryDirectories=[/data/app/com.tawasal.campus.mobile-O1CPsJ29_qaKpD3YgqcOmw==/lib/arm, /data/app/com.tawasal.campus.mobile-O1CPsJ29_qaKpD3YgqcOmw==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
--- End of inner exception stack trace ---
at Java.Interop.JniEnvironment+InstanceFields.GetFieldID (Java.Interop.JniObjectReference type, System.String name, System.String signature) [0x0005b] in <8b3b636835d84984ba4604c1f57b1983>:0
at Java.Interop.JniType.GetInstanceField (System.String name, System.String signature) [0x0000c] in <8b3b636835d84984ba4604c1f57b1983>:0
at Java.Interop.JniPeerMembers+JniInstanceFields.GetFieldInfo (System.String encodedMember) [0x00036] in <8b3b636835d84984ba4604c1f57b1983>:0
at Java.Interop.JniPeerMembers+JniInstanceFields.SetValue (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniObjectReference value) [0x00006] in <8b3b636835d84984ba4604c1f57b1983>:0
at Com.OneSignal.Android.NotificationExtenderService+OverrideSettings.set_Extender (AndroidX.Core.App.NotificationCompat+IExtender value) [0x00007] in /Users/josh/Documents/repos/OneSignal-Xamarin-SDK/OneSignal.Android.Binding/obj/Release/generated/src/Com.OneSignal.Android.NotificationExtenderService.cs:54
at CampusMobile.Droid.Services.OneSignalNotificationExtenderService.OnNotificationProcessing (Com.OneSignal.Android.OSNotificationReceivedResult p0) [0x0001f] in /Users/m/dev/repo/campus-mobile-xf/CampusMobile/CampusMobile/CampusMobile.Android/Services/OneSignalNotificationExtenderService.cs:27
at Com.OneSignal.Android.NotificationExtenderService.n_OnNotificationProcessing_Lcom_onesignal_OSNotificationReceivedResult_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_p0) [0x00011] in /Users/josh/Documents/repos/OneSignal-Xamarin-SDK/OneSignal.Android.Binding/obj/Release/generated/src/Com.OneSignal.Android.NotificationExtenderService.cs:295
at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.104(intptr,intptr,intptr)
--- End of managed Java.Lang.NoSuchFieldError stack trace ---
java.lang.NoSuchFieldError: no type "Landroid/support/v4/app/NotificationCompat$Extender;" found and so no field "extender" could be found in class "Lcom/onesignal/NotificationExtenderService$OverrideSettings;" or its superclasses
at crc64fee1e6eafa1c956b.OneSignalNotificationExtenderService.n_onNotificationProcessing(Native Method)
at crc64fee1e6eafa1c956b.OneSignalNotificationExtenderService.onNotificationProcessing(OneSignalNotificationExtenderService.java:30)
at com.onesignal.NotificationExtenderService.processJsonObject(NotificationExtenderService.java:170)
at com.onesignal.NotificationExtenderService.processIntent(NotificationExtenderService.java:155)
at com.onesignal.NotificationExtenderService.onHandleWork(NotificationExtenderService.java:123)
at com.onesignal.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:439)
at com.onesignal.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:430)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.app.NotificationCompat$Extender" on path: DexPathList[[zip file "/data/app/com.tawasal.campus.mobile-O1CPsJ29_qaKpD3YgqcOmw==/base.apk"],nativeLibraryDirectories=[/data/app/com.tawasal.campus.mobile-O1CPsJ29_qaKpD3YgqcOmw==/lib/arm, /data/app/com.tawasal.campus.mobile-O1CPsJ29_qaKpD3YgqcOmw==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions