-
Notifications
You must be signed in to change notification settings - Fork 49
Description
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
- Targeting Android 10.0 API 29
- 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)