प्रकाशित करें और सदस्यता लें

Nearby Messages API, पब्लिश करने की सुविधा देने वाला एपीआई है. इससे आस-पास मौजूद डिवाइसों को यह सुविधा मिलती है डेटा के छोटे पेलोड का एक्सचेंज कर सकते हैं. डिवाइस पर मैसेज पब्लिश होने पर, आस-पास डिवाइसों पर यह मैसेज मिल सकता है. संदेश का आकार इतना छोटा होना चाहिए कि उनकी परफ़ॉर्मेंस को बेहतर बनाए रखा जा सकता है. यह सेवा फ़ोटो और वीडियो जैसे ऑब्जेक्ट.

आस-पास के डिवाइसों का सेट ब्लूटूथ और नियर-अल्ट्रासॉनिक (अ सुनाई देने वाला) ऑडियो. जब कोई डिवाइस किसी टोकन का पता लगाता है आस-पास के डिवाइस से, यह टोकन को Nearby Messages सर्वर पर उसे सत्यापित करें और देखें कि ऐप्लिकेशन के लिए डिलीवर करने के लिए कोई संदेश है या नहीं सदस्यताओं का मौजूदा सेट.

ऐप्लिकेशन, डिवाइस खोजने के लिए इस्तेमाल किए जाने वाले माध्यमों के सेट को कंट्रोल कर सकता है और क्या मीडियम का इस्तेमाल टोकन ब्रॉडकास्ट करने और/या टोकन को स्कैन करने के लिए किया जाता है. डिफ़ॉल्ट रूप से, सभी माध्यमों पर प्रसारण और स्कैन किया जाता है. ऐसा करें का सुझाव दिया जाता है. आपको पब्लिकेशन बनाते समय और पैरामीटर पास करने होंगे सदस्यताएं.

यह लाइब्रेरी iOS 7 और उसके बाद वाले वर्शन पर काम करती है और iOS 8 SDK टूल की मदद से बनाई जाती है.

मैसेज मैनेजर बनाना

यह कोड एक मैसेज मैनेजर ऑब्जेक्ट बनाता है, जिसकी मदद से आप इन्हें प्रकाशित कर सकते हैं और सदस्यता लें. मैसेज एक्सचेंज की पुष्टि नहीं की गई है, इसलिए आपको iOS के लिए सार्वजनिक API (एपीआई) कुंजी. आपके पास Google Developers Console एंट्री का इस्तेमाल करके, खाता बनाने का विकल्प होता है. आपका प्रोजेक्ट.

Objective-C

#import <GNSMessages.h>

GNSMessageManager *messageManager =
    [[GNSMessageManager alloc] initWithAPIKey:@"API_KEY"];

Swift

let messageManager = GNSMessageManager(APIKey: "API_KEY")

मैसेज पब्लिश करना

यह कोड स्निपेट, एक नाम वाला मैसेज पब्लिश करने के बारे में बताता है. पब्लिकेशन तब तक चालू रहता है, जब तक पब्लिकेशन ऑब्जेक्ट मौजूद रहता है. रोकने के लिए पब्लिश करने के बाद, पब्लिकेशन ऑब्जेक्ट को रिलीज़ करें.

Objective-C

id<GNSPublication> publication =
    [messageManager publicationWithMessage:[GNSMessage messageWithContent:[name dataUsingEncoding:NSUTF8StringEncoding]]];

Swift

let publication =
    messageManager.publication(with: GNSMessage(content: name.data(using: .utf8)))

मैसेज की सदस्यता लेना

यह कोड स्निपेट, पिछले पब्लिकेशन स्निपेट में. सदस्यता तब तक चालू रहती है, जब तक सदस्यता ऑब्जेक्ट मौजूद हैं. सदस्यता बंद करने के लिए, सदस्यता को रिलीज़ करें ऑब्जेक्ट है.

जब आस-पास मौजूद डिवाइस पब्लिश किए जा रहे हों, तब 'पता चला हुआ मैसेज' हैंडलर को कॉल किया जाता है मैसेज मिलते हैं. जब मैसेज 'नहीं' में नहीं होता है, तो मैसेज के लिए खोए हुए हैंडलर को कॉल किया जाता है डिवाइस लंबे समय से निगरानी में नहीं है (डिवाइस रेंज से बाहर चला गया है या अब मैसेज).

Objective-C

id<GNSSubscription> subscription =
    [messageManager subscriptionWithMessageFoundHandler:^(GNSMessage *message) {
      // Add the name to a list for display
    }
    messageLostHandler:^(GNSMessage *message) {
      // Remove the name from the list
    }];

Swift

let subscription =
    messageManager.subscription(messageFoundHandler: { (message: GNSMessage?) in
      // Add the name to a list for display
    },
    messageLostHandler: { (message: GNSMessage?) in
      // Remove the name from the list
    })

खोज के माध्यम

डिफ़ॉल्ट रूप से, आस-पास की जगहों को खोजने के लिए ऑडियो और ब्लूटूथ दोनों मीडियम का इस्तेमाल किया जाएगा और दोनों मीडियम से ब्रॉडकास्ट और स्कैन किया जाएगा. कुछ मामलों में, आपको आपके ऐप्लिकेशन के Info.plist में इन एंट्री को जोड़ना ज़रूरी है:

  • अगर आपका ऐप्लिकेशन ऑडियो का इस्तेमाल करके स्कैन करता है, तो NSMicrophoneUsageDescription जोड़ें, जो कि यह बताने वाली स्ट्रिंग कि आपको माइक्रोफ़ोन का इस्तेमाल क्यों करना है. उदाहरण के लिए, "The माइक्रोफ़ोन आस-पास के डिवाइसों से पहचान छिपाने वाले टोकन का पता लगाता है."

  • अगर आपका ऐप्लिकेशन BLE का इस्तेमाल करके ब्रॉडकास्ट करता है, तो NSBluetoothPeripheralUsageDescription यहां दी गई एक स्ट्रिंग है, जिसमें बताया गया है कि BLE पर विज्ञापन किया जाएगा. उदाहरण के लिए, "एक अनाम टोकन का विज्ञापन किया गया है ब्लूटूथ के ज़रिए आस-पास के डिवाइस खोजने के लिए."

कुछ मामलों में, आपके ऐप्लिकेशन को सिर्फ़ एक माध्यम का इस्तेमाल करने की ज़रूरत पड़ सकती है और को उस मीडियम पर ब्रॉडकास्ट और स्कैन करने की ज़रूरत नहीं पड़ती.

उदाहरण के लिए, कोई ऐसा ऐप्लिकेशन जिसे ऑडियो पर ब्रॉडकास्ट करने के लिए, सिर्फ़ ऑडियो को स्कैन करना ज़रूरी है. नीचे दिए गए स्निपेट में, सिर्फ़ ऑडियो इस्तेमाल करके उस सेट-टॉप बॉक्स पर मैसेज पब्लिश करने का तरीका बताया गया है खोज के लिए स्कैनिंग:

Objective-C

id<GNSPublication> publication = [messageManager publicationWithMessage:message
    paramsBlock:^(GNSPublicationParams *params) {
      params.strategy = [GNSStrategy strategyWithParamsBlock:^(GNSStrategyParams *params) {
        params.discoveryMediums = kGNSDiscoveryMediumsAudio;
        params.discoveryMode = kGNSDiscoveryModeScan;
      }];
    }];

Swift

let publication = messageManager.publication(with: message,
    paramsBlock: { (params: GNSPublicationParams?) in
      guard let params = params else { return }
      params.strategy = GNSStrategy(paramsBlock: { (params: GNSStrategyParams?) in
        guard let params = params else { return }
        params.discoveryMediums = .audio
        params.discoveryMode = .scan
      })
    })

डीबग लॉगिंग सक्षम करना

डीबग लॉगिंग महत्वपूर्ण इंटरनल इवेंट को कंसोल में प्रिंट करती है, जिसे आस-पास सुविधा को एकीकृत करते समय आने वाली समस्याओं को ट्रैक करने के लिए उपयोगी आपके ऐप्लिकेशन में मैसेज. हम आपसे ये लॉग तब मांगेंगे, जब आप इसके लिए हमसे संपर्क करेंगे तकनीकी सहायता.

मैसेज मैनेजर बनाने से पहले आपको इसे चालू करना चाहिए. यह कोड स्निपेट दिखाता है डीबग लॉगिंग कैसे चालू करें:

Objective-C

[GNSMessageManager setDebugLoggingEnabled:YES];

Swift

GNSMessageManager.setDebugLoggingEnabled(true)

आस-पास सुविधा की अनुमति की स्थिति को ट्रैक करना

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

नीचे दिए गए स्निपेट में, अनुमति की स्थिति की सदस्यता लेने के बारे में बताया गया है. कॉन्टेंट बनाने अनुमति की स्थिति में बदलाव होने पर, हैंडलर को कॉल किया जाता है पहली बार तब तक कॉल नहीं किया जाता, जब तक उपयोगकर्ता अनुमति नहीं देता या फिर अनुमति नहीं देता. सदस्यता रोकने के लिए, अनुमति से जुड़ा ऑब्जेक्ट छोड़ें.

Objective-C

GNSPermission *nearbyPermission = [[GNSPermission alloc] initWithChangedHandler:^(BOOL granted) {
  // Update the UI here
}];

Swift

let nearbyPermission = GNSPermission(changedHandler: { (granted: Bool) in
  // Update the UI here
})

आपका ऐप्लिकेशन, लोगों को अनुमति की स्थिति बदलने का तरीका बता सकता है; इसके लिए उदाहरण के लिए, सेटिंग पेज पर टॉगल स्विच का इस्तेमाल करके.

यहां अनुमति की स्थिति पाने और उसे सेट करने का तरीका बताया गया है.

Objective-C

BOOL permissionState = [GNSPermission isGranted];
[GNSPermission setGranted:!permissionState];  // toggle the state

Swift

let permissionState = GNSPermission.isGranted()
GNSPermission.setGranted(!permissionState)  // toggle the state

आस-पास को प्रभावित करने वाली उपयोगकर्ता सेटिंग ट्रैक करना

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

Objective-C

GNSMessageManager *messageManager = [[GNSMessageManager alloc]
    initWithAPIKey:API_KEY
       paramsBlock:^(GNSMessageManagerParams *params) {
         params.microphonePermissionErrorHandler = ^(BOOL hasError) {
           // Update the UI for microphone permission
         };
         params.bluetoothPowerErrorHandler = ^(BOOL hasError) {
           // Update the UI for Bluetooth power
         };
         params.bluetoothPermissionErrorHandler = ^(BOOL hasError) {
           // Update the UI for Bluetooth permission
         };
}];

Swift

let messageManager = GNSMessageManager(
         APIKey: API_KEY,
    paramsBlock: { (params: GNSMessageManagerParams?) in
      guard let params = params else { return }
      params.microphonePermissionErrorHandler = { (hasError: Bool) in
        // Update the UI for microphone permission
      }
      params.bluetoothPowerErrorHandler = { (hasError: Bool) in
        // Update the UI for Bluetooth power
      }
      params.bluetoothPermissionErrorHandler = { (hasError: Bool) in
        // Update the UI for Bluetooth permission
      }
    })

'आस-पास' सुविधा की अनुमति वाला डायलॉग बॉक्स बदलना

पब्लिकेशन और सदस्यताओं में पास किए जाने वाले पैरामीटर के आधार पर, आस-पास सुविधा को काम करने की अनुमति देने से पहले iOS कई तरह की अनुमतियां मांग सकता है. इसके लिए उदाहरण के लिए, डिफ़ॉल्ट रणनीति नियर-अल्ट्रासॉनिक पर ट्रांसमिट किए गए डेटा पर ध्यान देती है ऑडियो ट्रैक करता है, इसलिए iOS माइक्रोफ़ोन का इस्तेमाल करने की अनुमति मांगेगा. ऐसे मामलों में, 'आस-पास' सुविधा "प्रीफ़्लाइट" दिखाएगी एक डायलॉग बॉक्स, जो बताता है कि उपयोगकर्ता से क्यों पूछा जा रहा है आपको ऐसा करने की अनुमति नहीं है.

अगर आप अपनी पसंद के मुताबिक "प्रीफ़्लाइट" देना चाहते हैं डायलॉग, पब्लिकेशन के किसी कस्टम ब्लॉक में permissionRequestHandler पैरामीटर या सदस्यता पैरामीटर. आपके कस्टम ब्लॉक को permissionHandler पर कॉल करना चाहिए उपयोगकर्ता के जवाब के बाद को ब्लॉक करें. नीचे दिए गए स्निपेट में ऐसा करने का तरीका बताया गया है पब्लिकेशन के लिए:

Objective-C

id<GNSPublication> publication =
    [messageManager publicationWithMessage:[GNSMessage messageWithContent:[name dataUsingEncoding:NSUTF8StringEncoding]]
                               paramsBlock:^(GNSPublicationParams *params) {
                                 params.permissionRequestHandler = ^(GNSPermissionHandler permissionHandler) {
                                   // Show your custom dialog here.
                                   // Don't forget to call permissionHandler() with YES or NO when the user dismisses it.
                                 };
                               }];

Swift

let publication =
    messageManager.publication(with: GNSMessage(content: name.data(using: .utf8)),
        paramsBlock: { (params: GNSPublicationParams?) in
          guard let params = params else { return }
          params.permissionRequestHandler = { (permissionHandler: GNSPermissionHandler?) in
            // Show your custom dialog here.
            // Don't forget to call permissionHandler() with true or false when the user dismisses it.
          }
        })

बैकग्राउंड में होने वाली कार्रवाई

डिवाइस खोजने के लिए BLE का इस्तेमाल करने वाले पब्लिकेशन और सदस्यताएं, बैकग्राउंड शामिल करें. डाइग्नोस्टिक टूल का इस्तेमाल शुरू करने से पहले, आपको इन बातों का ध्यान रखना चाहिए बैकग्राउंड मोड:

  • बैकग्राउंड में होने वाली कार्रवाइयों में सिर्फ़ बीएलई मीडियम का इस्तेमाल होना चाहिए; इस ऑडियो का इस्तेमाल नहीं किया जा सकता.
  • बैकग्राउंड BLE के लिए अतिरिक्त बैटरी लागत. इसमें कम खर्च आता है, लेकिन बैकग्राउंड मोड का इस्तेमाल करने का फ़ैसला लेने से पहले, इसे मापना चाहिए.
  • iOS, बैकग्राउंड में BLE के ज़रिए विज्ञापन दिखाने के लिए उपयोगकर्ता से अनुमति मांगेगा.

किसी पब्लिकेशन या सदस्यता में बैकग्राउंड मोड जोड़ने के लिए, इन अतिरिक्त दिशा-निर्देशों का पालन करें चरण:

  • अपने पब्लिकेशन या सदस्यता के लिए इस तारीख तक बैकग्राउंड मोड और BLE-ओनली ऐक्सेस को चालू करें ठीक से कॉन्फ़िगर किया गया GNSStrategy ऑब्जेक्ट पास कर रहा है. नीचे दिया गया स्निपेट सदस्यता के लिए ऐसा करने का तरीका दिखाता है:

    Objective-C

    id<GNSSubscription> subscription =
        [messageManager subscriptionWithMessageFoundHandler:^(GNSMessage *message) {
          // Add the name to a list for display
        }
        messageLostHandler:^(GNSMessage *message) {
          // Remove the name from the list
        }
        paramsBlock:^(GNSSubscriptionParams *params) {
          params.strategy = [GNSStrategy strategyWithParamsBlock:^(GNSStrategyParams *params) {
            params.allowInBackground = YES;
            params.discoveryMediums = kGNSDiscoveryMediumsBLE;
          }];
        }];
    

    Swift

    let subscription =
        messageManager.subscription(messageFoundHandler: { (message: GNSMessage?) in
          // Add the name to a list for display
        },
        messageLostHandler: { (message: GNSMessage?) in
          // Remove the name from the list
        },
        paramsBlock:{ (params: GNSSubscriptionParams?) in
          guard let params = params else { return }
          params.strategy = GNSStrategy(paramsBlock: { (params: GNSStrategyParams?) in
            guard let params = params else { return }
            params.allowInBackground = true
            params.discoveryMediums = .BLE
          })
        })
    

  • अपने ऐप्लिकेशन के Info.plist में इन एंट्री को जोड़ें:

    • UIBackgroundModes एंट्री:

      • बैकग्राउंड में BLE स्कैन करने के लिए bluetooth-central. सिर्फ़ ज़रूरी जब डिस्कवरी मोड में स्कैनिंग शामिल हो; यह डिफ़ॉल्ट रूप से होता है.
      • बैकग्राउंड में BLE विज्ञापन के लिए bluetooth-peripheral. ज़रूरी है सिर्फ़ तब, जब डिस्कवरी मोड में ब्रॉडकास्ट शामिल हो; यह डिफ़ॉल्ट रूप से होता है.
    • NSBluetoothPeripheralUsageDescription स्ट्रिंग में इसकी वजह बताई गई है तो आपका विज्ञापन BLE पर होगा. उदाहरण के लिए, "एक अनाम टोकन आस-पास के डिवाइसों को खोजने के लिए, ब्लूटूथ के ज़रिए विज्ञापन दिया गया है." यहां जाएं: Apple के दस्तावेज़ देखें.

  • बैकग्राउंड में चलने के दौरान, सिस्टम किसी भी समय आपके ऐप्लिकेशन को बंद कर सकता है. अगर आपने बैकग्राउंड मोड एक ऐसी सेटिंग है जिसे उपयोगकर्ता चालू या बंद कर सकता है, आपके ऐप्लिकेशन को ये काम करने होंगे:

    • जब भी उपयोगकर्ता, बैकग्राउंड मोड की वैल्यू को NSUserDefaults पर सेट करे इसे बदल देता है.
    • स्टार्टअप पर, इसे NSUserDefaults से पढ़ें और Nearby को वापस लाएं पब्लिकेशन और/या सदस्यताएं.

बैकग्राउंड में मिलने वाली सूचनाएं

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

उन्हें अपने ऐप्लिकेशन में जोड़ने के लिए यह तरीका अपनाएं:

  • स्टार्टअप पर स्थानीय सूचनाओं के लिए रजिस्टर करें:

    Objective-C

    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
      [[UIApplication sharedApplication] registerUserNotificationSettings:
          [UIUserNotificationSettings settingsForTypes:
              UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound
                                            categories:nil]];
    }
    

    Swift

    UIApplication.shared.registerUserNotificationSettings(
        UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil))
    

  • अपनी सदस्यता के मैसेज से मिले हैंडलर में स्थानीय सूचना भेजें:

    Objective-C

    GNSMessageHandler myMessageFoundHandler = ^(GNSMessage *message) {
        // Send a local notification if not in the foreground.
        if ([UIApplication sharedApplication].applicationState != UIApplicationStateActive) {
          UILocalNotification *localNotification = [[UILocalNotification alloc] init];
          localNotification.alertBody = @"Message received";
          [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
        }
        // Process the new message...
      };
    

    Swift

    let myMessageFoundHandler: GNSMessageHandler = { (message: GNSMessage?) in
      // Send a local notification if not in the foreground.
      if UIApplication.shared.applicationState != .active {
        let localNotification = UILocalNotification()
        localNotification.alertBody = "Message received"
        UIApplication.shared.presentLocalNotificationNow(localNotification)
      }
      // Process the new message...
    }