iOS'te Dinamik Bağlantılar alma

Oluşturduğunuz Firebase Dynamic Links'i almak için uygulamanıza Dynamic Links SDK'sını dahil etmeniz ve uygulamanız yüklendiğinde Dynamic Link'te iletilen verileri almak için handleUniversalLink: ile dynamicLinkFromCustomSchemeURL: yöntemlerini çağırmanız gerekir.

Ön koşullar

Başlamadan önce Firebase'i iOS projenize eklediğinizden emin olun.

Firebase bağımlılıklarını yükleyip yönetmek için Swift Package Manager'ı kullanın.

  1. Xcode'da, uygulamanız açıkken File > Add Packages'a (Dosya > Paket Ekle) gidin.
  2. İstendiğinde Firebase Apple platformlar SDK deposunu ekleyin:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Dynamic Links kitaplığını seçin.
  5. -ObjC işaretini, hedefinizin derleme ayarlarındaki Diğer Bağlayıcı İşaretleri bölümüne ekleyin.
  6. Dynamic Links ile optimum bir deneyim elde etmek için Firebase projenizde Google Analytics'i etkinleştirmenizi ve Google Analytics için Firebase SDK'sını uygulamanıza eklemenizi öneririz. IDFA toplama olmayan veya IDFA toplamalı kitaplığı seçebilirsiniz.
  7. İşlem tamamlandığında Xcode, arka planda bağımlılıklarınızı otomatik olarak çözümlemeye ve indirmeye başlar.

Şimdi bazı yapılandırma adımlarını uygulayın:

  1. Firebase konsolunda Dinamik Bağlantılar bölümünü açın. İstendiğinde hizmet şartlarını kabul edin.
  2. Uygulamanızın App Store Kimliği ve Uygulama Kimliği ön ekinizin, uygulamanızın ayarlarında belirtildiğinden emin olun. Uygulamanızın ayarlarını görüntülemek ve düzenlemek için Firebase projenizin Ayarlar sayfasına gidip iOS uygulamanızı seçin.

    Aşağıdaki URL'yi açarak Firebase projenizin iOS uygulamanızda Dynamic Links'i kullanacak şekilde doğru şekilde yapılandırıldığını onaylayabilirsiniz:

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

    Uygulamanız bağlıysa apple-app-site-association dosyası, uygulamanızın Uygulama Kimliği önekine ve paket kimliğine referans içerir. Örnek:

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

    details alanı boşsa Uygulama Kimliği ön ekinizi belirttiğinizi tekrar kontrol edin. Uygulama kimliği ön ekinizin, Ekip Kimliğinizle aynı olmayabileceğini unutmayın.

  3. İsteğe bağlı: Dynamic Links SDK'sının iOS yapıştırma panosu kullanımını devre dışı bırakın.

    Varsayılan olarak Dynamic Links SDK'sı, yükleme sonrası derin bağlantıların güvenilirliğini artırmak için yapıştırma panosunu kullanır. Dinamik Bağlantılar, yapıştırma panosunu kullanarak bir kullanıcı bir Dinamik Bağlantı açtığında ancak önce uygulamanızı yüklemesi gerektiğinde, uygulamayı yükledikten sonra ilk kez açarken hemen orijinal bağlantılı içeriğe gitmesini sağlayabilir.

    Bunun olumsuz tarafı, yapıştırma panosu kullanımının iOS 14 ve sonraki sürümlerde bir bildirimi tetiklemesidir. Dolayısıyla kullanıcılar uygulamanızı ilk kez açtıklarında, yapıştırma panosunda bir URL varsa uygulamanızın yapıştırma panosuna eriştiğine dair bir bildirim görürler. Bu durum karışıklığa neden olabilir.

    Bu davranışı devre dışı bırakmak için Xcode projenizin Info.plist dosyasını düzenleyin ve FirebaseDeepLinkPasteboardRetrievalEnabled anahtarını NO olarak ayarlayın.

  1. Uygulamanızın Xcode projesinin Info sekmesinde, Dynamic Links için kullanılacak yeni bir URL türü oluşturun. Tanımlayıcı alanını benzersiz bir değere, URL şeması alanını ise Dynamic Links tarafından kullanılan varsayılan URL şeması olan paket tanımlayıcınız olacak şekilde ayarlayın.
  2. Uygulamanızın Xcode projesinin Capabilities (Özellikler) sekmesinde, Associated Domains'i (İlişkili Alanlar) etkinleştirin ve aşağıdakileri Associated Domains (İlişkili Alanlar) listesine ekleyin:
    applinks:your_dynamic_links_domain
  3. Tümüyle özel bir alan adına sahip Dynamic Links almak istiyorsanız Xcode projenizin Info.plist dosyasında FirebaseDynamicLinksCustomDomains adında bir anahtar oluşturun ve bunu uygulamanızın Dynamic Links URL öneklerine ayarlayın. Örneğin:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. FirebaseCore modülünü UIApplicationDelegate uygulamanıza ve yetki verdiğiniz kullanıcının kullandığı diğer tüm Firebase modüllerini içe aktarın. Örneğin, Cloud Firestore ve Authentication'ı kullanmak için:

    Hızlı Kullanıcı Arayüzü

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

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. Uygulama yetkilinizin application(_:didFinishLaunchingWithOptions:) yönteminde FirebaseApp paylaşılan bir örnek yapılandırın:

    Hızlı Kullanıcı Arayüzü

    // 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 kullanıyorsanız bir uygulama temsilcisi oluşturmanız ve UIApplicationDelegateAdaptor veya NSApplicationDelegateAdaptor aracılığıyla App yapınıza eklemeniz gerekir. Uygulama yetkilendirmesi kaydırmayı da devre dışı bırakmanız gerekir. Daha fazla bilgi için SwiftUI talimatlarına bakın.

    Hızlı Kullanıcı Arayüzü

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. Daha sonra, application:continueUserActivity:restorationHandler: yönteminde, uygulama zaten yüklüyken Geçiş Bağlantıları olarak alınan bağlantıları işleyin:

    Swift

    Not: Bu ürün macOS, Mac Catalyst, tvOS veya watchOS hedeflerinde kullanılamaz.
    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

    Not: Bu ürün macOS, Mac Catalyst, tvOS veya watchOS hedeflerinde kullanılamaz.
    - (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<UIUserActivityRestoring>> *_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. Son olarak, application:openURL:options: içinde, uygulamanızın özel URL şeması üzerinden alınan bağlantıları işleyin. Bu yöntem, uygulamanız yükleme işleminden sonra ilk kez açıldığında çağrılır.

    Uygulamanızın ilk kez başlatılmasında Dinamik Bağlantı bulunamazsa bu yöntem, DynamicLink öğesinin url değeri nil olarak ayarlanmış şekilde çağrılır. Bu, SDK'nın bekleyen bir Dinamik Bağlantı bulamadığını gösterir.

    Swift

    Not: Bu ürün macOS, Mac Catalyst, tvOS veya watchOS hedeflerinde kullanılamaz.
    @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

    Not: Bu ürün macOS, Mac Catalyst, tvOS veya watchOS hedeflerinde kullanılamaz.
    - (BOOL)application:(UIApplication *)app
                openURL:(NSURL *)url
                options:(NSDictionary<NSString *, id> *)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;
    }