Dynamic Link Object Has No Url

Dynamic link web URL query item is empty in Swift iOS

As mentioned in the comments you cannot create a dynamic link with variable product id in the firebase console, instead you need to generate it on the go. You can also include additional parameters if needed which may help in analytics for example if you would like to know which user share the link and what its impact...

In my opinion it's better to add product id as query parameter in the link. Moreover it will also be helpful in case of multi parameters. You can parse it easily with the parameter name for example:

var productId: String?
let urlComponents = URLComponents(string: urlString)
if let queryItems = urlComponents?.queryItems {
for queryItem in queryItems {
if queryItem.name == "product_id" {
productId = queryItem.value
}
}
}

Here is my code for generating dynamic link programmatically.

func generateAndShareDynamicLink(event: Event, controller: UIViewController, presentationCompletion: @escaping (() -> Void), dismissCompletion: @escaping (() -> Void) ) {

let user = Utility.shared.getCurrentUser()!
let ownReferralCode = user.ownReferralCode.value
let offerShareUrlString = youAPILink + "?referral=" + ownReferralCode + "&event_id=" + event.id.value + "&shared_by=" + user.userId.value + "&shared_by_name=" + user.fullName.value

let url = URL(string: offerShareUrlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)!

let iOSNavigationParams = DynamicLinkNavigationInfoParameters()
iOSNavigationParams.isForcedRedirectEnabled = false

let linkComponents = DynamicLinkComponents(link: url, domainURIPrefix: dynamicLinkGenaricDomain)!
linkComponents.navigationInfoParameters = iOSNavigationParams
linkComponents.iOSParameters = DynamicLinkIOSParameters(bundleID: bundleId)
linkComponents.iOSParameters?.appStoreID = kAppStoreId
linkComponents.iOSParameters?.customScheme = theBarCodeInviteScheme

linkComponents.androidParameters = DynamicLinkAndroidParameters(packageName: androidPackageName)

let descText = "\(user.fullName.value) has shared an event with you, check it out!"
linkComponents.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
linkComponents.socialMetaTagParameters?.title = "App Name"
linkComponents.socialMetaTagParameters?.descriptionText = descText
linkComponents.socialMetaTagParameters?.imageURL = tbcLogoUrl

linkComponents.otherPlatformParameters = DynamicLinkOtherPlatformParameters()
linkComponents.otherPlatformParameters?.fallbackUrl = URL(string: barCodeDomainURLString)

linkComponents.shorten { (shortUrl, warnings, error) in

guard error == nil else {
presentationCompletion()
controller.showAlertController(title: "Share Event", msg: error!.localizedDescription)
return
}

if let warnings = warnings {
debugPrint("Dynamic link generation warnings: \(String(describing: warnings))")
}

let activityViewController = UIActivityViewController(activityItems: [descText, shortUrl!], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = controller.view
activityViewController.completionWithItemsHandler = { (activityType, completed:Bool, returnedItems:[Any]?, error: Error?) in
dismissCompletion()
}
controller.present(activityViewController, animated: true, completion: {
presentationCompletion()
})
}

}

iOS Firebase Dynamic Link with weird long dynamic link url format issue


NSDictionary *FIRDLDictionaryFromQuery(NSString *queryString) {
NSArray<NSString *> *keyValuePairs = [queryString componentsSeparatedByString:@"&"];

NSMutableDictionary *queryDictionary = [NSMutableDictionary dictionaryWithCapacity:keyValuePairs.count];

for (NSString *pair in keyValuePairs) {
NSArray *keyValuePair = [pair componentsSeparatedByString:@"="];
if (keyValuePair.count == 2) {
NSString *key = keyValuePair[0];
NSString *value = [keyValuePair[1] stringByRemovingPercentEncoding];
[queryDictionary setObject:value forKey:key];
}
}
}

Then I tracking FIRDynamicLinks and found the root cause.

Dynamic link for iOS with filter char of @"&" and @"=" , according to the keyValuePair.count == 2, my params be dropped who the keyword of [link].

Due to my long dynamic link has two [=] symbol before first [&] symbol, keyValuePair.count is 3.

So that my dynamic link object hasn't link parameter and return nil

I think url have to refer to Manually constructing a Dynamic Link URL , and try to be the same.

Finally, I found to similar symptom Deep Link does not contain valid required params, link value have to percent encoded, solving my confuse and my issue.

But interesting, Android platform without this symptom, the same long dynamic link is workable.

Dynamic Links Firebase function not being called at all Xcode 12?

SwiftUI 1.0 / SceneDelegate

You do the same but in your SceneDelegate, following callback:

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
if let incomingURL = userActivity.webpageURL {
print("Incoming URL is \(incomingURL)")
let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) { (dynamicLink, error) in
guard error == nil else{
print("Found an error! \(error!.localizedDescription)")
return
}
if let dynamicLink = dynamicLink {
self.handleIncomingDynamicLink(dynamicLink)
}
}
}

SwiftUI 2.0 / WindowGroup

With SwiftUI 2.0 life-cycle you need to use instead .onContinueUserActivity, like

WindowGroup {
ContentView()
.onContinueUserActivity(<your_activity_type_here>) { userActivity in
if let incomingURL = userActivity.webpageURL {
print("Incoming URL is \(incomingURL)")
let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) { (dynamicLink, error) in
guard error == nil else{
print("Found an error! \(error!.localizedDescription)")
return
}
if let dynamicLink = dynamicLink {
self.handleIncomingDynamicLink(dynamicLink)
}
}
}
}
}

Firebase dynamic deep link arrives nil after install

For anybody who else who's encountering this same error...

  1. If your application:openURL method is getting called, and
  2. You do seem to be getting a valid dynamicLink object from your dynamicLinkFromCustomSchemeURL method, but
  3. The url parameter of that dynamicLink object is nil

Then double-check to see if you're in "Private" mode in Safari. That will kinda mess with Firebase Dynamic Links' ability to retrieve the original link that you clicked on.



Related Topics



Leave a reply



Submit