iOS'te Dinamik Bağlantılar alma

Oluşturduğunuz Firebase Dynamic Links öğesini 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'e eklediğinizden emin olun inceleyebilirsiniz.

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

Firebase SDK'larını Apple projenize eklemenin farklı yolları (ör. doğrudan çerçeveleri içe aktarma ve CocoaPods kullanma) hakkında bilgi edinmek için
  1. Xcode'da, uygulamanız açıkken Dosya > Paket Ekle'ye 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 en iyi deneyimi yaşamak için Firebase projenizde Google Analytics'i etkinleştirmenizi ve Google Analytics için Firebase SDK'sını uygulamanıza eklemenizi öneririz. IDFA koleksiyonu olmayan veya IDFA koleksiyonu olan kitaplığı seçebilirsiniz.
  7. İşlem tamamlandığında Xcode, arka planda bağımlılarınızı otomatik olarak çözümlemeye ve indirmeye başlar.

Ardından, bazı yapılandırma adımlarını uygulayın:

  1. Firebase konsolunda Dynamic Links uygulamasını açın bölümüne bakın. İstenirse hizmet şartlarını kabul edin.
  2. Uygulamanızın App Store kimliğinin ve uygulama kimliği ön ekinin uygulamanızın ayarlarında belirtildiğinden emin olun. Uygulamanızın ayarlarını görüntülemek ve düzenlemek için şu adrese gidin: Firebase projenizin Ayarlar sayfasına gidip iOS uygulamanızı seçin.

    Firebase projenizin, iOS uygulamanızda Dynamic Links kullanmak için doğru şekilde yapılandırıldığını aşağıdaki URL'yi açarak 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 ön ekine ve paket kimliğine referans verir. Örneğin:

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

    details alanı boşsa uygulama kimliği ön ekini 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 kullanımını devre dışı bırakın yapıştırın.

    Varsayılan olarak Dynamic Links SDK'sı güvenilirliğini artırır. Panoyu kullanarak Dynamic Links kullanıcı bir Dynamic Link açtığında, ancak uygulamanın ilk olarak uygulanmasına izin verirseniz kullanıcı, söz konusu içeriğe göz atarken ilk kez açıldığından emin olun.

    Bunun dezavantajı, iOS 14 ve sonraki sürümlerde yapıştırma panonun kullanılmasının bildirim tetiklemesi Bu nedenle, kullanıcılar uygulamanızı ilk kez açtığında, yapıştırma panosunun URL içermesi durumunda uygulamanızın yapıştırma panosuna eriştiğine dair 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 sekmesinde yeni bir Dynamic Links için kullanılacak URL türü. 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ıza ayarlayın.
  2. Uygulamanızın Xcode projesinin Özellikler sekmesinde, İlişkili Alanlar'ı etkinleştirin ve İlişkili Alanlar listesine aşağıdakileri ekleyin:
    applinks:your_dynamic_links_domain
  3. Tamamen özel bir alan ile Dynamic Links almak istiyorsanız Xcode projenizin Info.plist dosyasında FirebaseDynamicLinksCustomDomains adlı bir anahtar oluşturun ve bu anahtarı 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 ve diğer Yetki verdiğiniz uygulamanın kullandığı Firebase modülleri. Örneğin, Cloud Firestore ve Authentication özelliklerini 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. Şunu yapılandır: FirebaseApp paylaşılan örneğinizin application(_:didFinishLaunchingWithOptions:) yöntemi:

    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 UIApplicationDelegateAdaptor veya NSApplicationDelegateAdaptor aracılığıyla App yapınıza eklemeniz gerekir. Uygulama yetkisi kaydı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, olarak alınan bağlantıları işle Geçiş Bağlantıları (uygulama zaten yüklüyse):

    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ı aracılığıyla alınan bağlantıları işleyin. Bu yöntem Uygulamanız yükleme işleminden sonra ilk kez açıldığında.

    Uygulamanızın ilk kez başlatılmasında Dynamic Link bulunamazsa bu yöntem DynamicLink öğesinin url değeri nil olarak ayarlandı. Bu, SDK'nın Dynamic Link için bekleyen bir eşleşme bulunamadı.

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