- 
      
- 
        Save jfversluis/dd760594099066c7450d50cce6499368 to your computer and use it in GitHub Desktop. 
| * Setup Firebase project like normal and add google-services.json (make sure Build action is set to GoogleServicesJson) | |
| * Nugets required for MAUI project file (later versions don't work) | |
| <ItemGroup Condition="'$(TargetFramework)' == 'net6.0-android'"> | |
| <PackageReference Include="Xamarin.Firebase.Iid" Version="121.1.0" /> | |
| <PackageReference Include="Xamarin.Firebase.Messaging" Version="122.0.0" /> | |
| <PackageReference Include="Xamarin.Google.Dagger" Version="2.39.1" /> | |
| <PackageReference Include="Xamarin.GooglePlayServices.Base" Version="117.6.0.5" /> | |
| </ItemGroup> | |
| using Android.App; | |
| using Android.Content; | |
| using AndroidX.Core.App; | |
| using Firebase.Messaging; | |
| namespace FCMApp.Android; | |
| [Service(Exported = false)] | |
| [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })] | |
| public class FCMService : FirebaseMessagingService | |
| { | |
| public override void OnMessageReceived(RemoteMessage message) | |
| { | |
| RemoteMessage.Notification notification = message.GetNotification(); | |
| IDictionary<string, string> data = message.Data; | |
| string body = ""; | |
| string title = ""; | |
| if (data != null && data.ContainsKey("body") && data.ContainsKey("title")) | |
| { | |
| body = data["body"]; | |
| title = data["title"]; | |
| } | |
| else if (notification != null) | |
| { | |
| body = message.GetNotification().Body; | |
| title = message.GetNotification().Title; | |
| } | |
| if (!string.IsNullOrEmpty(body) && !string.IsNullOrEmpty(title)) | |
| { | |
| // TODO: Manage this message (we get here only when app is in foreground) | |
| } | |
| } | |
| } | 
| namespace FCMApp; | |
| public interface IMessagingService | |
| { | |
| string GetToken(); | |
| bool IsMessagingAvailable(); | |
| void SetNewTokenCallback(Action<string> token_callback); | |
| } | |
| using Android.Gms.Common; | |
| using Android.Gms.Tasks; | |
| using Firebase.Iid; | |
| namespace FCMApp; | |
| public partial class MessagingService | |
| { | |
| public partial bool IsMessagingAvailable() => GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(Android.App.Application.Context) == ConnectionResult.Success; | |
| public partial string GetToken() => FirebaseInstanceId.Instance.Token; | |
| public partial void SetNewTokenCallback(Action<string> token_callback) | |
| { | |
| if (token_callback == null) | |
| throw new InvalidOperationException("Callback cannot be null"); | |
| if (GetToken() != null) | |
| token_callback(GetToken()); | |
| else | |
| FirebaseInstanceId.Instance.GetInstanceId().AddOnSuccessListener(new OnTokenListener((token) => token_callback(token))); | |
| } | |
| } | |
| public class OnTokenListener : Java.Lang.Object, IOnSuccessListener | |
| { | |
| Action<string> _callback; | |
| public OnTokenListener(Action<string> success_callback) => _callback = success_callback; | |
| public void OnSuccess(Java.Lang.Object result) => _callback?.Invoke(FirebaseInstanceId.Instance.Token); | |
| } | 
| namespace FCMApp; | |
| public partial class MessagingService : IMessagingService | |
| { | |
| public partial string GetToken(); | |
| public partial bool IsMessagingAvailable(); | |
| public partial void SetNewTokenCallback(Action<string> token_callback); | |
| } | 
This code gave me some first results and put me on the right track. (mostly the working packages and OnMessageReceived service)
However it uses a lot of obsolete methods so I had to rewrite almost everything from parts found in different projects / documentations / samples ...
Do we have any way to implement push notification sin MAUI
@AnjanaJois20 this code is for .NET MAUI or Xamarin.Forms for that matter. There is no difference between it
FirebaseInstanceId is deprecated.
I just put together a tutorial how to get work FCM and .NET MAUI for iOS platform. Hopefully will help someone...
Awesome @michalpr! Thanks for that!
@maurobernal
Replace the deprecated FirebaseInstanceId with FirebaseMessaging.
- FirebaseInstanceId.Instance.Token -> (string)FirebaseMessaging.Instance.GetToken().Result
- FirebaseInstanceId.Instance.GetInstanceId().AddOnSuccessListener(... -> FirebaseMessaging.Instance.GetToken().AddOnSuccessListener(...
- .Invoke(FirebaseInstanceId.Instance.Token) -> .Invoke((string)FirebaseMessaging.Instance.GetToken()
I have a clarifying question. How can I send a push inside my application to a user via FCM using the Messaging Service or FCMService? Please give examples
do you have working MAUI example for android?
Thanks @peter-bozovic ! Did you get it to work with this?
I don't have anything for iOS right now yet