Android पर Firebase क्लाउड से मैसेज वाला क्लाइंट ऐप्लिकेशन सेट अप करना

FCM क्लाइंट को Android 4.4 या जिनके पास Google Play Store ऐप्लिकेशन भी इंस्टॉल है या फिर कोई एम्युलेटर जो Google API के साथ Android 4.4 चला रहे हैं. ध्यान दें कि आप इनके ज़रिए अपने Android ऐप्लिकेशन को डिप्लॉय कर सकते हैं Google Play Store पर टैप करें.

SDK टूल सेट अप करें

इस सेक्शन में उन टास्क के बारे में बताया गया है जिन्हें आपने पहले ही चालू कर दिया था. Firebase की अन्य सुविधाएं उपलब्ध हैं. अगर आपने पहले से Firebase को नहीं जोड़ा है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें

अपने ऐप्लिकेशन मेनिफ़ेस्ट में बदलाव करें

अपने ऐप्लिकेशन के मेनिफ़ेस्ट में यह जानकारी जोड़ें:

  • ऐसी सेवा जो FirebaseMessagingService के दायरे में आती है. ऐसा करना ज़रूरी है, अगर इस तरह के ऐप्लिकेशन पर सूचनाएं पाने के अलावा, किसी भी तरह के मैसेज मैनेज करने की सुविधा चाहिए बैकग्राउंड. फ़ोरग्राउंड में चलने वाले ऐप्लिकेशन में सूचनाएं पाने के लिए, डेटा पेलोड, अपस्ट्रीम मैसेज भेजने के लिए, और इसी तरह के अन्य काम करने के लिए, आपको सेवा.
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (ज़रूरी नहीं) ऐप्लिकेशन के कॉम्पोनेंट में, डिफ़ॉल्ट सूचना सेट करने के लिए मेटाडेटा एलिमेंट आइकन और रंग. इनकमिंग कॉल के दौरान Android इन वैल्यू का इस्तेमाल करता है संदेश स्पष्ट रूप से आइकन या रंग सेट नहीं करते हैं.
  • <!-- Set custom default icon. This is used when no icon is set for incoming notification messages.
         See README(https://goo.gl/l4GJaQ) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_ic_notification" />
    <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming
         notification message. See README(https://goo.gl/6BKBk7) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />
  • (ज़रूरी नहीं) Android 8.0 (एपीआई लेवल 26) और इसके बाद वाले वर्शन से, सूचना के चैनल इस्तेमाल किए जा सकते हैं और इनका सुझाव दिया जाता है. FCM डिफ़ॉल्ट उपलब्ध कराता है सूचना चैनल पर जाएं. अगर आपको अपनी पसंद का अपना डिफ़ॉल्ट चैनल बनाएं और उसका इस्तेमाल करें. default_notification_channel_id को अपने सूचना चैनल ऑब्जेक्ट के आईडी पर सेट करें जैसा कि दिखाया गया है; FCM इसका इस्तेमाल करेगा जब आने वाले संदेश स्पष्ट रूप से सूचना सेट नहीं करते हैं, तब मान चैनल. इस बारे में ज़्यादा जानने के लिए, यह देखें सूचनाओं के चैनल मैनेज करना.
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

Android 13 और इसके बाद के वर्शन पर रनटाइम की सूचना की अनुमति का अनुरोध करना

Android 13 में, सूचनाएं दिखाने के लिए रनटाइम की नई अनुमति जोड़ी गई है. यह Android 13 या इसके बाद के वर्शन पर चल रहे उन सभी ऐप्लिकेशन पर असर पड़ता है जो FCM का इस्तेमाल करते हैं नोटिफ़िकेशन.

डिफ़ॉल्ट रूप से, FCM SDK (23.0.6 या इसके बाद के वर्शन) में POST_NOTIFICATIONS मेनिफ़ेस्ट में बताई गई अनुमति है. हालांकि, आपके ऐप्लिकेशन को इसके रनटाइम वर्शन के लिए भी अनुरोध करना होगा कॉन्सटेंट, android.permission.POST_NOTIFICATIONS के ज़रिए अनुमति. आपके ऐप्लिकेशन को इस समय तक सूचनाएं दिखाने की अनुमति नहीं दी जाएगी उपयोगकर्ता ने यह अनुमति दी है.

रनटाइम की नई अनुमति का अनुरोध करने के लिए:

Kotlin+KTX

// Declare the launcher at the top of your Activity/Fragment:
private val requestPermissionLauncher = registerForActivityResult(
    ActivityResultContracts.RequestPermission(),
) { isGranted: Boolean ->
    if (isGranted) {
        // FCM SDK (and your app) can post notifications.
    } else {
        // TODO: Inform user that that your app will not show notifications.
    }
}

private fun askNotificationPermission() {
    // This is only necessary for API level >= 33 (TIRAMISU)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
            PackageManager.PERMISSION_GRANTED
        ) {
            // FCM SDK (and your app) can post notifications.
        } else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) {
            // TODO: display an educational UI explaining to the user the features that will be enabled
            //       by them granting the POST_NOTIFICATION permission. This UI should provide the user
            //       "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission.
            //       If the user selects "No thanks," allow the user to continue without notifications.
        } else {
            // Directly ask for the permission
            requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
        }
    }
}

Java

// Declare the launcher at the top of your Activity/Fragment:
private final ActivityResultLauncher<String> requestPermissionLauncher =
        registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
            if (isGranted) {
                // FCM SDK (and your app) can post notifications.
            } else {
                // TODO: Inform user that that your app will not show notifications.
            }
        });

private void askNotificationPermission() {
    // This is only necessary for API level >= 33 (TIRAMISU)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
                PackageManager.PERMISSION_GRANTED) {
            // FCM SDK (and your app) can post notifications.
        } else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) {
            // TODO: display an educational UI explaining to the user the features that will be enabled
            //       by them granting the POST_NOTIFICATION permission. This UI should provide the user
            //       "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission.
            //       If the user selects "No thanks," allow the user to continue without notifications.
        } else {
            // Directly ask for the permission
            requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
        }
    }
}

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

सूचना के लिए रनटाइम की अनुमति देखें आपके ऐप्लिकेशन को POST_NOTIFICATIONS उपयोगकर्ता से अनुमति मिली.

Android 12L (एपीआई लेवल 32) या इससे पहले के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, सूचना की अनुमतियां

आपके ऐप्लिकेशन के पहली बार होने पर, Android अपने-आप उपयोगकर्ता से अनुमति मांगता है अगर ऐप्लिकेशन फ़ोरग्राउंड में है, तो सूचना का चैनल बनाया जा सकता है. हालांकि, चैनल बनाते समय इन बातों का ध्यान रखना ज़रूरी है कि और अनुमति के अनुरोध:

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

ज़रूरी नहीं: POST_NOTIFICATIONS की अनुमति हटाएं

डिफ़ॉल्ट रूप से, FCM SDK टूल में POST_NOTIFICATIONS की अनुमति शामिल होती है. अगर आपका ऐप्लिकेशन सूचना वाले मैसेज का इस्तेमाल नहीं करता (चाहे FCM के ज़रिए हो या सीधे आपके ऐप्लिकेशन से पोस्ट की जाने वाली सूचनाओं के लिए) और आपको नहीं चाहते कि आपका ऐप्लिकेशन अनुमति शामिल करे, तो आप मेनिफ़ेस्ट मर्जर का remove मार्कर. ध्यान रखें कि इस अनुमति को हटाने से, बल्कि FCM नोटिफ़िकेशन के साथ-साथ सभी सूचनाओं के लिए भी उपलब्ध है. निम्न में निम्न जोड़ें की मेनिफ़ेस्ट फ़ाइल में दी गई है:

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" tools:node="remove"/>

डिवाइस रजिस्ट्रेशन टोकन को ऐक्सेस करना

आपके ऐप्लिकेशन के शुरुआती शुरू होने पर, FCM SDK एक रजिस्ट्रेशन जनरेट करता है क्लाइंट ऐप्लिकेशन इंस्टेंस के लिए टोकन. अगर आपको किसी एक डिवाइस को टारगेट करना है या डिवाइस ग्रुप बना सकते हैं, तो आपको FirebaseMessagingService और ओवरराइड onNewToken.

इस सेक्शन में, टोकन को फिर से पाने और बदलावों को मॉनिटर करने का तरीका बताया गया है उस टोकन के लिए इस्तेमाल किया जा सकता है. क्योंकि टोकन को इनीशियल के बाद घुमाया जा सकता है तो हमारा सुझाव है कि आप हाल ही में अपडेट किया गया रजिस्ट्रेशन फिर से पाएं टोकन.

रजिस्ट्रेशन टोकन तब बदल सकता है, जब:

  • ऐप्लिकेशन को नए डिवाइस पर वापस लाया गया
  • जब उपयोगकर्ता ऐप्लिकेशन को अनइंस्टॉल करता है/फिर से इंस्टॉल करता है
  • उपयोगकर्ता, ऐप्लिकेशन का डेटा मिटाता है.

मौजूदा रजिस्ट्रेशन टोकन वापस पाएं

जब आपको मौजूदा टोकन वापस पाना हो, तो कॉल करें FirebaseMessaging.getInstance().getToken():

Kotlin+KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

टोकन जनरेट करने की प्रोसेस पर नज़र रखें

जब भी कोई नया टोकन जनरेट होता है, तब onNewToken कॉलबैक ट्रिगर होता है.

Kotlin+KTX

/**
 * Called if the FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration token is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token)
}

Java

/**
 * There are two scenarios when onNewToken is called:
 * 1) When a new token is generated on initial app startup
 * 2) Whenever an existing token is changed
 * Under #2, there are three scenarios when the existing token is changed:
 * A) App is restored to a new device
 * B) User uninstalls/reinstalls the app
 * C) User clears app data
 */
@Override
public void onNewToken(@NonNull String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token);
}

टोकन पाने के बाद, उसे अपने ऐप्लिकेशन सर्वर और स्टोर पर भेजें अपने पसंदीदा तरीके से उसे अपडेट करें.

Google Play services देखें

ऐसे ऐप्लिकेशन जो Play सेवाओं के SDK टूल का इस्तेमाल करते हैं को पहले डिवाइस में काम करने वाले Google Play services APK की जांच करनी चाहिए Google Play services की सुविधाओं को ऐक्सेस करना. हमारा सुझाव है कि आप दो जगह: मुख्य गतिविधि के onCreate() तरीके में और onResume() तरीका. onCreate() की जांच से यह पक्का होता है कि ऐप्लिकेशन का इस्तेमाल, जांच के बिना नहीं किया जा सकता. onResume() की जांच से पक्का होता है कि अगर उपयोगकर्ता किसी दूसरे तरीके से, अपने डिवाइस पर चल रहे ऐप्लिकेशन पर वापस आता है, जैसे कि चेक अब भी जारी है.

अगर डिवाइस में Google Play services के साथ काम करने वाला वर्शन नहीं है, तो आपके ऐप्लिकेशन से GoogleApiAvailability.makeGooglePlayServicesAvailable() उपयोगकर्ता, Play Store से Google Play services डाउनलोड कर सकें.

अपने-आप शुरू होने से रोकें

FCM रजिस्ट्रेशन टोकन जनरेट होने पर, लाइब्रेरी अपलोड हो जाती है आइडेंटिफ़ायर और कॉन्फ़िगरेशन डेटा को Firebase. अगर आपको टोकन अपने-आप जनरेट होने से रोकना है, तो Analytics को इकट्ठा करने की सुविधा बंद करें और अपने AndroidManifest.xml:

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

FCM को अपने-आप चालू होने की सुविधा को फिर से चालू करने के लिए, रनटाइम कॉल करें:

Kotlin+KTX

Firebase.messaging.isAutoInitEnabled = true

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Analytics कलेक्शन को फिर से चालू करने के लिए, setAnalyticsCollectionEnabled() FirebaseAnalytics क्लास का तरीका. उदाहरण के लिए:

setAnalyticsCollectionEnabled(true);

सेट होने के बाद ऐप्लिकेशन के रीस्टार्ट होने पर ये वैल्यू बनी रहती हैं.

अगले चरण

क्लाइंट ऐप्लिकेशन सेट अप होने के बाद, शुरू किया जा सकता है के साथ डाउनस्ट्रीम संदेश भेज रहे हैं नोटिफ़िकेशन कंपोज़र. यह सुविधा क्विकस्टार्ट सैंपल में दिखाया जाता है, जिसे डाउनलोड, चलाया, और देखा जा सकता है.

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

इन बातों का ध्यान रखें ताकि इन सभी मामलों में इन सुविधाओं को देखना न भूलें, तो आपको सर्वर को लागू करना और सर्वर प्रोटोकॉल (एचटीटीपी या XMPP) या एडमिन SDK को लागू करना.