iOS-এ ডায়নামিক লিঙ্ক পাওয়া

আপনার তৈরি করা Firebase Dynamic Links পেতে, আপনাকে অবশ্যই অ্যাপে Dynamic Links SDK অন্তর্ভুক্ত করতে হবে এবং Dynamic Link-এ পাস করা ডেটা পেতে, আপনার অ্যাপ লোড হওয়ার সময় handleUniversalLink: এবং dynamicLinkFromCustomSchemeURL: মেথড কল করতে হবে।

পূর্বশর্ত

শুরু করার আগে, আপনার iOS প্রোজেক্টে Firebase যোগ করতে ভুলবেন না।

Firebase ডিপেন্ডেন্সি ইনস্টল ও ম্যানেজ করতে Swift প্যাকেজ ম্যানেজার ব্যবহার করুন।

  1. Xcode-এ, আপনার অ্যাপ প্রোজেক্ট খোলা রেখে, ফাইল > প্যাকেজ যোগ করুন বিকল্পে নেভিগেট করুন।
  2. প্রম্পট করা হলে, Firebase Apple প্ল্যাটফর্ম SDK রিপোজিটরি যোগ করুন:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Dynamic Links লাইব্রেরি বেছে নিন।
  5. আপনার টার্গেটের বিল্ড সেটিংসের অন্যান্য লিঙ্কার ফ্ল্যাগ বিভাগে -ObjC ফ্ল্যাগ যোগ করুন।
  6. Dynamic Links-এর সাথে সেরা অভিজ্ঞতা পেতে, আমরা সাজেস্ট করি যে আপনি আপনার Firebase প্রোজেক্টে Google Analytics চালু করুন এবং আপনার অ্যাপে Google Analytics-এর জন্য Firebase SDK যোগ করুন। আপনি IDFA সংগ্রহ ছাড়া বা IDFA সংগ্রহ সহ লাইব্রেরি বেছে নিতে পারেন। Google Analytics for Firebase SDK-তে মডিউলের লেটেস্ট অর্গানাইজেশন সম্পর্কে আমাদের প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন।
  7. হয়ে গেলে, Xcode অটোমেটিক ব্যাকগ্রাউন্ডে আপনার ডিপেন্ডেন্সি সমাধান ও ডাউনলোড করা শুরু করবে।

এখন, কনফিগারেশনের কিছু ধাপ সম্পূর্ণ করুন:

  1. Firebase কনসোলে, Dynamic Links বিভাগ খুলুন। আপনাকে পরিষেবার শর্তাবলীতে সম্মতি দিতে বলা হলে, তা করুন।
  2. আপনার অ্যাপের App Store আইডি এবং অ্যাপ আইডির প্রিফিক্স আপনার অ্যাপের সেটিংসে উল্লেখ করা আছে কিনা তা নিশ্চিত করুন। আপনার অ্যাপের সেটিংস দেখতে ও এডিট করতে, আপনার Firebase প্রোজেক্টের সেটিংস পৃষ্ঠায় যান এবং আপনার iOS অ্যাপ বেছে নিন।

    আপনার iOS অ্যাপে Dynamic Links ব্যবহার করার জন্য আপনার Firebase প্রোজেক্ট সঠিকভাবে কনফিগার করা আছে কিনা তা আপনি নিম্নলিখিত URL খুলে কনফার্ম করতে পারবেন:

    https://your_dynamic_links_domain/apple-app-site-association

    আপনার অ্যাপ কানেক্ট করা থাকলে, apple-app-site-association ফাইলে আপনার অ্যাপের অ্যাপ আইডি প্রিফিক্স ও বান্ডেল আইডির রেফারেন্স থাকে। যেমন:

    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}

    details ফিল্ড খালি থাকলে, আপনি অ্যাপ আইডির প্রিফিক্স উল্লেখ করেছেন কিনা তা ডবল-চেক করুন। মনে রাখবেন, আপনার অ্যাপ আইডির প্রিফিক্স আপনার টিম আইডির মতো নাও হতে পারে।

  3. ঐচ্ছিক: iOS পেস্টবোর্ডে Dynamic Links SDK-এর ব্যবহার বন্ধ করুন।

    ডিফল্ট হিসেবে, Dynamic Links SDK পেস্টবোর্ড ব্যবহার করে যাতে ইনস্টল করার পরে ডিপ লিঙ্কের নির্ভরযোগ্যতা উন্নত করা যায়। পেস্টবোর্ড ব্যবহার করে, Dynamic Links নিশ্চিত করতে পারে যে কোনও ব্যবহারকারী Dynamic Link খুললে, কিন্তু প্রথমে আপনার অ্যাপ ইনস্টল করার প্রয়োজন হলে, ব্যবহারকারী ইনস্টল করার পরে প্রথমবার অ্যাপ খোলার সময় অবিলম্বে আসল লিঙ্ক করা কন্টেন্টে যেতে পারবেন।

    এর নেতিবাচক দিক হল, পেস্টবোর্ড ব্যবহার করলে iOS 14 এবং তার পরবর্তী ভার্সনে বিজ্ঞপ্তি ট্রিগার হয়। তাই, ব্যবহারকারী প্রথমবার আপনার অ্যাপ খুললে, পেস্টবোর্ডে কোনও URL থাকলে, তারা একটি বিজ্ঞপ্তি দেখতে পাবেন যে আপনার অ্যাপ পেস্টবোর্ড অ্যাক্সেস করেছে, যা বিভ্রান্তির কারণ হতে পারে।

    এই আচরণ বন্ধ করতে, আপনার Xcode প্রোজেক্টের Info.plist ফাইল এডিট করুন এবং FirebaseDeepLinkPasteboardRetrievalEnabled কী NO-এ সেট করুন।

  1. আপনার অ্যাপের Xcode প্রোজেক্টের তথ্য ট্যাবে, Dynamic Links-এর জন্য ব্যবহার করার জন্য একটি নতুন URL টাইপ তৈরি করুন। শনাক্তকারী ফিল্ডটি একটি অনন্য ভ্যালুতে সেট করুন এবং URL স্কিম ফিল্ডটি আপনার বান্ডিল শনাক্তকারী হিসেবে সেট করুন, যা Dynamic Links-এর ব্যবহার করা ডিফল্ট URL স্কিম।
  2. আপনার অ্যাপের Xcode প্রোজেক্টের ক্ষমতা ট্যাবে, সংশ্লিষ্ট ডোমেন চালু করুন এবং সংশ্লিষ্ট ডোমেন তালিকায় নিম্নলিখিতগুলি যোগ করুন:
    applinks:your_dynamic_links_domain
  3. আপনি যদি সম্পূর্ণ কাস্টম ডোমেন সহ Dynamic Links পেতে চান, তাহলে আপনার Xcode প্রোজেক্টের Info.plist ফাইলে, FirebaseDynamicLinksCustomDomains নামে একটি কী তৈরি করুন এবং আপনার অ্যাপের Dynamic Links URL প্রিফিক্সে এটি সেট করুন। যেমন:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
  4. আপনার UIApplicationDelegate-এ FirebaseCore মডিউল ইমপোর্ট করুন, সেইসাথে আপনার অ্যাপ ডেলিগেট ব্যবহার করে এমন অন্য যেকোনও Firebase মডিউল ইমপোর্ট করুন। যেমন, Cloud Firestore এবং Authentication ব্যবহার করতে:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. আপনার অ্যাপ ডেলিগেটের application(_:didFinishLaunchingWithOptions:) পদ্ধতিতে FirebaseApp শেয়ার করা ইনস্ট্যান্স কনফিগার করুন:

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. আপনি SwiftUI ব্যবহার করলে, আপনাকে অবশ্যই একটি অ্যাপ্লিকেশন ডেলিগেট তৈরি করতে হবে এবং এটি আপনার App স্ট্রাকচারে UIApplicationDelegateAdaptor বা NSApplicationDelegateAdaptor-এর মাধ্যমে অ্যাটাচ করতে হবে। এছাড়াও, আপনাকে অ্যাপ ডেলিগেট সুইজলিং বন্ধ করতে হবে। আরও তথ্যের জন্য, SwiftUI নির্দেশাবলী দেখুন।

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. এরপর, অ্যাপ আগে থেকেই ইনস্টল করা থাকলে, application:continueUserActivity:restorationHandler: পদ্ধতিতে ইউনিভার্সাল লিঙ্ক হিসেবে পাওয়া লিঙ্ক ম্যানেজ করুন:

    Swift

    মনে রাখবেন: এই প্রোডাক্ট macOS, Mac Catalyst, tvOS বা watchOS টার্গেটে উপলভ্য নয়।
    func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
      let handled = DynamicLinks.dynamicLinks()
        .handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in
          // ...
        }
    
      return handled
    }

    Objective-C

    মনে রাখবেন: এই প্রোডাক্ট macOS, Mac Catalyst, tvOS বা watchOS টার্গেটে উপলভ্য নয়।
    - (BOOL)application:(UIApplication *)application
    continueUserActivity:(nonnull NSUserActivity *)userActivity
     restorationHandler:
    #if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0)
    (nonnull void (^)(NSArray<id> *_Nullable))restorationHandler {
    #else
        (nonnull void (^)(NSArray *_Nullable))restorationHandler {
    #endif  // __IPHONE_12_0
      BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL
                                                              completion:^(FIRDynamicLink * _Nullable dynamicLink,
                                                                           NSError * _Nullable error) {
                                                                // ...
                                                              }];
      return handled;
    }
  8. শেষে, application:openURL:options:-এ আপনার অ্যাপের কাস্টম URL স্কিমের মাধ্যমে পাওয়া লিঙ্কগুলি ম্যানেজ করুন। ইনস্টল করার পরে আপনার অ্যাপ প্রথমবার খোলা হলে এই পদ্ধতি কল করা হয়।

    আপনার অ্যাপ প্রথমবার লঞ্চ করার সময় Dynamic Link খুঁজে না পাওয়া গেলে, এই পদ্ধতিটি DynamicLink-এর url nil-এ সেট করে কল করা হবে, যা ইঙ্গিত করে যে SDK একটি ম্যাচিং পেন্ডিং Dynamic Link খুঁজে পেতে ব্যর্থ হয়েছে।

    Swift

    মনে রাখবেন: এই প্রোডাক্ট macOS, Mac Catalyst, tvOS বা watchOS টার্গেটে উপলভ্য নয়।
    @available(iOS 9.0, *)
    func application(_ app: UIApplication, open url: URL,
                     options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool {
      return application(app, open: url,
                         sourceApplication: options[UIApplication.OpenURLOptionsKey
                           .sourceApplication] as? String,
                         annotation: "")
    }
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
                     annotation: Any) -> Bool {
      if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
        // Handle the deep link. For example, show the deep-linked content or
        // apply a promotional offer to the user's account.
        // ...
        return true
      }
      return false
    }

    Objective-C

    মনে রাখবেন: এই প্রোডাক্ট macOS, Mac Catalyst, tvOS বা watchOS টার্গেটে উপলভ্য নয়।
    - (BOOL)application:(UIApplication *)app
                openURL:(NSURL *)url
                options:(NSDictionary *)options {
      return [self application:app
                       openURL:url
             sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                    annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
    }
    
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
      FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
    
      if (dynamicLink) {
        if (dynamicLink.url) {
          // Handle the deep link. For example, show the deep-linked content,
          // apply a promotional offer to the user's account or show customized onboarding view.
          // ...
        } else {
          // Dynamic link has empty deep link. This situation will happens if
          // Firebase Dynamic Links iOS SDK tried to retrieve pending dynamic link,
          // but pending link is not available for this device/App combination.
          // At this point you may display default onboarding view.
        }
        return YES;
      }
      return NO;
    }