【问题标题】:How to parse Firebase Dynamic Link parameter values and put it in a variable?如何解析 Firebase 动态链接参数值并将其放入变量中?
【发布时间】:2020-09-21 03:56:09
【问题描述】:

我正在构建一个可以接收 Firebase 的动态链接并将其重定向到某个 UIViewController 的应用。我已按照this video 上的步骤进行操作,但仍有一些我不明白的地方。因此,按照上述步骤操作后,我将调试区域上的链接打印到如下内容:

传入链接参数为https://play.google.com/store/apps/details?id=com.xxx.xxx&referrer=utm_source%3DXXX%26utm_medium%3Dxxx%26utm_campaign%3DXXX

参数id的值为com.xxx.xxx

参数referrer的值为utm_source=XXX&utm_medium=xxx&utm_campaign=XXX

这很好用,但我想做的是我想获取utm_sourceutm_mediumutm_campaign 的值并将其存储到一个变量中。我仍然不确定如何实现这一目标。这是我的代码:

func handleIncomingDynamicLink(_ dynamicLink: DynamicLink) {
        guard let url = dynamicLink.url else {
            print("Dynamic Link has no URL")
            return
        }
        
        print("Incoming link parameter is \(url.absoluteString)")
        guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false), let queryItems = components.queryItems else { return }
        for queryItem in queryItems {
            print("Parameter \(queryItem.name) has a value of \(queryItem.value ?? "")")
        }
    }

那么我该如何做到这一点呢?随时询问您是否需要更多信息。谢谢。

【问题讨论】:

  • 您面临的困难是什么?得到你想要的值?还是将值传递给 viewcontroller?
  • @Frankenstein 获取值并将其存储到变量中,如果这是多余的,抱歉。我将编辑问题
  • 您的网址似乎不正确。如果 referrer 的值为空,您应该将 url 替换为以下 url:play.google.com/store/apps/…

标签: ios swift firebase firebase-dynamic-links


【解决方案1】:

我不知道这是最好的答案还是正确的代码设计,但幸运的是我设法通过将handleIncomingDynamicLink 函数更改为这样的方式来解决:

func handleIncomingDynamicLink(_ dynamicLink: DynamicLink) {
        guard let url = dynamicLink.url else {
            print("Dynamic Link has no URL")
            return
        }
        
        print("Incoming link parameter is \(url.absoluteString)")
        guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false), let queryItems = components.queryItems else { return }
        for queryItem in queryItems {
            if queryItem.name == "referrer" {
                print("Referrer found")
                
                let referrerString = "https://xxx.page.link/details?\(queryItem.value ?? "")"
                let referrerUrl = URL(string: referrerString)
                
                guard let queryItemComponents = URLComponents(url: referrerUrl!, resolvingAgainstBaseURL: false), let itemComponents = queryItemComponents.queryItems else {
                    print("Referrer string couldn't be casted as a URL")
                    return
                }
                
                for item in itemComponents {
                    print("Parameter \(item.name) has a value of \(item.value ?? "")")
                }
                
            }
        }
    }

所以基本上我所做的就是获取主 URL 的引用值并将其设为“自定义 URL”,以便我可以使用 URLComponents 函数解析这些值。输出正是我所期望的。

传入链接参数为https://play.google.com/store/apps/details?id=com.xxx.xxx&referrer=utm_source%3Dxxx%26utm_medium%3Dxxx%26utm_campaign%3Dxxx

找到推荐人

参数utm_source的值为xxx

参数utm_medium的值为xxx

参数utm_campaign的值为xxx

【讨论】:

    【解决方案2】:

    以下是创建结构并为其分配值的方法。

    struct MyVariable {
        var referrer: String?, utm_source: String?, utm_medium: String?, utm_campaign: String?
    }
    
    func handleIncomingDynamicLink(_ dynamicLink: URL?) {
        guard let string = dynamicLink?.absoluteString.removingPercentEncoding,
            let url = URL(string: string) else {
                print("Dynamic Link has no URL")
                return
        }
        var myVariable = MyVariable()
        guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
            let queryItems = components.queryItems else { return }
        for queryItem in queryItems {
            if queryItem.name == "referrer" {
                myVariable.referrer = queryItem.value
            } else if queryItem.name == "utm_source" {
                myVariable.utm_source = queryItem.value
            } else if queryItem.name == "utm_medium" {
                myVariable.utm_medium = queryItem.value
            } else if queryItem.name == "utm_campaign" {
                myVariable.utm_campaign = queryItem.value
            }
        }
        print("MyVariable: \(myVariable)")
    }
    

    【讨论】:

    • 感谢您的回答,不幸的是它不起作用,因为referrer 值中包含utm_sourceutm_mediumutm_campaign 的值。所以我不能打电话给queryItem.value 来获取他们的价值观。有没有其他方法可以解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2021-10-09
    • 2023-02-18
    相关资源
    最近更新 更多