Android
फायरबेस क्लाउड मेसेजिंग
खोज…
परिचय
फायरबेस क्लाउड मैसेजिंग (FCM) एक क्रॉस-प्लेटफ़ॉर्म मैसेजिंग सॉल्यूशन है, जो आपको बिना किसी लागत के संदेश देने में मदद करता है।
FCM का उपयोग करके, आप एक क्लाइंट ऐप को सूचित कर सकते हैं कि सिंक करने के लिए नया ईमेल या अन्य डेटा उपलब्ध है। उपयोगकर्ता पुनर्संरचना और अवधारण को चलाने के लिए आप सूचना संदेश भेज सकते हैं। इंस्टेंट मैसेजिंग जैसे मामलों के उपयोग के लिए, एक संदेश ग्राहक ऐप पर 4KB
तक का पेलोड स्थानांतरित कर सकता है।
Android पर फायरबेस क्लाउड मैसेजिंग क्लाइंट ऐप सेट करें
अपने ऐप को Firebase से कनेक्ट करने के लिए इंस्टॉलेशन और सेटअप भाग को पूरा करें।
इससे फायरबेस में प्रोजेक्ट तैयार होगा।Firebase Cloud Messaging के लिए अपने मॉड्यूल-स्तर
build.gradle
फ़ाइल के लिए निर्भरता जोड़ें:
dependencies {
compile 'com.google.firebase:firebase-messaging:10.2.1'
}
अब आप Android में FCM के साथ काम करने के लिए तैयार हैं।
FCM क्लाइंट को Android 2.3
या उच्चतर चलाने वाले डिवाइसों की आवश्यकता होती है, जिसमें Google Play Store ऐप भी स्थापित होता है, या Google API के साथ एंड्रॉइड 2.3 चलाने वाला एमुलेटर।
अपनी AndroidManifest.xml
फ़ाइल संपादित करें
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
पंजीकरण टोकन
आपके ऐप के शुरुआती स्टार्टअप पर, FCM SDK क्लाइंट ऐप इंस्टेंट के लिए एक पंजीकरण टोकन बनाता है।
यदि आप एकल उपकरणों को लक्षित करना चाहते हैं या डिवाइस समूह बनाना चाहते हैं, तो आपको FirebaseInstanceIdService
विस्तार करके इस टोकन तक पहुंचने की आवश्यकता होगी।
जब भी कोई नया टोकन जेनरेट होता है, onTokenRefresh
कॉलबैक फायर करता है और आप वर्तमान टोकन को पुनः प्राप्त करने के लिए FirebaseInstanceID.getToken()
विधि का उपयोग कर सकते हैं।
उदाहरण:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is called when the InstanceID token
* is initially generated so this is where you would retrieve the token.
*/
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
}
}
यह कोड जिसे मैंने अपने ऐप में इमेज, मैसेज को पुश करने के लिए और अपने वेबव्यू में खोलने के लिए भी लिंक किया है
यह मेरा FirebaseMessagingService है
public class MyFirebaseMessagingService extends FirebaseMessagingService {
Bitmap bitmap;
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
String message = remoteMessage.getData().get("message");
//imageUri will contain URL of the image to be displayed with Notification
String imageUri = remoteMessage.getData().get("image");
String link=remoteMessage.getData().get("link");
//To get a Bitmap image from the URL received
bitmap = getBitmapfromUrl(imageUri);
sendNotification(message, bitmap,link);
}
/**
* Create and show a simple notification containing the received FCM message.
*/
private void sendNotification(String messageBody, Bitmap image, String link) {
Intent intent = new Intent(this, NewsListActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("LINK",link);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setLargeIcon(image)/*Notification icon image*/
.setSmallIcon(R.drawable.hindi)
.setContentTitle(messageBody)
.setStyle(new NotificationCompat.BigPictureStyle()
.bigPicture(image))/*Notification with Image*/
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
public Bitmap getBitmapfromUrl(String imageUrl) {
try {
URL url = new URL(imageUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(input);
return bitmap;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}}
और यह मेरे WebView में लिंक खोलने के लिए MainActivity है या इंटेंट्स के माध्यम से आपकी आवश्यकता पर अन्य ब्राउज़र को डिपेंड करता है।
if (getIntent().getExtras() != null) {
if (getIntent().getStringExtra("LINK")!=null) {
Intent i=new Intent(this,BrowserActivity.class);
i.putExtra("link",getIntent().getStringExtra("LINK"));
i.putExtra("PUSH","yes");
NewsListActivity.this.startActivity(i);
finish();
}}
संदेश प्राप्त करें
संदेश प्राप्त करने के लिए, एक ऐसी सेवा का उपयोग करें जो FirebaseMessagingService
को onMessageReceived
और onMessageReceived
विधि को ओवरराइड करती है।
public class MyFcmListenerService extends FirebaseMessagingService {
/**
* Called when message is received.
*
* @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
*/
@Override
public void onMessageReceived(RemoteMessage message) {
String from = message.getFrom();
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
Map<String, String> data = message.getData();
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
//.....
}
जब एप्लिकेशन पृष्ठभूमि में होता है, तो एंड्रॉइड सिस्टम ट्रे को अधिसूचना संदेश भेजता है। अधिसूचना पर एक उपयोगकर्ता टैप डिफ़ॉल्ट रूप से ऐप लॉन्चर खोलता है।
इसमें वे संदेश शामिल हैं जिनमें अधिसूचना और डेटा पेलोड (और अधिसूचना कंसोल से भेजे गए सभी संदेश) शामिल हैं। इन मामलों में, अधिसूचना डिवाइस के सिस्टम ट्रे में वितरित की जाती है, और डेटा पेलोड को आपके लॉन्चर गतिविधि के इरादे के अतिरिक्त में वितरित किया जाता है।
यहाँ एक संक्षिप्त पुनर्कथन:
ऐप की स्थिति | अधिसूचना | डेटा | दोनों |
---|---|---|---|
अग्रभूमि | onMessageReceived | onMessageReceived | onMessageReceived |
पृष्ठभूमि | सिस्टम ट्रे | onMessageReceived | अधिसूचना: सिस्टम ट्रे |
डेटा: इरादे के अतिरिक्त में। |
किसी विषय की सदस्यता लें
ग्राहक एप्लिकेशन किसी भी मौजूदा विषय की सदस्यता ले सकते हैं, या वे एक नया विषय बना सकते हैं। जब कोई क्लाइंट ऐप एक नए विषय के नाम की सदस्यता लेता है, तो एफसीएम में उस नाम का एक नया विषय बनाया जाता है और कोई भी ग्राहक बाद में इसकी सदस्यता ले सकता है।
किसी विषय की subscribeToTopic()
लिए subscribeToTopic()
नाम का उपयोग कर subscribeToTopic()
विधि का उपयोग करें:
FirebaseMessaging.getInstance().subscribeToTopic("myTopic");