Firebase Dynamic Linking для iOS версии 9.0 и выше не может получить URL-адрес с помощью объекта FIRDynamicLink. Это дает нулевое значение

Я внес изменения для интеграции с Firebase, используя ссылку https://firebase.google.com/docs/dynamic-links/ios Ниже приведена обработка, выполняемая для обработки URL-адреса и перехода пользователя к соответствующему экрану. для версии iOS ниже 9.0 вызывается метод appdelegate openURL, и я могу получить URL-адрес. Но для iOS версии 9.0 и выше я получаю вызов в методе ContinueUserActivity делегата приложения, и в этом я получаю нулевое значение dynamicLink.url.

Я не могу понять, почему я не могу получить URL-адрес.

- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * _Nullable))restorationHandler {
       NSLog(@"Short URl : %@",userActivity.webpageURL);
       __weak AppDelegate *weakSelf = self;
       BOOL handled = [[FIRDynamicLinks dynamicLinks]
                 handleUniversalLink:userActivity.webpageURL
                    completion:^(FIRDynamicLink * _Nullable dynamicLink,
                                 NSError * _Nullable error) {
                         AppDelegate *strongSelf = weakSelf;
                         [strongSelf handleReceivedLink:dynamicLink];
                    }];
return handled;
}
-(void)handleReceivedLink:(FIRDynamicLink*)dynamicLink{
    NSString* urlString = [NSString stringWithFormat:@"%@",dynamicLink.url];
    NSLog(@"Extended URL : %@",urlString);
}

person Gaurav Shishodia    schedule 26.09.2016    source источник
comment
У меня такая же проблема. Мне удалось сузить до %20 символов в моем пользовательском параметре. По какой-то странной причине, если я заменил его на% 2520, он отлично работает. Я думаю, это ошибка.   -  person HeavenlyManBR    schedule 11.11.2016
comment
HeavenlyManBR да, это ошибка. Какой параметр вы заменяете? Не могли бы вы уточнить решение.   -  person Gaurav Shishodia    schedule 11.11.2016
comment
Например, в моей ссылке я предоставляю пользовательский параметр https://domain.com/card?title=[sometitle]; если я передам в заголовок более одного слова, например, Blue Card, и закодирую его, он станет https://domain.com/card?title=Blue%20Card. Проблема в том, что handleUniversalLink просто не обработает URL и не выдаст ошибку; если я вручную заменил %20 на %2520, это сработает. Подводя итог, проверьте, передаете ли вы какие-либо параметры с пробелом. Опять же, это не решение, а просто то, что я нашел, поскольку это может помочь вам отладить вашу проблему.   -  person HeavenlyManBR    schedule 11.11.2016
comment
Хорошо, но в моем случае URL-адрес не содержит пробелов.   -  person Gaurav Shishodia    schedule 11.11.2016
comment
Возвращает ли завершение ошибку или блок никогда не запускается?   -  person HeavenlyManBR    schedule 11.11.2016
comment
dynamicLink.url в завершении возвращает nil. Расширенный URL-адрес, который я печатаю в NSLog, дает ноль.   -  person Gaurav Shishodia    schedule 11.11.2016
comment
@HeavenlyManBR, не могли бы вы поделиться своей реализацией в делегате continueUserActivity. Поскольку он работает нормально для вас, но не для меня.   -  person Gaurav Shishodia    schedule 17.11.2016
comment
взгляните на это: stackoverflow.com/a/42526447/2898708   -  person Noor Ali Butt    schedule 01.03.2017


Ответы (4)


Я была такая же проблема. Я получал обратный вызов restorationHandler, но в обратном вызове handleUniversalLink динамическая ссылка и ошибка были нулевыми. Потратив некоторое время, я нашел проблему. Мой объект глубокой ссылки содержал пробел между двумя словами.

Например: мой URL был таким: https://domainname.com/card?title=Blue%20Card. Сначала это было не URLEncoded со стороны сервера. Итак, я сделал это URLEncoded перед переходом к объекту Firebase Dynamic Link. И в моем коде iOS мне пришлось внести следующие изменения:

NSString *linkURL = [NSString stringWithFormat:@"%@",dynamicLink.url];
linkURL = [linkURL stringByRemovingPercentEncoding];

Теперь моя dynamicLink не равна нулю, и моя строка linkURL дает мне объект глубокой ссылки.

person Pratik Shah    schedule 26.02.2018

Попробуйте обновить Firebase/DynamicLinks. У меня была такая же проблема, и я запускал модуль обновления Firebase/DynamicLinks. Теперь модуль Firebase/DynamicLinks имеет версию 6.21.0, а объект DynamicLink имеет значение URL.

person Lana    schedule 08.04.2020

Проверив все блоги и опубликовав эту проблему в firebase, я не нашел для нее решения, но нашел это конкретное решение, и оно определенно сработает


здесь: dynamicLinkURL – это ваша основная динамическая ссылка, а shortHandURL – URL-адрес ссылки на контент, связанный с вашей динамической ссылкой. Я надеюсь, что приведенный ниже фрагмент поможет вам.


func dynamicLinkhandler(_ dynamicLinkURL: URL, onCompletion: @escaping(_ success: Bool) -> Void) {
URLSession.shared.dataTask(with: dynamicLinkURL) { (data, response, error) in
    guard error == nil else {
        print("Found Error \(String(describing: error?.localizedDescription)))")
        return
    }
    guard let shortHandURL = response?.url, shortHandURL != dynamicLinkURL else {
        print("Thats Weird, my dynamic link has no URL")
        onCompletion(false)
        return
    }
    onCompletion(true)
}.resume()

}

person Purnendu roy    schedule 27.05.2020

Я столкнулся с той же проблемой для коротких URL-адресов с pod 'Firebase/DynamicLinks', '~> 6.21.0'

  • Перед созданием динамической ссылки лучше выполнить urlEncode все компоненты.
  • Возможно, вы используете неправильную пользовательскую схему для динамических ссылок. В случае короткого URL-адреса по какой-то причине обрабатывается схема. Отладьте сокращенный URL-адрес, добавив ?d=1, и вы увидите диаграмму, которая отображает поток динамических ссылок в разных случаях.

введите здесь описание изображения

После нажатия на Пользовательскую схему вы будете перенаправлены на URL-адрес, который будет выглядеть примерно так:

введите здесь описание изображения

Вычеркнутая вещь — моя схема.

Я упомянул схему, полученную выше, в приведенном ниже заявлении.

[FIROptions defaultOptions].deepLinkURLScheme = @"xxx.xxxxx.xxxxxx";

Позвоните [FIRApp configure]; после установки deepLinkURLScheme.

person DeltaCap019    schedule 12.06.2020