如何解析 Firebase Dynamic Link 参数值并将其放入变量中?
How to parse Firebase Dynamic Link parameter values and put it in a variable?
我正在构建一个可以接收 Firebase 的动态链接并将其重定向到某个 UIViewController
的应用程序。我已按照 this video 上的步骤进行操作,但仍有一些我不明白的地方。所以在我按照上面的步骤操作之后,我在调试区域将我的 link 打印成这样:
Incoming link parameter is https://play.google.com/store/apps/details?id=com.xxx.xxx&referrer=utm_source%3DXXX%26utm_medium%3Dxxx%26utm_campaign%3DXXX
Parameter id has a value of com.xxx.xxx
Parameter referrer has a value of utm_source=XXX&utm_medium=xxx&utm_campaign=XXX
这非常有效,但我想做的是获取 utm_source
、utm_medium
和 utm_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 ?? "")")
}
}
那么我该如何做到这一点呢?如果您需要更多信息,请随时询问。谢谢。
以下是创建结构并为其赋值的方法。
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)")
}
我不知道这是否是最佳答案或正确的代码设计,但幸运的是我设法通过将 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”,以便我可以使用 [=12= 解析这些值] 功能。输出正是我所期望的。
Incoming link parameter is https://play.google.com/store/apps/details?id=com.xxx.xxx&referrer=utm_source%3Dxxx%26utm_medium%3Dxxx%26utm_campaign%3Dxxx
Referrer found
Parameter utm_source has a value of xxx
Parameter utm_medium has a value of xxx
Parameter utm_campaign has a value of xxx
我正在构建一个可以接收 Firebase 的动态链接并将其重定向到某个 UIViewController
的应用程序。我已按照 this video 上的步骤进行操作,但仍有一些我不明白的地方。所以在我按照上面的步骤操作之后,我在调试区域将我的 link 打印成这样:
Incoming link parameter is https://play.google.com/store/apps/details?id=com.xxx.xxx&referrer=utm_source%3DXXX%26utm_medium%3Dxxx%26utm_campaign%3DXXX
Parameter id has a value of com.xxx.xxx
Parameter referrer has a value of utm_source=XXX&utm_medium=xxx&utm_campaign=XXX
这非常有效,但我想做的是获取 utm_source
、utm_medium
和 utm_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 ?? "")")
}
}
那么我该如何做到这一点呢?如果您需要更多信息,请随时询问。谢谢。
以下是创建结构并为其赋值的方法。
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)")
}
我不知道这是否是最佳答案或正确的代码设计,但幸运的是我设法通过将 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”,以便我可以使用 [=12= 解析这些值] 功能。输出正是我所期望的。
Incoming link parameter is https://play.google.com/store/apps/details?id=com.xxx.xxx&referrer=utm_source%3Dxxx%26utm_medium%3Dxxx%26utm_campaign%3Dxxx
Referrer found
Parameter utm_source has a value of xxx
Parameter utm_medium has a value of xxx
Parameter utm_campaign has a value of xxx