Apple के क्लाइंट ऐप्लिकेशन के लिए, Firebase Cloud Messaging APNs इंटरफ़ेस पर 4,096 बाइट तक की सूचना और डेटा पेलोड मिल सकते हैं.
हमारा सुझाव है कि आप Objective-C या Swift में क्लाइंट कोड लिखने के लिए, FIRMessaging API का इस्तेमाल करें. क्विकस्टार्ट के उदाहरण में, दोनों भाषाओं के लिए सैंपल कोड दिया गया है.
Firebase Cloud Messaging में मेथड स्विज़लिंग
FCM SDK, दो मुख्य क्षेत्रों में मेथड स्विज़लिंग करता है:
FCM रजिस्ट्रेशन टोकन के साथ आपके APNs टोकन को मैप करना और डाउनस्ट्रीम मैसेज कॉलबैक हैंडलिंग के दौरान, आंकड़ों का डेटा कैप्चर करना.
जिन डेवलपर को स्विज़लिंग का इस्तेमाल नहीं करना है वे इसे बंद कर सकते हैं. इसके लिए, उन्हें ऐप्लिकेशन की Info.plist फ़ाइल में FirebaseAppDelegateProxyEnabled
फ़्लैग जोड़ना होगा और इसे NO (बूलियन वैल्यू) पर सेट करना होगा. गाइड के काम के सेक्शन में, कोड के उदाहरण दिए गए हैं. इनमें, मेथड स्विज़लिंग की सुविधा चालू और बंद, दोनों तरह के उदाहरण शामिल हैं.
अपने Apple प्रोजेक्ट में Firebase जोड़ना
अगर आपने पहले से ऐसा नहीं किया है, तो अपने Apple प्रोजेक्ट में Firebase जोड़ें.
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];
रजिस्ट्रेशन टोकन ऐक्सेस करना
डिफ़ॉल्ट रूप से, 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 FCM registration token: \(error)") } else if let token = token { print("FCM registration token: \(token)") self.fcmRegTokenMessage.text = "Remote FCM registration token: \(token)" } }
Objective-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) { if (error != nil) { NSLog(@"Error getting FCM registration token: %@", error); } else { NSLog(@"FCM registration token: %@", token); self.fcmRegTokenMessage.text = token; } }];
टोकन को सेव करने के बजाय, इसे ऐक्सेस करने के लिए इस तरीके का इस्तेमाल किसी भी समय किया जा सकता है.
टोकन रीफ़्रेश करने की प्रोसेस को मॉनिटर करना
जब भी टोकन अपडेट हो, तब सूचना पाने के लिए, मैसेजिंग डेलिगेट प्रोटोकॉल का पालन करने वाला डेलिगेट उपलब्ध कराएं. यहां दिए गए उदाहरण में, डेलिगेट को रजिस्टर करने और डेलिगेट का सही तरीका जोड़ने का तरीका बताया गया है:
Swift
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("Firebase registration token: \(String(describing: fcmToken))") let dataDict: [String: String] = ["token": fcmToken ?? ""] NotificationCenter.default.post( name: Notification.Name("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. }
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
को सुना जा सकता है. टोकन प्रॉपर्टी में हमेशा मौजूदा टोकन की वैल्यू होती है.
स्विलिंग की सुविधा बंद है: आपके 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 क्लाइंट सेट अप करने के बाद, अपने ऐप्लिकेशन में मैसेज हैंडल करने की सुविधा और अन्य बेहतर सुविधाएं जोड़ी जा सकती हैं. ज़्यादा जानकारी के लिए, ये गाइड देखें: