6

我已经使用链接https://firebase.google.com/docs/dynamic-links/ios对 firebase 集成进行了更改,以下是处理 URL 并将用户导航到相应屏幕的处理。对于低于 9.0 的 iOS 版本,调用 appdelegate 的 openURL 方法,我能够获取 URL。但是对于 iOS 9.0 及更高版本,我在应用程序委托的 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

4 回答 4

0

在检查了所有博客并在 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()

}

于 2020-05-27T07:04:04.727 回答
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字符串给了我深度链接对象。

于 2018-02-26T05:26:09.440 回答
0

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

于 2020-04-08T08:52:19.707 回答
0

对于 SHORT URL,我遇到了同样的问题pod 'Firebase/DynamicLinks', '~> 6.21.0'

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

在此处输入图像描述

单击自定义架构后,您将被重定向到一个如下所示的 URL

在此处输入图像描述

被击中的东西是我的模式。

我在下面的语句中提到了上面检索到的架构

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

[FIRApp configure];设置后调用deepLinkURLScheme

于 2020-06-12T17:40:31.997 回答