我使用链接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);
}
答案 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
所有组件,然后再创建动态
链接。?d=1
来调试缩短的URL,您将看到一个图表,描述了在不同情况下动态链接的流程。点击自定义架构后,您将被重定向到一个看起来像这样的URL
被淘汰的是我的图式。
我在下面的语句
中提到了上面检索的模式 [FIROptions defaultOptions].deepLinkURLScheme = @"xxx.xxxxx.xxxxxx";
设置[FIRApp configure];
后致电deepLinkURLScheme
。