বীকন বার্তা পান

আপনার অ্যাপটি একই পদ্ধতি ব্যবহার করে ব্লুটুথ লো এনার্জি (BLE) বীকন বার্তাগুলিতে সদস্যতা নিতে পারে যা অন্যান্য কাছাকাছি ডিভাইসগুলির দ্বারা প্রকাশিত বার্তাগুলিতে সদস্যতা নিতে ব্যবহৃত হয়।

ডিফল্টরূপে, বীকন সদস্যতাগুলি তখনই কাজ করে যখন আপনার অ্যাপটি অগ্রভাগে থাকে৷ যখন আপনার অ্যাপ ব্যাকগ্রাউন্ডে যায়, সাবস্ক্রিপশন স্বয়ংক্রিয়ভাবে বীকনের জন্য স্ক্যান করা বন্ধ করে দেয়। ব্যাকগ্রাউন্ড স্ক্যানিং কিভাবে সক্ষম করবেন সে সম্পর্কে বিস্তারিত জানতে পটভূমি স্ক্যানিং দেখুন।

বীকনে সদস্যতা নিতে, সাবস্ক্রিপশন প্যারামিটারে deviceTypesToDiscover প্যারামিটারটিকে kGNSDeviceBLEBeacon এ সেট করুন। নিম্নলিখিত স্নিপেট দেখায় কিভাবে এটি করতে হয়:

উদ্দেশ্য-C

id<GNSSubscription> beaconSubscription = [messageManager
    subscriptionWithMessageFoundHandler:myMessageFoundHandler
                     messageLostHandler:myMessageLostHandler
                            paramsBlock:^(GNSSubscriptionParams *params) {
                              params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                            }];

সুইফট

let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
    myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
    paramsBlock: { (params: GNSSubscriptionParams!) in
      params.deviceTypesToDiscover = .BLEBeacon
    })

উপরের সাবস্ক্রিপশন শুধুমাত্র আপনার প্রকল্পের মালিকানাধীন বীকনগুলি আবিষ্কার করে এবং সেই বীকনগুলি থেকে সমস্ত বার্তা গ্রহণ করে৷ আপনি যদি একটি ভিন্ন নামস্থানের সাথে নিবন্ধিত বীকন থেকে বার্তা পেতে চান, আপনি সাবস্ক্রিপশন প্যারামিটারে একটি নামস্থান পাস করতে পারেন। একইভাবে, আপনি যদি একটি নির্দিষ্ট ধরণের বার্তা চান তবে আপনি ফিল্টারিংয়ের জন্য একটি বার্তার ধরণও পাস করতে পারেন। নিম্নলিখিত স্নিপেট দেখায় কিভাবে এটি করতে হয়:

উদ্দেশ্য-C

id<GNSSubscription> beaconSubscription = [messageManager
    subscriptionWithMessageFoundHandler:myMessageFoundHandler
                     messageLostHandler:myMessageLostHandler
                            paramsBlock:^(GNSSubscriptionParams *params) {
                              params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                              params.messageNamespace = @"com.mycompany.mybeaconservice";
                              params.type = @"mybeacontype";
                            }];

সুইফট

let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
    myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
    paramsBlock: { (params: GNSSubscriptionParams!) in
      params.deviceTypesToDiscover = .BLEBeacon
      params.messageNamespace = "com.mycompany.mybeaconservice"
      params.type = "mybeacontype"
    })

ডিফল্টরূপে, একটি বীকন সাবস্ক্রিপশন উভয় ধরণের বীকন, এডিস্টোন এবং আইবিকনের জন্য স্ক্যান করে। যখন iBeacon স্ক্যানিং সক্ষম করা হয়, ব্যবহারকারীদের তাদের অবস্থান ডেটা ব্যবহার করার জন্য অ্যাপ্লিকেশনটির অনুমতি দেওয়ার জন্য অনুরোধ করা হবে৷ আপনার অ্যাপের Info.plist অবশ্যই NSLocationWhenInUseUsageDescription কী অন্তর্ভুক্ত করতে হবে এবং কেন লোকেশন ব্যবহার করা হচ্ছে তার সংক্ষিপ্ত ব্যাখ্যা। বিস্তারিত জানার জন্য অ্যাপলের ডকুমেন্টেশন দেখুন।

আপনি যদি শুধুমাত্র এডিস্টোন বীকনগুলির জন্য স্ক্যান করতে চান তবে আপনি GNSBeaconStrategy এ iBeacon স্ক্যানিং অক্ষম করতে পারেন এবং iOS ব্যবহারকারীর কাছে অবস্থান ব্যবহার করার অনুমতি চাইবে না৷ উপরের মূল সদস্যতার জন্য iBeacon স্ক্যানিং কীভাবে অক্ষম করতে হয় তা নিম্নলিখিত স্নিপেটটি দেখায়:

উদ্দেশ্য-C

id<GNSSubscription> beaconSubscription = [messageManager
    subscriptionWithMessageFoundHandler:myMessageFoundHandler
                     messageLostHandler:myMessageLostHandler
                            paramsBlock:^(GNSSubscriptionParams *params) {
                              params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                              params.beaconStrategy =
                                  [GNSBeaconStrategy strategyWithParamsBlock:^(GNSBeaconStrategyParams *params) {
                                    params.includeIBeacons = NO;
                                  };
                            }];

সুইফট

let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
    myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
    paramsBlock: { (params: GNSSubscriptionParams!) in
      params.deviceTypesToDiscover = .BLEBeacon
      params.beaconStrategy =
          GNSBeaconStrategy(paramsBlock: { (params: GNSBeaconStrategyParams!) in
            params.includeIBeacons = false
          })
    })

ডিফল্টরূপে, কম শক্তির স্ক্যানিং সক্ষম করা হয়, যা কখনও কখনও এডিস্টোন বীকন খুঁজে পাওয়ার সময় বড় দেরীতে পরিণত হতে পারে। যখন লো পাওয়ার মোড অক্ষম করা হয়, তখন iBeacon স্ক্যানিং ব্যবহার করা হয় এডিস্টোন বীকন খুঁজে পেতে, যা এই বিলম্বগুলি কমাতে পারে। যাইহোক, এর ফলে ব্যাটারি বেশি ব্যবহার হয় এবং iOS ব্যবহারকারীর কাছে অবস্থান ব্যবহার করার অনুমতি চাইবে।

নিম্নলিখিত স্নিপেট দেখায় কিভাবে এডিস্টোন বীকনের জন্য স্ক্যান করার সময় কম পাওয়ার মোড অক্ষম করা যায়।

উদ্দেশ্য-C

id<GNSSubscription> beaconSubscription = [messageManager
    subscriptionWithMessageFoundHandler:myMessageFoundHandler
                     messageLostHandler:myMessageLostHandler
                            paramsBlock:^(GNSSubscriptionParams *params) {
                              params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                              params.beaconStrategy =
                                  [GNSBeaconStrategy strategyWithParamsBlock:^(GNSBeaconStrategyParams *params) {
                                    params.includeIBeacons = NO;
                                    params.lowPowerPreferred = NO;
                                  };
                            }];

সুইফট

let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
    myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
    paramsBlock: { (params: GNSSubscriptionParams!) in
      params.deviceTypesToDiscover = .BLEBeacon
      params.beaconStrategy =
          GNSBeaconStrategy(paramsBlock: { (params: GNSBeaconStrategyParams!) in
            params.includeIBeacons = false
            params.lowPowerPreferred = false
          })
    })

iBeacons-এর জন্য স্ক্যান করার সময়, iOS অবস্থান অনুমতি ডায়ালগ কাছাকাছি অনুমতি ডায়ালগের আগে থাকে। আপনি যদি এই ডায়ালগটিকে ওভাররাইড করতে চান (উদাহরণস্বরূপ, একটি "প্রিফ্লাইট" ডায়ালগ প্রদান করতে যা ব্যাখ্যা করে কেন অবস্থানের অনুমতি প্রয়োজন), সাবস্ক্রিপশন প্যারামিটারে একটি কাস্টম ব্লকে permissionRequestHandler সেট করুন। নিম্নলিখিত স্নিপেট দেখায় কিভাবে এটি করতে হয়:

উদ্দেশ্য-C

id<GNSSubscription> beaconSubscription = [messageManager
    subscriptionWithMessageFoundHandler:myMessageFoundHandler
                     messageLostHandler:myMessageLostHandler
                            paramsBlock:^(GNSSubscriptionParams *params) {
                              params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                              params.permissionRequestHandler = ^(GNSPermissionHandler permissionHandler) {
                                // Show your custom dialog here, and don't forget to call permissionHandler after it is dismissed
                                permissionHandler(userGavePermission);
                              };
                            }];

সুইফট

let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
    myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
    paramsBlock: { (params: GNSSubscriptionParams!) in
      params.deviceTypesToDiscover = .BLEBeacon
      params.permissionRequestHandler = { (permissionHandler: GNSPermissionHandler!) in
        // Show your custom dialog here, and don't forget to call permissionHandler after it is dismissed
        permissionHandler(userGavePermission);
      }
    })

ব্যাকগ্রাউন্ড স্ক্যানিং

যেহেতু বীকন স্ক্যানিং BLE ব্যবহার করে, তাই এটি ব্যাকগ্রাউন্ডে কাজ করতে পারে। ব্যাকগ্রাউন্ড মোড ব্যবহার করার সিদ্ধান্ত নেওয়ার সময় এখানে কিছু জিনিস আপনার সচেতন হওয়া উচিত:

  • ব্যাকগ্রাউন্ড BLE এর জন্য একটি অতিরিক্ত ব্যাটারি খরচ আছে। খরচ কম, কিন্তু ব্যাকগ্রাউন্ড মোড ব্যবহার করার সিদ্ধান্ত নেওয়ার আগে আপনার এটি পরিমাপ করা উচিত।
  • iBeacon স্ক্যানিং সক্ষম বা কম পাওয়ার মোড অক্ষম করা থাকলে iOS ব্যাকগ্রাউন্ডে অবস্থান ব্যবহার করার জন্য ব্যবহারকারীর অনুমতি চাইবে৷

পটভূমিতে বীকন স্ক্যানিং সক্ষম করতে, এই অতিরিক্ত পদক্ষেপগুলি অনুসরণ করুন:

  • একটি সঠিকভাবে কনফিগার করা GNSBeaconStrategy অবজেক্টে পাস করে আপনার সদস্যতার জন্য পটভূমি মোড সক্ষম করুন। নিম্নলিখিত স্নিপেট দেখায় কিভাবে এটি করতে হয়:

    উদ্দেশ্য-C

    id<GNSSubscription> beaconSubscription = [messageManager
        subscriptionWithMessageFoundHandler:myMessageFoundHandler
                         messageLostHandler:myMessageLostHandler
                                paramsBlock:^(GNSSubscriptionParams *params) {
                                  params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                                  params.beaconStrategy = [GNSBeaconStrategy
                                      strategyWithParamsBlock:^(GNSBeaconStrategyParams *params) {
                                        params.allowInBackground = YES;
                                      }];
                                }];
    

    সুইফট

    let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
        myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
        paramsBlock: { (params: GNSSubscriptionParams!) in
          params.deviceTypesToDiscover = .BLEBeacon
          params.beaconStrategy =
              GNSBeaconStrategy(paramsBlock: { (params: GNSBeaconStrategyParams!) in
                params.allowInBackground = true
              })
        })
    

  • আপনার অ্যাপের Info.plist এ প্রয়োজনীয় এন্ট্রি যোগ করুন:

    • UIBackgroundModes এন্ট্রি:

      • পটভূমিতে BLE স্ক্যান করার জন্য bluetooth-central
      • হাই-পাওয়ার মোড ব্যবহার করে ব্যাকগ্রাউন্ডে iBeacon স্ক্যান করার জন্য location । আপনি যদি এডিস্টোন বীকনগুলির জন্য কম শক্তি স্ক্যানিং করছেন তবে আপনি এটি বাদ দিতে পারেন।
    • NSLocationAlwaysUsageDescription স্ট্রিং বর্ণনা করে যে আপনি কেন ব্যাকগ্রাউন্ডে ব্যবহারকারীর অবস্থান ট্র্যাক করবেন। উদাহরণস্বরূপ, "পটভূমিতে বীকনগুলির জন্য স্ক্যান করার জন্য আপনার অবস্থান প্রয়োজন।" বিস্তারিত জানার জন্য অ্যাপলের ডকুমেন্টেশন দেখুন। আপনি যদি এডিস্টোন বীকনগুলির জন্য কম শক্তি স্ক্যানিং করছেন তবে আপনি এটি বাদ দিতে পারেন।

  • ব্যবহারকারী আপনার অ্যাপে ব্যাকগ্রাউন্ড স্ক্যানিং সক্ষম বা অক্ষম করতে পারেন? যদি তাই হয়, তাহলে আপনার ব্যাকগ্রাউন্ড মোডের মানটি NSUserDefaults এ সংরক্ষণ করা উচিত কারণ iOS আপনার অ্যাপটি যে কোনো সময় পটভূমিতে থাকা অবস্থায় মেরে ফেলতে পারে। আপনার অ্যাপ্লিকেশন নিম্নলিখিত কাজ করা উচিত:

    • ব্যাকগ্রাউন্ড মোড মান NSUserDefaults এ সংরক্ষণ করুন যখনই ব্যবহারকারী এটি পরিবর্তন করে।
    • স্টার্টআপে, NSUserDefaults থেকে এটি পড়ুন এবং পটভূমি মোড সক্ষম থাকলে বীকন সদস্যতা পুনরুদ্ধার করুন।

পটভূমি বিজ্ঞপ্তি

আপনি যদি ব্যাকগ্রাউন্ডে থাকাকালীন বীকনগুলি আবিষ্কৃত হলে আপনার অ্যাপ ব্যবহারকারীকে অবহিত করতে চান, আপনি স্থানীয় বিজ্ঞপ্তিগুলি ব্যবহার করতে পারেন৷ বিস্তারিত জানার জন্য, ব্যাকগ্রাউন্ড বিজ্ঞপ্তি দেখুন।