I want to implement OnNewToken() method from FirebaseMessagingService in my Xamarin Android project that uses Firebase Cloud Messaging since FirebaseInstanceIdService and OnTokenRefreshed() are deprecated.
I tried this
[Service] [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })] public class MessagingService : FirebaseMessagingService { const string TAG = "MyFirebaseMsgService"; public override void OnNewToken(string token) { Log.Debug(TAG, "Refreshed token: " + token); SendRegistrationToServer(token); } public void SendRegistrationToServer(string token) { ... } }
But my OnNewToken() is not hit. What am I doing wroing. Do i need to include anything in my Android manifest file? I cannot find any documents specific to Xamarin Android about this update. Please help. Thank you so much.
Answers
The onNewToken method will only be called when a new token is generated.
Quite often (especially during development) your app already have generated a token before you added the service. So onNewToken will not be called.
If you want to get the token directly , the class FirebaseInstanceId may be helpful.
@prabesh I have the same code as you, and I have the same problem;
OnNewToken(string token)
is not being called. I'm using all of the newest packages like:In my manifest I have this:
Please, someone, look into the new way of getting FCM token
@borge_rodsjo
I personally didn't try , but this can be useful.
https://forums.xamarin.com/discussion/136721/firebaseinstanceidservice-is-deprecated-and-onnewtoken-not-working
If you try , please let us know the feedback.
Fixed in latest Xamarin.Firebase.Messaging (still in preview) - Version 70.1710.0-preview2
It is now May 2019. Did you figure it out @prabesh
I'm getting the following error:
I have tried adding the following to the Manifest:
Got this working...
Add below to AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService" android:stopWithTask="false"><intent-filter><action android:name="com.google.firebase.MESSAGING_EVENT" /></intent-filter></service>
Rest of the code same as OP.
Hi All, really struggling to get this working. I have been away from Xamarin for 18 months and gone native but due to a client requesting Xamarin I am back here.
I have similar code working in a native java app but I am struggling with this.
I have the above code in my manifest but I am getting the following
Java.Lang.RuntimeException: Unable to instantiate service .MyFirebaseMessagingService: java.lang.ClassNotFoundException: Didn't find class "packagename.MyFirebaseMessagingService" on path: DexPathList
PS I don't have proguard enabled
Ok guys, in case it helps anyone else, I have this working now. I needed to add this to the top of my service
[Service (Name= "packagename.MyFirebaseMessagingService")]
it now fires the onNewtoken and finds the service
Onwards and Upwards :-)
Im using Xamarin.Firebase.Messaging version 60.1142.1 and it is erroring saying that FirebaseInstanceIdService is deprecated and at runtime we are getting the unsuccessful registration for firebase error, even after cleaning and rebuilding the android project. Is there going to be a fix for Xamarin.Firebase.Messaging version 60.1142.1 ?
@SamPollock can you show us your android manifest?
I cant really show the manifest however the relevant part is
God bless you, Sam! You saved my day!
My resulting file (MyFirebaseMessagingService.cs) looks like:
This is correct -
onNewToken()
will be called only once per installation. If you need it to be called again, uninstall the app from your device and restart it.I found this up to date documentation made by Microsoft:
docs.microsoft.com/en-us/azure/notification-hubs/xamarin-notification-hubs-push-notifications-android-gcm#set-up-notification-hubs-in-your-project
(sorry about the broken link, this forum doesn't allow to insert link when you are new)
@SamPollock We are facing the same issue where OnNewToken method never hits , I have tried all the possible ways mentioned above, and when i try this FirebaseMessaging.Instance.AutoInitEnabled = true; The below error is thrown at Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x0006e] in :0
at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0002a] in :0
at Firebase.Messaging.FirebaseMessaging.set_AutoInitEnabled (System.Boolean value) [0x00022] in <950f147afc11488abae5c0be3de4f06e>:0
at AspenConnect.Droid.MainActivity.OnCreate (Android.OS.Bundle savedInstanceState) [0x00130] in /Users/733728/Documents/GitHub/AspenConnect/AspenConnect/AspenConnect.Android/MainActivity.cs:96
--- End of managed Java.Lang.NullPointerException stack trace ---
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.firebase.iid.FirebaseInstanceId.zzb(boolean)' on a null object reference
at com.google.firebase.messaging.FirebaseMessaging.setAutoInitEnabled(Unknown Source:8)
at crc64c42fb79c8c2d6d3a.MainActivity.n_onCreate(Native Method)
at crc64c42fb79c8c2d6d3a.MainActivity.onCreate(MainActivity.java:33)
at android.app.Activity.performCreate(Activity.java:7224)
at android.app.Activity.performCreate(Activity.java:7213)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
@SamPollock We are facing the same issue where OnNewToken method never hits , I have tried all the possible ways mentioned above, and when i try this FirebaseMessaging.Instance.AutoInitEnabled = true; The below error is thrown:java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.firebase.iid.FirebaseInstanceId.zzb(boolean)' on a null object reference
at com.google.firebase.messaging.FirebaseMessaging.setAutoInitEnabled(Unknown Source:8)
Apologies Kanth, I cant really look into this at the moment, I am not currently doing much Xamarin as have moved mainly native although still have a few projects on the go, if anything springs to mind when I get back to them in a few weeks I will post here.
Including the Xamarin.Android.ManifestMerger solved this issue for me:
https://www.nuget.org/packages/Xamarin.Android.ManifestMerger/1.0.0-preview03
Using this fixed by issue
After two days of troubleshooting, finally i found out that the latest versions of the below nuget packages (or may be one of them) is causing this. I downgraded to the below versions and it started working.