firebase - एंड्रॉइड में फायरबेस नोटिफिकेशन यानी अधिसूचना संदेश और डेटा संदेशों को कैसे संभालें



xamarin xamarin.android (1)

Xamarin Android का उपयोग करते हुए फायरबेस में अधिसूचना संदेश और डेटा संदेश दोनों को संभालने का सबसे अच्छा तरीका क्या है, जबकि उपयोगकर्ता फ़ोरग्राउंड और बैकग्राउंड में है?

इसके अलावा, मुझे सूचना डेटा कैसे मिलता है, उदाहरण के लिए, किसी विशेष अधिसूचना का पाठ?

पुनश्च: मैंने निम्नलिखित सूत्र देखे हैं और वास्तव में किसी ने भी मदद नहीं की है:

जब डिवाइस स्क्रीन बंद है तो फायरबेस नोटिफिकेशन को कैसे संभालें?

फायरबेस अधिसूचना और डेटा

Android ट्रे पर फायरबेस अधिसूचना डेटा-संदेश प्रदर्शित करें


खैर, मुझे अपने ही सवाल का जवाब मिल गया है इसलिए मैं किसी ऐसे व्यक्ति के लिए जवाब पोस्ट कर रहा हूं जो xamarin में फायरबेस एकीकरण की तलाश कर रहा है।

  • अपनी परियोजना के लिए Xamarin.Firebase.Messaging पैकेज स्थापित करें।

  • फायरबेस नोटिफिकेशन प्राप्त करने के लिए अपने मैनिफ़ेस्ट.xml में निम्न कोड जोड़ें।

    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>
    
  • अब फायरबेस से पंजीकरण टोकन प्राप्त करने के लिए एक वर्ग फ़ाइल जोड़ें और इसमें निम्न कोड जोड़ें:

    [Service]
    [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
    public class MyFirebaseIIDService : FirebaseInstanceIdService
    {
      public override void OnTokenRefresh()
       {
            const string TAG = "MyFirebaseIIDService";
            var refreshedToken = FirebaseInstanceId.Instance.Token;
            Log.Debug(TAG, "Refreshed token: " + refreshedToken);
            SendRegistrationToServer(refreshedToken);
        }
       void SendRegistrationToServer(string token)
        {
           // Add custom implementation, as needed.
        }
    }
    

    यहां FirebaseInstanceId.Instance.Token को वर्तमान डिवाइस के लिए टोकन प्राप्त होता है, साथ ही SendRegistrationToServer विधि का उपयोग टोकन को सर्वर पर भेजने के लिए किया जा सकता है।

  • अब अग्रभूमि पर सूचनाओं को संभालने के लिए एक और वर्ग जोड़ें

    [Service]
    [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
    public class MyFirebaseMessagingService : FirebaseMessagingService
    {
       // private string TAG = "MyFirebaseMsgService";
          public override void OnMessageReceived(RemoteMessage message)
       {
           base.OnMessageReceived(message);
           string messageFrom = message.From;
           string getMessageBody = message.GetNotification().Body;
           SendNotification(message.GetNotification().Body);
       }
    void SendNotification(string messageBody)
    {
        try
        {
            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);
            var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
    
            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .SetSmallIcon(Resource.Drawable.ic_stat_ic_notification)
                .SetContentTitle("Title")
                .SetContentText(messageBody)
                .SetAutoCancel(true)
                .SetContentIntent(pendingIntent);
    
            NotificationManagerCompat notificationManager = NotificationManagerCompat.From(this);
            notificationManager.Notify(0, notificationBuilder.Build());
        }
        catch (Exception ex)
        {
    
        }
       }
     }
    

यहां विधि SendNotification का उपयोग स्पष्ट रूप से सिस्टम ट्रे में एक अधिसूचना भेजने के लिए किया जाता है, क्योंकि पुश सूचनाएँ जबकि डिवाइस अग्रभूमि में है स्वचालित रूप से सिस्टम ट्रे में प्रदर्शित नहीं होती हैं।

  • जब डिवाइस बैकग्राउंड में है या मार दिया गया नोटिफिकेशन अपने आप उत्पन्न हो जाता है और डिफ़ॉल्ट रूप से मुख्य लॉन्चर गतिविधि लोड हो जाती है, तो बैकग्राउंड नोटिफिकेशन से डेटा प्राप्त करने के लिए आपको निम्नानुसार आशय का उपयोग करने की आवश्यकता होती है (आपकी मुख्य लॉन्चर गतिविधि पर):

      if (Intent.Extras != null)
        {
            foreach (var key in Intent.Extras.KeySet())
            {
                var value = Intent.Extras.GetString(key);
                Log.Debug(TAG, "Key: {0} Value: {1}", key, value);
            }
        }
    
  • यदि Google play सेवाएं आज तक नहीं हैं, तो यह कोड आपके एप्लिकेशन को क्रैश कर सकता है ताकि यह जांच सके कि Google play सेवाएं उपलब्ध हैं या नहीं:

    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;
        }
    }
    

अपने प्रोजेक्ट को फायरबेस कंसोल में कैसे जोड़ा जाए, इसकी जानकारी के लिए नीचे दिए गए लिंक की जाँच करें:

https://developer.xamarin.com/guides/android/data-and-cloud-services/google-messaging/remote-notifications-with-fcm/ \

अद्यतन करें

  • एंड्रॉइड ओरियो में हाल के बदलावों के बाद यह अनिवार्य है कि आप अपने नोटिफिकेशन को एक चैनल में शामिल करें, इसके लिए आपको अपने मेनएक्टिविटी में एक अधिसूचना चैनल बनाने की आवश्यकता है जैसे कि नीचे कुछ:

    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(NotificationService);
    notificationManager.CreateNotificationChannel(channel);
    }
    

इस विधि को आप मेनएक्टिविटी की ऑनक्रिट विधि में कहें।





firebase-cloud-messaging