Apple प्लैटफ़ॉर्म के ऐप्लिकेशन में Firebase Cloud Messaging का इस्तेमाल शुरू करना

प्लैटफ़ॉर्म चुनें: iOS+ Android वेब Flutter Unity C++


इस गाइड में, Apple प्लैटफ़ॉर्म (जैसे, iOS) के क्लाइंट ऐप्लिकेशन में Firebase Cloud Messaging का इस्तेमाल शुरू करने का तरीका बताया गया है, ताकि आप भरोसेमंद तरीके से मैसेज भेज सकें.

Apple क्लाइंट ऐप्लिकेशन के लिए, आपको Firebase Cloud Messaging APNs इंटरफ़ेस पर 4096 बाइट तक की सूचना और डेटा पेलोड मिल सकते हैं.

Objective-C या Swift में क्लाइंट कोड लिखने के लिए, हमारा सुझाव है कि आप FIRMessaging API का इस्तेमाल करें. क्विकस्टार्ट उदाहरण में, दोनों भाषाओं के लिए सैंपल कोड दिया गया है.

शुरू करने से पहले, अपने Apple प्रोजेक्ट में Firebase जोड़ें.

Firebase Cloud Messaging में मेथड स्विज़लिंग

FCM SDK टूल, दो मुख्य जगहों पर मेथड स्विज़लिंग करता है: आपके APNs टोकन को Firebase इंस्टॉलेशन आईडी या FCM रजिस्ट्रेशन टोकन से मैप करना और डाउनस्ट्रीम मैसेज कॉलबैक हैंडलिंग के दौरान Analytics डेटा कैप्चर करना. जो डेवलपर स्विज़लिंग का इस्तेमाल नहीं करना चाहते वे ऐप्लिकेशन की Info.plist फ़ाइल में FirebaseAppDelegateProxyEnabled फ़्लैग जोड़कर और उसे बूलियन वैल्यू NO पर सेट करके, इसे बंद कर सकते हैं. गाइड के काम के सेक्शन में, कोड के उदाहरण दिए गए हैं. इनमें मेथड स्विज़लिंग की सुविधा चालू और बंद होने, दोनों के उदाहरण शामिल हैं.

APNs की पुष्टि करने वाली कुंजी अपलोड करना

Firebase पर अपनी APNs ऑथेंटिकेशन कुंजी अपलोड करें. अगर आपके पास पहले से कोई APNs ऑथेंटिकेशन पासकोड नहीं है, तो Apple Developer Member Center में जाकर एक पासकोड बनाएं.

  1. Firebase कंसोल में, सेटिंग > सामान्य पर जाएं. इसके बाद, क्लाउड से मैसेज टैब पर क्लिक करें.
  2. iOS ऐप्लिकेशन कॉन्फ़िगरेशन में जाकर, APNs की पुष्टि करने वाली कुंजी में, अपलोड करें पर क्लिक करें. इससे, डेवलपमेंट की पुष्टि करने वाली कुंजी या प्रोडक्शन की पुष्टि करने वाली कुंजी या दोनों को अपलोड किया जा सकता है. कम से कम एक विकल्प चुनना ज़रूरी है.
  3. उस जगह पर जाएं जहां आपने अपनी कुंजी सेव की है. इसके बाद, उसे चुनें और खोलें पर क्लिक करें. कुंजी के लिए कुंजी आईडी जोड़ें (यह 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 डिवाइस टोकन की तरह ही, यह एफ़आईडी आपको अपने ऐप्लिकेशन के किसी खास इंस्टेंस पर टारगेट की गई सूचनाएं भेजने की सुविधा देता है.

जिस तरह Apple प्लैटफ़ॉर्म आम तौर पर ऐप्लिकेशन के स्टार्टअप पर APNs डिवाइस टोकन डिलीवर करते हैं, उसी तरह FCM सूचनाओं को टारगेट करने के लिए एफ़आईडी उपलब्ध कराता है. FCM SDK टूल, FIRMessagingDelegate के messaging:didReceiveRegistration: तरीके का इस्तेमाल करके एफ़आईडी डिलीवर करता है. साथ ही, एफ़आईडी में होने वाले बदलावों को अपने-आप मॉनिटर करता है. इसके अलावा, बदलाव का पता चलने पर नए एफ़आईडी के साथ इस तरीके को लागू करता है. हमारा सुझाव है कि आप एफ़आईडी को नियमित तौर पर वापस पाएं और अपलोड करें, क्योंकि शुरुआती स्टार्टअप के बाद एफ़आईडी बदल सकता है.

एफ़आईडी को फिर से कब जारी किया जाता है और उन्हें मैन्युअल तरीके से कैसे मॉनिटर किया जाता है, इस बारे में जानने के लिए, Firebase इंस्टॉलेशन आईडी के लाइफ़साइकल को मॉनिटर करना लेख पढ़ें.

Firebase इंस्टॉलेशन आईडी का इस्तेमाल करके रजिस्ट्रेशन की सुविधा चालू करना

Firebase इंस्टॉलेशन आईडी (FID) का इस्तेमाल करके, FCM के साथ अपने ऐप्लिकेशन इंस्टेंस को रजिस्टर करने की सुविधा चालू करने के लिए, यहां दिया गया मेटाडेटा फ़्लैग अपनी Info.plist फ़ाइल में जोड़ें, न कि GoogleService-Info.plist फ़ाइल में:

FirebaseMessagingInstallationIdEnabled = YES

मैसेज सेवा के लिए डेलिगेट सेट करना

FIDs पाने के लिए, मैसेज सेवा के डेलिगेट प्रोटोकॉल को लागू करें. साथ ही, [FIRApp configure] को कॉल करने के बाद, FIRMessaging की delegate प्रॉपर्टी सेट करें. उदाहरण के लिए, अगर आपका ऐप्लिकेशन डेलिगेट, मैसेजिंग डेलिगेट प्रोटोकॉल के मुताबिक है, तो application:didFinishLaunchingWithOptions: पर डेलिगेट को खुद पर सेट किया जा सकता है.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

didReceiveRegistration वाला तरीका लागू करना

रजिस्ट्रेशन पूरा होने के बाद, एफ़आईडी का इस्तेमाल करके ऐप्लिकेशन इंस्टेंस को टारगेट किया जाता है. रजिस्ट्रेशन के बाद एफ़आईडी पाने के लिए, messaging:didReceiveRegistration: तरीका लागू करें. आम तौर पर, इस तरीके को एफ़आईडी के साथ ऐप्लिकेशन के हर स्टार्टअप पर एक बार शुरू किया जाता है. इस तरीके को कॉल करने पर, ये कार्रवाइयां की जा सकती हैं:

  • अगर आपने अपने सर्वर पर एफ़आईडी नहीं भेजा है या हाल ही में एफ़आईडी भेजा है, तो उसे अपने ऐप्लिकेशन सर्वर पर भेजें.
  • अगर सदस्यता नई है या उपयोगकर्ता ने ऐप्लिकेशन को फिर से इंस्टॉल किया है, तो एफ़आईडी को विषयों की सदस्यता दें.

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 के साथ ऐप्लिकेशन इंस्टेंस को अपने-आप रजिस्टर नहीं करेगा. आपको ऐप्लिकेशन के स्टार्टअप पर register को कॉल करना होगा, ताकि messaging:didReceiveRegistration: तरीके से रजिस्ट्रेशन और एफ़आईडी डिलीवरी को ट्रिगर किया जा सके:

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 टोकन और एफ़आईडी को मैप किया जा रहा है

अगर आपने मेथड स्विज़लिंग की सुविधा बंद कर दी है या SwiftUI ऐप्लिकेशन बनाया जा रहा है, तो आपको अपने APNs टोकन को Firebase इंस्टॉलेशन आईडी (FID) से साफ़ तौर पर मैप करना होगा. 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 SDK टूल, ऐप्लिकेशन लॉन्च होने पर क्लाइंट ऐप्लिकेशन इंस्टेंस के लिए रजिस्ट्रेशन टोकन जनरेट करता है. APNs डिवाइस टोकन की तरह ही, इस टोकन की मदद से अपने ऐप्लिकेशन के किसी खास इंस्टेंस पर टारगेट की गई सूचनाएं भेजी जा सकती हैं.

जिस तरह Apple के प्लैटफ़ॉर्म, आम तौर पर ऐप्लिकेशन शुरू होने पर APNs डिवाइस टोकन डिलीवर करते हैं, उसी तरह FCM, FIRMessagingDelegate के messaging:didReceiveRegistrationToken: तरीके से रजिस्ट्रेशन टोकन उपलब्ध कराता है. 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.
}

इसके अलावा, डेलिगेट मेथड देने के बजाय, kFIRMessagingRegistrationTokenRefreshNotification नाम के NSNotification को सुना जा सकता है. टोकन प्रॉपर्टी में हमेशा टोकन की मौजूदा वैल्यू होती है.

स्विज़लिंग की सुविधा बंद है: आपके 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 पर अपलोड करती है. अगर आपको पहले उपयोगकर्ताओं से साफ़ तौर पर ऑप्ट-इन करना है, तो कॉन्फ़िगरेशन के समय एफ़सीएम को बंद करके, अपने-आप रजिस्ट्रेशन होने की प्रोसेस को रोका जा सकता है. ऐसा करने के लिए, अपने 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];

}
...

सूचना वाला मैसेज भेजना

  1. टारगेट डिवाइस पर ऐप्लिकेशन इंस्टॉल करें और उसे चलाएं. Apple डिवाइसों पर, रिमोट सूचनाएं पाने की अनुमति का अनुरोध स्वीकार करें.

  2. देखें कि ऐप्लिकेशन, डिवाइस के बैकग्राउंड में चल रहा हो.

  3. Firebase कंसोल में, DevOps और यूज़र ऐक्टिविटी > मैसेजिंग पर जाएं

  4. कैंपेन बनाएं.

    • अगर यह आपका पहला मैसेज है, तो:

      1. अपना पहला कैंपेन बनाएं को चुनें.

      2. Firebase सूचना के मैसेज को चुनें. इसके बाद, बनाएं को चुनें.

    • अगर आपने पहले कैंपेन बनाए हैं, तो:

      1. कैंपेन टैब में, नया कैंपेन चुनें.

      2. सूचनाएं पर क्लिक करें.

  5. मैसेज का टेक्स्ट डालें.

  6. दाएं पैनल में जाकर, टेस्ट मैसेज भेजें को चुनें.

  7. Firebase इंस्टॉलेशन आईडी या FCM रजिस्ट्रेशन टोकन जोड़ें लेबल वाले फ़ील्ड में, अपना रजिस्ट्रेशन टोकन डालें.

  8. जांचें को चुनें.

जांच करें को चुनने के बाद, टारगेट किए गए क्लाइंट डिवाइस को सूचना मिलनी चाहिए. इसके लिए, ऐप्लिकेशन को बैकग्राउंड में चालू होना चाहिए.

अपने ऐप्लिकेशन पर मैसेज डिलीवर होने की जानकारी पाने के लिए, Firebase कंसोल में DevOps और यूज़र ऐक्टिविटी > मैसेजिंग > रिपोर्ट डैशबोर्ड पर जाएं. यह डैशबोर्ड, Apple और Android डिवाइसों पर भेजे गए और खोले गए मैसेज की संख्या रिकॉर्ड करता है. साथ ही, Android ऐप्लिकेशन के लिए "इंप्रेशन" (उपयोगकर्ताओं को दिखने वाली सूचनाएं) का डेटा भी रिकॉर्ड करता है.

अगले चरण

सेटअप पूरा करने के बाद, Apple प्लैटफ़ॉर्म के लिए FCM का इस्तेमाल करने के कुछ विकल्प यहां दिए गए हैं: