iOS Firebase动态链接具有奇怪的长动态链接URL格式问题 [英] iOS Firebase Dynamic Link with weird long dynamic link url format issue

查看:93
本文介绍了iOS Firebase动态链接具有奇怪的长动态链接URL格式问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在基于FirebaseDynamicLinks(4.0.8)的长动态链接上,我遇到了一个奇怪的问题:

I encounter a weird issue with long dynamic link base on FirebaseDynamicLinks (4.0.8):

尝试引用类似的问题 firebase/quickstart-ios/issues /380#issuecomment-343255857 DynamicLinks.dynamicLinks() .handleUniversalLink返回false

Have tried refer to similar issues firebase/quickstart-ios/issues/380#issuecomment-343255857 and DynamicLinks.dynamicLinks().handleUniversalLink returns false

我的长动态链接格式类似于:

My long dynamic link format is alike that :

并且已经通过 appsearch-validation-tool确认我的真实链接是正常的

但是,我的AppDelegate中的handleUniversalLink实现没有回调,导致处理后的返回NO....

However, my implement of handleUniversalLink in AppDelegate without call back, cause the handled return NO....

- (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
    if ([userActivity webpageURL] != nil) {
        NSString *incomingURL = [userActivity webpageURL].absoluteString;
        NSLog(@"Incoming URL is %@", incomingURL);

        BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL
        completion:^(FIRDynamicLink * _Nullable dynamicLink,
        NSError * _Nullable error) {
            if (error != nil) {
                return NSLog(@"Found an error! %@", error.localizedDescription);
            }

            if (dynamicLink != nil && dynamicLink.url != nil) {
                [self handleIncomingDynamicLink:dynamicLink]; // additional declare
            } else {
                NSLog(@"This's weird. Dynamic link object has no url");
            }
        }];

        if (handled) { 
            return YES; 
        } else {
            // may do other things with incoming URL
            return NO;
        }

    } else { return NO; }
}

推荐答案

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

然后我跟踪FIRDynamicLinks并找到根本原因.

Then I tracking FIRDynamicLinks and found the root cause.

iOS的动态链接,其过滤器字符为@&"和@"=",根据keyValuePair.count == 2,将删除[link]关键字的参数.

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

由于我的长动态链接在第一个[&]符号之前有两个[=]符号,因此keyValuePair.count为3.

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

这样我的动态链接对象就没有链接参数并返回nil

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

我认为url必须引用手动构建动态链接URL ,并尝试保持一致.

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.

但是有趣的是,没有这种症状的Android平台,相同的长动态链接是可行的.

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

这篇关于iOS Firebase动态链接具有奇怪的长动态链接URL格式问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆