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

प्लैटफ़ॉर्म चुनें: 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 में जाकर, एक पासकोड बनाएं.

  1. Firebase console में, सेटिंग > सामान्य पर जाएं. इसके बाद, Cloud Messaging टैब पर क्लिक करें.
  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 डिवाइस टोकन की तरह, इस FID की मदद से, अपने ऐप्लिकेशन के किसी भी इंस्टेंस को टारगेट करके सूचनाएं भेजी जा सकती हैं.

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

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

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

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

FirebaseMessagingInstallationIdEnabled = YES

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

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

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

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

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

  • अगर आपने अपने सर्वर को FID नहीं भेजा है या हाल ही में 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 इंस्टॉलेशन आईडी (FID) से साफ़ तौर पर मैप करना होगा. APNs टोकन वापस पाने के लिए, application(_:didRegisterForRemoteNotificationsWithDeviceToken:) तरीका लागू करें. इसके बाद, apnsToken की प्रॉपर्टी सेट करें:Messaging

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's messaging:didReceiveRegistrationToken: तरीके से रजिस्ट्रेशन टोकन उपलब्ध कराता है. FCM SDK, ऐप्लिकेशन के शुरुआती लॉन्च के दौरान और टोकन के अपडेट या अमान्य होने पर, नया या मौजूदा टोकन वापस पाता है. हर मामले में, FCM SDK, मान्य टोकन के साथ messaging:didReceiveRegistrationToken: को कॉल करता है.

रजिस्ट्रेशन टोकन इन स्थितियों में बदल सकता है:

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

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

रजिस्ट्रेशन टोकन पाने के लिए, मैसेजिंग डेलिगेट प्रोटोकॉल लागू करें और FIRMessaging's delegate प्रॉपर्टी को [FIRApp configure] को कॉल करने के बाद सेट करें. उदाहरण के लिए, अगर आपका ऐप्लिकेशन डेलिगेट, मैसेजिंग डेलिगेट प्रोटोकॉल के मुताबिक है, तो 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 को सुना जा सकता है. टोकन प्रॉपर्टी में हमेशा मौजूदा टोकन की वैल्यू होती है.

स्विज़लिंग बंद होने पर: अपने APNs टोकन और रजिस्ट्रेशन टोकन को मैप करना

अगर आपने मेथड स्विज़लिंग बंद कर दी है या SwiftUI ऐप्लिकेशन बनाया जा रहा है, तो आपको अपने APNs टोकन को रजिस्ट्रेशन टोकन से साफ़ तौर पर मैप करना होगा.FCM APNs टोकन वापस पाने के लिए, application(_:didRegisterForRemoteNotificationsWithDeviceToken:) तरीका लागू करें. इसके बाद, Messaging's 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];

}
...

कोई सूचना मैसेज भेजना

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

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

  3. Firebase console में, DevOps और उपयोगकर्ता जुड़ाव > मैसेजिंग पर जाएं

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

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

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

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

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

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

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

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

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

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

  8. टेस्ट को चुनें.

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

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

अगले चरण

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