适用于iOS 9.0及更高版本的Firebase动态链接无法使用对象FIRDynamicLink对象获取URL。给出零值

时间:2016-09-26 11:34:48

标签: ios firebase firebase-dynamic-links

我使用链接https://firebase.google.com/docs/dynamic-links/ios对firebase集成进行了更改,以下是处理URL并将用户导航到相应屏幕的处理。对于低于9.0的iOS版本,appdelegate的openURL方法被调用,我可以获取URL。但是对于iOS版本9.0及更高版本,我正在调用app delegate的ContinueUserActivity方法,因为我获得了dynamicLink.url的nil值。

我无法理解为什么我无法获取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);
}

4 个答案:

答案 0 :(得分:0)

我有同样的问题。我收到了restorationHandler的回调,但在handleUniversalLink回调动态链接错误都是零。花了一些时间我发现了这个问题。我的深层链接对象在两个单词之间包含空格

例如: 我的网址是这样的: https://domainname.com/card?title=Blue%20Card 。 起初它不是URLEncoded来自服务器端。所以,我在传递给URLEncoded对象之前将其设为Firebase Dynamic Link。 在我的iOS代码中,我必须进行以下更改:

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

现在,我的 dynamicLink 不是nil,我的linkURL字符串为我提供了深层链接对象。

答案 1 :(得分:0)

尝试更新Firebase / DynamicLinks。 我遇到了同样的问题,然后运行pod update Firebase / DynamicLinks。 现在pod Firebase / DynamicLinks的版本为6.21.0,而DynamicLink对象具有url值。

答案 2 :(得分:0)

在检查了所有博客并将此问题发布到firebase之后,我没有找到任何解决方案,但是我想出了这个具体解决方案,它肯定会起作用


此处 dynamicLinkURL 是您的主要动态链接,而 shortHandURL 是您的深层链接网址,该网址与您的动态链接。希望下面的代码片段能对您有所帮助。


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()

}

答案 3 :(得分:0)

对于pod 'Firebase/DynamicLinks', '~> 6.21.0'的简短网址,我也遇到了同样的问题

  • 最好先创建urlEncode所有组件,然后再创建动态 链接。
  • 您可能对动态链接使用了错误的自定义架构。对于短URL,出于某种原因处理架构。通过添加?d=1来调试缩短的URL,您将看到一个图表,描述了在不同情况下动态链接的流程。

enter image description here

点击自定义架构后,您将被重定向到一个看起来像这样的URL

enter image description here

被淘汰的是我的图式。

我在下面的语句

中提到了上面检索的模式

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

设置[FIRApp configure];后致电deepLinkURLScheme