| प्लैटफ़ॉर्म चुनें: | iOS+ Android Web Flutter Unity C++ |
इस गाइड में बताया गया है कि Apple प्लैटफ़ॉर्म (जैसे, iOS) के क्लाइंट ऐप्लिकेशन में Firebase Cloud Messaging का इस्तेमाल कैसे शुरू किया जा सकता है, ताकि भरोसेमंद तरीके से मैसेज भेजे जा सकें.
Apple क्लाइंट ऐप्लिकेशन के लिए, Firebase Cloud Messaging APNs इंटरफ़ेस पर 4,096 बाइट तक की सूचना और डेटा पेलोड मिल सकते हैं.
हमारा सुझाव है कि आप Objective-C या Swift में क्लाइंट कोड लिखने के लिए, FIRMessaging API का इस्तेमाल करें. क्विकस्टार्ट के उदाहरण में, दोनों भाषाओं के लिए सैंपल कोड दिया गया है.
शुरू करने से पहले, अपने Apple प्रोजेक्ट में Firebase जोड़ें.
Firebase Cloud Messaging में मेथड स्विज़लिंग
FCM SDK, दो मुख्य क्षेत्रों में मेथड स्विज़लिंग करता है: आपके APNs टोकन को Firebase इंस्टॉलेशन आईडी या FCM रजिस्ट्रेशन टोकन पर मैप करना और डाउनस्ट्रीम मैसेज कॉलबैक हैंडलिंग के दौरान, आंकड़ों का डेटा कैप्चर करना.
जिन डेवलपर को स्विज़लिंग का इस्तेमाल नहीं करना है वे इसे बंद कर सकते हैं. इसके लिए, उन्हें ऐप्लिकेशन की Info.plist फ़ाइल में FirebaseAppDelegateProxyEnabled फ़्लैग जोड़ना होगा और इसे बूलियन वैल्यू NO पर सेट करना होगा. गाइड के ज़रूरी हिस्सों में कोड के उदाहरण दिए गए हैं. इनमें, मेथड स्विज़लिंग की सुविधा चालू और बंद, दोनों के उदाहरण शामिल हैं.
APNs की पुष्टि करने वाली कुंजी अपलोड करना
APNs की पुष्टि करने वाली कुंजी को Firebase पर अपलोड करें. अगर आपके पास पहले से APNs की पुष्टि करने वाला पासकोड नहीं है, तो Apple Developer Member Center में जाकर, एक पासकोड बनाएं.
-
Firebase कंसोल में,
सेटिंग > सामान्य पर जाएं. इसके बाद, Cloud Messaging टैब पर क्लिक करें. - iOS ऐप्लिकेशन कॉन्फ़िगरेशन में जाकर, APNs की पुष्टि करने वाली कुंजी में जाकर, अपलोड करें पर क्लिक करें. इसके बाद, डेवलपमेंट की पुष्टि करने वाली कुंजी या प्रोडक्शन की पुष्टि करने वाली कुंजी या दोनों को अपलोड करें. कम से कम एक इमेज होनी चाहिए.
- उस जगह पर ब्राउज़ करें जहां आपने अपनी कुंजी सेव की है. इसके बाद, उसे चुनें और खोलें पर क्लिक करें. कुंजी के लिए कुंजी आईडी जोड़ें. यह Apple Developer Member Center में उपलब्ध है. इसके बाद, अपलोड करें पर क्लिक करें.
रिमोट नोटिफ़िकेशन के लिए रजिस्टर करना
स्टार्टअप के समय या ऐप्लिकेशन के फ़्लो में अपनी पसंद के पॉइंट पर, रिमोट सूचनाओं के लिए अपने ऐप्लिकेशन को रजिस्टर करें.registerForRemoteNotifications को इस तरह कॉल करें:
Swift
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
Objective-C
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
Firebase इंस्टॉलेशन आईडी को ऐक्सेस करना
डिफ़ॉल्ट रूप से, FCM SDK, ऐप्लिकेशन इंस्टेंस को FCM के साथ रजिस्टर करता है. साथ ही, ऐप्लिकेशन लॉन्च होने पर क्लाइंट ऐप्लिकेशन इंस्टेंस के लिए Firebase इंस्टॉलेशन आईडी (FID) दिखाता है. APNs डिवाइस टोकन की तरह ही, यह FID आपको अपने ऐप्लिकेशन के किसी खास इंस्टेंस को टारगेट की गई सूचनाएं भेजने की अनुमति देता है.
Apple प्लैटफ़ॉर्म, आम तौर पर ऐप्लिकेशन शुरू होने पर APNs डिवाइस टोकन डिलीवर करते हैं. इसी तरह, FCM सूचनाएं टारगेट करने के लिए, FID उपलब्ध कराता है. FCM SDK, FIRMessagingDelegate के
messaging:didReceiveRegistration: तरीके का इस्तेमाल करके एफ़आईडी डिलीवर करता है. यह एफ़आईडी में होने वाले बदलावों को अपने-आप मॉनिटर करता है. साथ ही, बदलाव का पता चलने पर, नए एफ़आईडी के साथ इस तरीके को लागू करता है.
हमारा सुझाव है कि आप एफआईडी को नियमित तौर पर वापस पाएं और अपलोड करें. ऐसा इसलिए, क्योंकि शुरुआती स्टार्टअप के बाद एफआईडी बदल सकता है.
Firebase इंस्टॉलेशन आईडी का इस्तेमाल करके रजिस्ट्रेशन की सुविधा चालू करना
FCM का इस्तेमाल करके, अपने ऐप्लिकेशन इंस्टेंस को रजिस्टर करने की सुविधा चालू करने के लिए,
Firebase इंस्टॉलेशन आईडी (एफ़आईडी) का इस्तेमाल करें. इसके लिए, अपने Info.plist फ़ाइल में यह मेटाडेटा फ़्लैग जोड़ें, न कि अपनी GoogleService-Info.plist फ़ाइल में:
FirebaseMessagingInstallationIdEnabled = YES
मैसेज भेजने का अधिकार रखने वाले व्यक्ति को सेट करना
एफआईडी पाने के लिए, मैसेजिंग डेलिगेट प्रोटोकॉल लागू करें. साथ ही, [FIRApp configure] को कॉल करने के बाद, FIRMessaging की delegate प्रॉपर्टी सेट करें.
उदाहरण के लिए, अगर आपका ऐप्लिकेशन डेलिगेट, मैसेजिंग डेलिगेट प्रोटोकॉल के मुताबिक काम करता है, तो application:didFinishLaunchingWithOptions: पर डेलिगेट को खुद पर सेट किया जा सकता है.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
didReceiveRegistration तरीके को लागू करना
रजिस्ट्रेशन पूरा होने के बाद, ऐप्लिकेशन इंस्टेंस को FID का इस्तेमाल करके टारगेट किया जाता है.
रजिस्ट्रेशन के दौरान FID पाने के लिए,
messaging:didReceiveRegistration: तरीका लागू करें.
आम तौर पर, इस तरीके को हर ऐप्लिकेशन स्टार्टअप के लिए एक बार FID के साथ लागू किया जाता है. इस
तरीके को कॉल करने पर, ये कार्रवाइयां की जा सकती हैं:
- अगर आपने अपने सर्वर को FID नहीं भेजा है या हाल ही में भेजा है, तो इसे अपने ऐप्लिकेशन सर्वर को भेजें.
- अगर सदस्यता नई है या उपयोगकर्ता ने ऐप्लिकेशन को फिर से इंस्टॉल किया है, तो एफआईडी को विषयों की सदस्यता लें.
Swift
func messaging(_ messaging: Messaging, didReceiveRegistration installationId: String?) { print("Firebase Installation ID: \(String(describing: installationId))") // Note: This callback is fired at each app startup. if let installationId = installationId { // Send the Firebase Installation ID to your app server. sendRegistrationToServer(installationId) } }
Objective-C
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistration:(nullable NSString *)installationId { NSLog(@"Firebase Installation ID: %@", installationId); // Note: This callback is fired at each app startup. if (installationId != nil) { // Send the Firebase Installation ID to your app server. [self sendRegistrationToServer:installationId]; } }
अपने-आप शुरू होने की सुविधा बंद होने पर, मैन्युअल तरीके से रजिस्टर करना
अगर आपने अपने-आप शुरू होने की सुविधा बंद कर दी है, तो ऐप्लिकेशन के शुरू होने पर FCM SDK, ऐप्लिकेशन इंस्टेंस को FCM के साथ अपने-आप रजिस्टर नहीं करेगा. ऐप्लिकेशन शुरू होने पर, आपको
messaging:didReceiveRegistration: तरीके से रजिस्ट्रेशन और FID डिलीवरी को ट्रिगर करने के लिए, register को कॉल करना होगा:
Swift
// Trigger manual registration if auto-initialization is turned off. Messaging.messaging().register { error in if let error = error { // Handle the error print("Failed registering: \(error)") return } // Registration was successful. FID is delivered through the messaging:didReceiveRegistration: method. print("Successfully registered.") }
Objective-C
// Trigger manual registration if auto-initialization is turned off. [[FIRMessaging messaging] registerWithCompletion:^(NSError * _Nullable error) { if (error) { // Handle the error NSLog(@"Failed registering: %@", error); return; } // Registration was successful. FID is delivered through the messaging:didReceiveRegistration: method. NSLog(@"Successfully registered."); }];
स्विलिंग की सुविधा बंद है: APNs टोकन और FID को मैप करना
अगर आपने मेथड स्विज़लिंग की सुविधा बंद कर दी है या SwiftUI ऐप्लिकेशन बनाया जा रहा है, तो आपको अपने APNs टोकन को Firebase इंस्टॉलेशन आईडी (एफ़आईडी) से साफ़ तौर पर मैप करना होगा. APNs टोकन पाने के लिए, application(_:didRegisterForRemoteNotificationsWithDeviceToken:) तरीके का इस्तेमाल करें. इसके बाद, Messaging की apnsToken प्रॉपर्टी सेट करें:
Swift
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Objective-C
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
FID रजिस्टर होने के बाद, इसे ऐक्सेस किया जा सकता है. साथ ही, स्विज़लिंग की सुविधा चालू होने पर इस्तेमाल किए जाने वाले तरीकों का इस्तेमाल करके, रीफ़्रेश इवेंट सुने जा सकते हैं.
रजिस्ट्रेशन टोकन ऐक्सेस करना
डिफ़ॉल्ट रूप से, FCM SDK टूल, ऐप्लिकेशन लॉन्च होने पर क्लाइंट ऐप्लिकेशन इंस्टेंस के लिए रजिस्ट्रेशन टोकन जनरेट करता है. APNs डिवाइस टोकन की तरह ही, इस टोकन की मदद से अपने ऐप्लिकेशन के किसी खास इंस्टेंस को टारगेट की गई सूचनाएं भेजी जा सकती हैं.
आम तौर पर, Apple प्लैटफ़ॉर्म ऐप्लिकेशन शुरू होने पर APNs डिवाइस टोकन डिलीवर करते हैं. इसी तरह, FCM FIRMessagingDelegate के messaging:didReceiveRegistrationToken: तरीके से रजिस्ट्रेशन टोकन उपलब्ध कराता है.
FCM SDK, ऐप्लिकेशन के शुरुआती लॉन्च के दौरान नया या मौजूदा टोकन वापस पाता है. साथ ही, जब भी टोकन अपडेट या अमान्य होता है, तब भी ऐसा होता है.
सभी मामलों में, FCM SDK, मान्य टोकन के साथ messaging:didReceiveRegistrationToken: को कॉल करता है.
रजिस्ट्रेशन टोकन में इन वजहों से बदलाव हो सकता है:
- ऐप्लिकेशन को किसी नए डिवाइस पर वापस लाया गया हो
- उपयोगकर्ता ऐप्लिकेशन को अनइंस्टॉल/फिर से इंस्टॉल करता है
- उपयोगकर्ता, ऐप्लिकेशन का डेटा मिटाता है.
मैसेज भेजने का अधिकार रखने वाले व्यक्ति को सेट करना
रजिस्ट्रेशन टोकन पाने के लिए, मैसेजिंग डेलिगेट प्रोटोकॉल लागू करें. साथ ही, [FIRApp configure] को कॉल करने के बाद, FIRMessaging की delegate प्रॉपर्टी सेट करें.
उदाहरण के लिए, अगर आपका ऐप्लिकेशन डेलिगेट, मैसेजिंग डेलिगेट प्रोटोकॉल के मुताबिक काम करता है, तो application:didFinishLaunchingWithOptions: पर डेलिगेट को खुद पर सेट किया जा सकता है.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
मौजूदा रजिस्ट्रेशन टोकन फ़ेच किया जा रहा है
रजिस्ट्रेशन टोकन, messaging:didReceiveRegistrationToken: तरीके से डिलीवर किए जाते हैं. इस तरीके को आम तौर पर, हर ऐप्लिकेशन के शुरू होने पर एक बार कॉल किया जाता है. इसके लिए, रजिस्ट्रेशन टोकन का इस्तेमाल किया जाता है. इस तरीके को कॉल करने पर, यह सबसे सही समय होता है, जब:
- अगर रजिस्ट्रेशन टोकन नया है, तो उसे अपने ऐप्लिकेशन सर्वर पर भेजें.
- रजिस्ट्रेशन टोकन को विषयों के लिए सदस्यता लें. इसकी ज़रूरत सिर्फ़ नई सदस्यताओं के लिए या उन स्थितियों में होती है जब उपयोगकर्ता ने ऐप्लिकेशन को फिर से इंस्टॉल किया हो.
token(completion:) का इस्तेमाल करके, टोकन को सीधे तौर पर वापस पाया जा सकता है. अगर किसी भी वजह से टोकन नहीं मिल पाता है, तो गड़बड़ी का मैसेज दिखता है.
Swift
Messaging.messaging().token { token, error in if let error = error { print("Error fetching remote FCM registration token: \(error)") } else if let token = token { print("Remote instance ID token: \(token)") } }
Objective-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error fetching the remote FCM registration token: %@", error); } else { NSLog(@"Remote FCM registration token: %@", token); NSString* message = [NSString stringWithFormat:@"FCM registration token: %@", token]; // display message NSLog(@"%@", message); } }];
टोकन को सेव करने के बजाय, इसे ऐक्सेस करने के लिए इस तरीके का इस्तेमाल किसी भी समय किया जा सकता है.
टोकन रीफ़्रेश करने की प्रोसेस को मॉनिटर करना
जब भी टोकन अपडेट हो, तब सूचना पाने के लिए, मैसेजिंग डेलिगेट प्रोटोकॉल का पालन करने वाला डेलिगेट उपलब्ध कराएं. यहां दिए गए उदाहरण में, डेलिगेट को रजिस्टर किया गया है और डेलिगेट का सही तरीका जोड़ा गया है:
Swift
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("Firebase registration token: \(String(describing: fcmToken))") // TODO: If necessary send token to application server. // Note: This callback is fired at each app startup and whenever a new token is generated. }
Objective-C
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken { NSLog(@"FCM registration token: %@", fcmToken); // Notify about received token. NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"]; [[NSNotificationCenter defaultCenter] postNotificationName: @"FCMToken" object:nil userInfo:dataDict]; // TODO: If necessary send token to application server. // Note: This callback is fired at each app startup and whenever a new token is generated. }
इसके अलावा, डेलिगेट करने का तरीका उपलब्ध कराने के बजाय, NSNotification नाम के kFIRMessagingRegistrationTokenRefreshNotification को सुना जा सकता है. टोकन प्रॉपर्टी में हमेशा मौजूदा टोकन की वैल्यू होती है.
Swizzling की सुविधा बंद है: APNs टोकन और रजिस्ट्रेशन टोकन को मैप करना
अगर आपने मेथड स्विज़लिंग की सुविधा बंद कर दी है या SwiftUI ऐप्लिकेशन बनाया जा रहा है, तो आपको अपने APNs टोकन को FCM रजिस्ट्रेशन टोकन से साफ़ तौर पर मैप करना होगा. APNs टोकन पाने के लिए, application(_:didRegisterForRemoteNotificationsWithDeviceToken:) तरीके का इस्तेमाल करें. इसके बाद, Messaging की apnsToken प्रॉपर्टी सेट करें:
Swift
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Objective-C
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
FCM रजिस्ट्रेशन टोकन जनरेट होने के बाद, इसे ऐक्सेस किया जा सकता है. साथ ही, स्विज़लिंग की सुविधा चालू होने पर इस्तेमाल किए जाने वाले तरीकों का इस्तेमाल करके, रीफ़्रेश इवेंट सुने जा सकते हैं.
अपने-आप शुरू होने की सुविधा को रोकना
FCM रजिस्ट्रेशन जनरेट होने पर, लाइब्रेरी आइडेंटिफ़ायर और कॉन्फ़िगरेशन डेटा को Firebase पर अपलोड करती है. अगर आपको उपयोगकर्ताओं से साफ़ तौर पर ऑप्ट-इन करवाना है, तो कॉन्फ़िगरेशन के समय, अपने-आप रजिस्टर होने की सुविधा को रोका जा सकता है. इसके लिए, आपको FCM को बंद करना होगा. इसके लिए, अपने Info.plist में मेटाडेटा वैल्यू जोड़ें (GoogleService-Info.plist में नहीं):
FirebaseMessagingAutoInitEnabled = NO
FCM को फिर से चालू करने के लिए, रनटाइम कॉल किया जा सकता है:
Swift
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
एक बार सेट हो जाने के बाद, ऐप्लिकेशन को रीस्टार्ट करने पर भी यह वैल्यू बनी रहती है.
सूचना सेवा एक्सटेंशन सेट अप करना
Apple डिवाइसों पर इमेज वाली सूचनाएं भेजने के लिए, आपको सूचना सेवा एक्सटेंशन जोड़ना होगा. इस एक्सटेंशन की मदद से डिवाइस, सूचना के पेलोड में भेजी गई इमेज दिखा सकते हैं. अगर आपको सूचनाओं में इमेज नहीं भेजनी हैं, तो इस चरण को छोड़ा जा सकता है.
सेवा एक्सटेंशन जोड़ने के लिए, APNs में सूचनाओं में बदलाव करने और उन्हें दिखाने से जुड़े ज़रूरी सेटअप टास्क पूरे करें. इसके बाद, NotificationService.m में FCM एक्सटेंशन हेल्पर एपीआई जोड़ें.
खास तौर पर, self.contentHandler(self.bestAttemptContent); के बजाय FIRMessaging
extensionHelper का इस्तेमाल करके कॉल बैक पूरा करें. जैसा कि यहां दिखाया गया है:
@interface NotificationService () <NSURLSessionDelegate>
@property(nonatomic) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property(nonatomic) UNMutableNotificationContent *bestAttemptContent;
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
// Modify the notification content here as you want
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]",
self.bestAttemptContent.title];
// Call FIRMessaging extension helper API.
[[FIRMessaging extensionHelper] populateNotificationContent:self.bestAttemptContent
withContentHandler:contentHandler];
}
...
सूचना वाला मैसेज भेजना
टारगेट डिवाइस पर ऐप्लिकेशन इंस्टॉल करें और उसे चलाएं. Apple डिवाइसों पर, रिमोट सूचनाएं पाने की अनुमति देने का अनुरोध स्वीकार करें.
देख लें कि ऐप्लिकेशन डिवाइस पर बैकग्राउंड में चल रहा हो.
Firebase console में, DevOps & Engagement > Messaging पर जाएं
एक कैंपेन बनाएं.
अगर यह आपका पहला मैसेज है, तो:
अपना पहला कैंपेन बनाएं को चुनें.
Firebase सूचना वाले मैसेज को चुनें. इसके बाद, बनाएं को चुनें.
अगर आपने पहले कैंपेन बनाए हैं, तो:
कैंपेन टैब पर, नया कैंपेन चुनें.
सूचनाएं पर क्लिक करें.
मैसेज का टेक्स्ट डालें.
दाएं पैनल में मौजूद, टेस्ट मैसेज भेजें को चुनें.
Firebase इंस्टॉलेशन आईडी या FCM रजिस्ट्रेशन टोकन जोड़ें लेबल वाले फ़ील्ड में, अपना रजिस्ट्रेशन टोकन डालें.
जांचें को चुनें.
जांच करें को चुनने के बाद, टारगेट किए गए क्लाइंट डिवाइस को सूचना मिलनी चाहिए. इस दौरान, ऐप्लिकेशन बैकग्राउंड में चल रहा हो.
अपने ऐप्लिकेशन पर मैसेज डिलीवर होने की जानकारी पाने के लिए, Firebase console में DevOps और यूज़र ऐक्टिविटी > मैसेजिंग > रिपोर्ट डैशबोर्ड पर जाएं. यह डैशबोर्ड, Apple और Android डिवाइसों पर भेजे गए और खोले गए मैसेज की संख्या रिकॉर्ड करता है. साथ ही, Android ऐप्लिकेशन के लिए "इंप्रेशन" (उपयोगकर्ताओं को दिखने वाली सूचनाएं) का डेटा भी रिकॉर्ड करता है.
अगले चरण
सेटअप के चरण पूरे करने के बाद, Apple प्लैटफ़ॉर्म के लिए FCM का इस्तेमाल शुरू करने के कुछ विकल्प यहां दिए गए हैं: