首页 > 解决方案 > Firebase iOS 单击缩短的链接返回“接收失败并出现错误“软件导致连接中止””

问题描述

我只是要粘贴几个我的文件,这样你就可以很容易地测试它,看看发生了什么。我正在单击按钮,它正在创建缩短的动态链接。然后,我在笔记应用程序中输入 DynamicLink,然后按下链接。我被重定向到应用程序并返回以下错误:

[连接] nw_read_request_report [C1] 接收失败,出现错误“软件导致连接中止”

旁注:所有这些都在 iPhone 7(物理设备,而不是模拟器)上进行测试。

FirebaseTestApp 和 AppDelegate:

import SwiftUI
import Firebase

@main
struct FirebaseTestApp: App {

@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

var body: some Scene {
    WindowGroup {
        ContentView()
    }
}
}

class AppDelegate: NSObject, UIApplicationDelegate {

var functionMaster: functions = functions()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    FirebaseApp.configure()
    return true
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
     let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url)
     if dynamicLink != nil {
          print("Dynamic link : \(String(describing: dynamicLink?.url))")
          return true
     }
     return false
}

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    print("Successful penetration")
    guard let inComingURL = userActivity.webpageURL else { return false }
         print("Incoming Web Page URL: \(inComingURL)")
    self.functionMaster.handleIncomingDynamicLink(inComingURL)
         return true
}
}

函数类:

import Foundation
import Firebase
import UIKit

class functions: ObservableObject {
func makeDynamicLink() {
    var components = URLComponents()
    components.scheme = "https"
    components.host = "www.firebase-test.com" //this can be some random domain right? It doesn't have to actually exist yet?
    components.path = "/data"
    let stringifiedNumber = String(123)
    components.queryItems = [stringifiedNumber]
    let dynamicLinksDomainURIPrefix = "https://something.page.link"
    
    guard let linkParameter = components.url else { return }
    print("I am sharing \(linkParameter)")
    
    guard let linkBuilder = DynamicLinkComponents(link: linkParameter, domainURIPrefix: dynamicLinksDomainURIPrefix) else { return }
    
    if let myBundleId = Bundle.main.bundleIdentifier {
        linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: myBundleId)
    }
    linkBuilder.iOSParameters?.appStoreID = "962194608"
    
    linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
    linkBuilder.socialMetaTagParameters?.title = testLocation.name
    linkBuilder.socialMetaTagParameters?.descriptionText = testLocation.address
    
    linkBuilder.shorten { [weak self] (url, warnings, error) in
        if let error = error{
            print("Firebase encountered an error: \(error)")
            return
        }
        if let warnings = warnings {
            for warning in warnings {
                print("Firebase Warning: \(warning)")
            }
        }
        guard let url = url else { return }
        print("The short URL is: \(url.absoluteString)")
        
        self?.showShareSheet(url: url)
    }

    guard let longDynamicLink = linkBuilder.url else { return }
    print("The long URL is: \(longDynamicLink)")
}

func showShareSheet(url: URL) {
    let promoText = "Check out this thing I've marked in FirebaseTest!"
    let activityVC = UIActivityViewController(activityItems: [promoText, url], applicationActivities: nil)
    UIApplication.shared.windows.first?.rootViewController?.present(activityVC, animated: true)
}

func handleIncomingDynamicLink(_ dynamicLink: URL) {

    _ = DynamicLinks.dynamicLinks().handleUniversalLink(dynamicLink) { (dynamiclink, error) in

          guard error == nil else {
          print("Found an error: \(error?.localizedDescription ?? "")")
          return
          }
          print("Dynamic link : \(String(describing: dynamiclink?.url))")
          let path = dynamiclink?.url?.path
          var id = 0
          if let query = dynamiclink?.url?.query {
              let dataArray = query.components(separatedBy: "=")
              id = Int(dataArray[1]) ?? 0
          }
         if path == "data" {
             //Write code here
         }
       }
    
}
}

内容视图:

import SwiftUI

struct ContentView: View {

@ObservedObject var functionMaster: functions = functions()

var body: some View {
    Button("Click me to run some firebase stuff") {
        functionMaster.makeDynamicLink()
    }
        .padding()
}
}

在浏览器中,当我导航到https://something.page.link/apple-app-site-association时,我得到了这个:

https://i.stack.imgur.com/6Ndo0.png

标签: swiftfirebaseswiftuiappdelegatefirebase-dynamic-links

解决方案


推荐阅读