1

I can send notification to specific user from firbase consol but I want to send notification from one device to another specific user device using button click event.Thanks in advance for your support in this regards.

    var btnSendNotification = FindViewById<Button>(Resource.Id.btnSendNotification);
        btnSendNotification.Click += delegate
        {
            //this details i will get from EditTextTitle,EditTextMessage,EditTextToken
            string title = "title";
            string message = "message";
            string token = "token";

           

        };

Here adding my current codes for your reference.

MyFirebaseMessagingService class

    using System;
    using Android.App;
    using Android.Content;
    using Android.Media;
    using Android.Util;
    using Firebase.Messaging;
    using FCMClient;
    using System.Collections.Generic;
    using AndroidX.Core.App;

    namespace FCMClient
    {
    [Service]
    [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
    public class MyFirebaseMessagingService : FirebaseMessagingService
    {
    const string TAG = "MyFirebaseMsgService";
    public override void OnMessageReceived(RemoteMessage message)
    {
        Log.Debug(TAG, "From: " + message.From);
       // Log.Debug(TAG, "Notification Message Body: " + 
    message.GetNotification().Body);

        var body = message.GetNotification().Body;
        Log.Debug(TAG, "Notification Message Body: " + body);
        SendNotification(body, message.Data);
    }

    void SendNotification(string messageBody, IDictionary<string, string> data)
    {
        var intent = new Intent(this, typeof(MainActivity));
        intent.AddFlags(ActivityFlags.ClearTop);
        foreach (var key in data.Keys)
        {
            intent.PutExtra(key, data[key]);
        }

        var pendingIntent = PendingIntent.GetActivity(this,
                                                      MainActivity.NOTIFICATION_ID,
                                                      intent,
                                                      PendingIntentFlags.OneShot);

        var notificationBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
                                  .SetSmallIcon(Resource.Drawable.abc_ic_star_black_36dp)
                                  .SetContentTitle("FCM Message")
                                  .SetContentText(messageBody)
                                  .SetAutoCancel(true)
                                  .SetContentIntent(pendingIntent);

        var notificationManager = NotificationManagerCompat.From(this);
        notificationManager.Notify(MainActivity.NOTIFICATION_ID, 
        notificationBuilder.Build());
    }
   }
 }

MyFirebaseIIDService class

    using System;
    using Android.App;
    using Firebase.Iid;
    using Android.Util;

    namespace FCMClient
    {
     [Service]
     [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]

     public class MyFirebaseIIDService : FirebaseInstanceIdService
     {
       const string TAG = "MyFirebaseIIDService";
       public override void OnTokenRefresh()
       {
        var refreshedToken = FirebaseInstanceId.Instance.Token;
        Log.Debug(TAG, "Refreshed token: " + refreshedToken);
        
       }
   
     }
   }

MainActivity

    using Android.OS;
    using Android.Runtime;
    using AndroidX.AppCompat.App;
    using Android.Gms.Common;
    using Firebase.Messaging;
    using Firebase.Iid;
    using Android.Util;
    using Android.Widget;

    namespace FCMClient
    {
     [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
     public class MainActivity : AppCompatActivity
     {
       static readonly string TAG = "MainActivity";

        internal static readonly string CHANNEL_ID = "my_notification_channel";
        internal static readonly int NOTIFICATION_ID = 100;

        TextView msgText;

   
        protected override void OnCreate(Bundle savedInstanceState)
        {
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);

        msgText = FindViewById<TextView>(Resource.Id.msgText);

        IsPlayServicesAvailable();

        CreateNotificationChannel();

        var logTokenButton = FindViewById<Button>(Resource.Id.logTokenButton);
        logTokenButton.Click += delegate 
        {
            Log.Debug(TAG, "InstanceID token: " + FirebaseInstanceId.Instance.Token);
        };

        var btnSendNotification = FindViewById<Button>(Resource.Id.btnSendNotification);
        btnSendNotification.Click += delegate
        {
            //this details i will get from EditTextTitle,EditTextMessage,EditTextToken
            string title = "title";
            string message = "message";
            string token = "token";

        };
    }

    public bool IsPlayServicesAvailable()
    {
        int resultCode = 
        GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.Success)
        {
            if (GoogleApiAvailability.Instance.IsUserResolvableError(resultCode))
                msgText.Text = GoogleApiAvailability.Instance.GetErrorString(resultCode);
            else
            {
                msgText.Text = "This device is not supported";
                Finish();
            }
            return false;
        }
        else
        {
            msgText.Text = "Google Play Services is available.";
            return true;
        }
    }

    void CreateNotificationChannel()
    {
        if (Build.VERSION.SdkInt < BuildVersionCodes.O)
        {
            // Notification channels are new in API 26 (and not a part of the
            // support library). There is no need to create a notification
            // channel on older versions of Android.
            return;
        }

        var channel = new NotificationChannel(CHANNEL_ID,
                                              "FCM Notifications",
                                              NotificationImportance.Default)
        {

            Description = "Firebase Cloud Messages appear in this channel"
        };

        var notificationManager = (NotificationManager)GetSystemService(Android.Content.Context.NotificationService);
        notificationManager.CreateNotificationChannel(channel);
    }

    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }
  }
 }
  • Please send Http to the FCM server and then use okhttp3, refer to this thread:https://stackoverflow.com/questions/49290996/xamarin-android-fcm-notification-client-to-clientphone-to-phone – Alexandar May - MSFT May 02 '22 at 08:39
  • @ Alexandar Thank you soo much its working. title and Body reflecting in notification FCMClient and FCM Message respectively , not what I add the title and body – Ashfaque Baig May 03 '22 at 03:13

0 Answers0