iOS'te Dinamik Bağlantılar alma

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

Ön koşullar

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

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

  1. Xcode'da, uygulamanız açıkken File > Add Packages (Dosya > Paket Ekle) seçeneğine 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ının Other Linker Flags (Diğer Bağlayıcı İşaretleri) bölümüne ekleyin.
  6. Dynamic Links ile en iyi deneyimi elde etmek için Firebase projenizde Google Analytics'ı etkinleştirmenizi ve uygulamanıza Google Analytics için Firebase SDK'sını eklemenizi öneririz. IDFA toplama özelliği olmayan veya IDFA toplama özelliği olan kitaplığı seçebilirsiniz. Firebase SDK'sında Google Analytics için modüllerin en son düzenlenmesi ile ilgili SSS bölümümüzü inceleyin.
  7. İşlem tamamlandığında Xcode otomatik olarak arka planda bağımlılarınızı çözümlemeye ve indirmeye başlar.

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

  1. Firebase konsolunda Dynamic Links bölümünü açın. İstenirse hizmet şartlarını kabul edin.
  2. Uygulamanızın App Store kimliğinin ve uygulama kimliği önekinizin 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 gidin ve iOS uygulamanızı seçin.

    Aşağıdaki URL'yi açarak Firebase projenizin iOS uygulamanızda Dynamic Links kullanmak üzere 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. Örneğin:

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

    details alanı boşsa Uygulama Kimliği önekini belirttiğinizden emin olun. 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 panosunu kullanmasını devre dışı bırakın.

    Dynamic Links SDK, yükleme sonrası derin bağlantıların güvenilirliğini artırmak için varsayılan olarak pano kullanır. Pano kullanılarak Dynamic Links bir kullanıcının Dynamic Link açtığında ancak önce uygulamanızı yüklemesi gerektiğinde, yüklemeden sonra uygulamayı ilk kez açtığında doğrudan orijinal bağlantılı içeriğe gidebilmesi sağlanabilir.

    Bunun dezavantajı, pano kullanımının iOS 14 ve sonraki sürümlerde bildirim tetiklemesidir. Bu nedenle, kullanıcılar uygulamanızı ilk kez açtığında, pano URL içeriyorsa uygulamanızın panoya eriştiğini belirten bir bildirim görürler. Bu durum kafa karışıklığına 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 (Bilgi) sekmesinde, Dynamic Links için kullanılacak yeni bir URL türü oluşturun. Identifier (Tanımlayıcı) alanını benzersiz bir değere, URL scheme (URL şeması) alanını ise Dynamic Links tarafından kullanılan varsayılan URL şeması olan paket tanımlayıcınıza ayarlayın.
  2. Uygulamanızın Xcode projesinin Capabilities (Özellikler) sekmesinde Associated Domains'i (İlişkili Alanlar) etkinleştirin ve Associated Domains (İlişkili Alanlar) listesine aşağıdakileri ekleyin:
    applinks:your_dynamic_links_domain
  3. Dynamic Links ile tamamen özel bir alan almak istiyorsanız Xcode projenizin Info.plist dosyasında FirebaseDynamicLinksCustomDomains adlı bir anahtar oluşturun ve bunu uygulamanızın Dynamic Links URL ön eklerine ayarlayın. Örneğin:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
  4. FirebaseCore modülünü UIApplicationDelegate dosyanıza ve uygulama temsilcinizin kullandığı diğer Firebase modüllerine aktarın. Örneğin, Cloud Firestore ve Authentication kullanmak için:

    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. Uygulama temsilcinizin application(_:didFinishLaunchingWithOptions:) yönteminde paylaşılan bir FirebaseApp örneği yapılandırın:

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

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. Ardından, 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> *_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, uygulamanızın özel URL şeması aracılığıyla alınan application:openURL:options: bağlantılarını işleyin. Bu yöntem, uygulamanız yüklendikten sonra ilk kez açıldığında çağrılır.

    Dynamic Link, uygulamanızın ilk başlatılmasında bulunamazsa bu yöntem, SDK'nın eşleşen bekleyen bir Dynamic Link bulamadığını belirten DynamicLink'nin url'si nil olarak ayarlanmış şekilde çağrılır.

    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 *)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;
    }