Firebase 动态链接无法直接打开应用
Posted
技术标签:
【中文标题】Firebase 动态链接无法直接打开应用【英文标题】:Firebase Dynamic Link can’t open app directly 【发布时间】:2017-12-07 03:27:10 【问题描述】:根据 Firebase 文档,我在 Firebase 控制台中创建动态链接,然后在我的应用中包含动态链接 SDK。
一切都很好,但是当我从 facebook 或 messenger 中单击共享链接(这是我的动态链接)时,它会弹出一个带有打开应用程序按钮的页面,并询问我是否要打开我的应用程序。 我没有制作这个页面。我想删除这个。
但我点击备忘录中的链接,它会打开我的应用程序并直接转到正确的页面。我希望以同样的方式处理共享链接。
这是我的代码,我使用 Xcode 和 Objective-c 开发 ios 应用程序。谢谢!
Appdelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[FIROptions defaultOptions].deepLinkURLScheme = @"com.levooya.LeVooya";
[FIRApp configure];
return YES;
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * _Nullable))restorationHandler
NSURL *url = userActivity.webpageURL;
NSLog(@"continueUserActivity url.absoluteString:%@",url.absoluteString);
BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL completion:^(FIRDynamicLink *dynamicLink, NSError *error)
if(dynamicLink.url)
NSLog(@"okokokokokok");
NSLog(@"dynamicLink.url:%@",dynamicLink.url);
NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:dynamicLink.url
resolvingAgainstBaseURL:NO];
for(NSURLQueryItem *item in urlComponents.queryItems)
if([item.name isEqualToString:@"product_id"])
NSLog(@"item.value:%@",item.value);
NSString *productID = item.value;
NSDictionary *urlSchemeDict = [[NSDictionary alloc] init];
urlSchemeDict = [NSDictionary dictionaryWithObject:productID forKey:@"product_id"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"URLSchemeShowProduct" object:nil userInfo:urlSchemeDict];
leData = [LevooyaData getInstance];
leData.urlSchemeDict = nil;
leData.urlSchemeDict = urlSchemeDict;
];
return YES;
ProductView.m
(这是在我的应用中显示产品的页面,这里是我点击分享按钮生成动态链接的功能。)
- (void)share
NSString *originalLink = [NSString stringWithFormat:@"https://pbu3y.app.goo.gl/?link=https://levooya.com/product?product_id=%u&isi=1221262097&ibi=com.levooya.LeVooya&product_id=%u", productID, productID];
NSURL *link = [NSURL URLWithString:originalLink];
FIRDynamicLinkComponents *components =
[FIRDynamicLinkComponents componentsWithLink:link
domain:@"pbu3y.app.goo.gl"];
FIRDynamicLinkSocialMetaTagParameters *socialParams = [FIRDynamicLinkSocialMetaTagParameters parameters];
socialParams.title = product.brand;
socialParams.descriptionText = product.product;
components.socialMetaTagParameters = socialParams;
FIRDynamicLinkNavigationInfoParameters *navigationInfoParameters = [FIRDynamicLinkNavigationInfoParameters parameters];
navigationInfoParameters.forcedRedirectEnabled = 0;
components.navigationInfoParameters = navigationInfoParameters;
[components shortenWithCompletion:^(NSURL *_Nullable shortURL,
NSArray *_Nullable warnings,
NSError *_Nullable error)
// Handle shortURL or error.
if (error)
NSLog(@"Error generating short link: %@", error.description);
return;
shortenURL = shortURL;
NSString *noteStr = [NSString stringWithFormat:NSLocalizedString(@"Check out %@ %@ on Levooya ! %@", nil), product.brand, product.product, shortenURL];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[noteStr] applicationActivities:nil];
[self presentViewController:activityVC animated:YES completion:nil];
];
【问题讨论】:
请在此处查看我的答案:***.com/questions/44252185/… 【参考方案1】:你说的页面是App预览页面,见https://firebase.google.com/docs/dynamic-links/link-previews。
您可以通过指定动态链接参数efr=1
来禁用此页面。在控制台中创建链接以禁用此页面时,还有一个复选框。在您的代码中使用navigationInfoParameters.forcedRedirectEnabled = YES;
。
注意事项:如果您在 iPhone 上已安装您的应用时看到应用预览页面,这意味着通用链接无法使用。将动态链接粘贴到浏览器地址栏时可能会发生这种情况。或点击发生在非合作应用程序内的链接(某些应用程序不允许使用通用链接)。确保您在禁用应用预览的情况下测试了链接行为并对此感到满意。
编辑: 刚刚意识到您的深层链接不正确。 而不是
NSString *originalLink = [NSString stringWithFormat:@"https://pbu3y.app.goo.gl/?link=https://levooya.com/product?product_id=%u&isi=1221262097&ibi=com.levooya.LeVooya&product_id=%u", productID, productID];
你应该使用你的深层链接,像这样:
NSString *originalLink = [NSString stringWithFormat:@"https://levooya.com/product?product_id=%u", productID];
【讨论】:
感谢您的回复!但它仍然不起作用:(但是,我从写在我的ProductView.m中的原始链接中的“ibi”参数中删除了“com.”,它隐藏了应用预览页面!但是如果用户这样做了,就会出现另一个问题未安装的应用,它不会链接到应用商店.... 在您的代码中遗漏了一点,已编辑答案。您需要使用 FIRDynamicLinkIOSParameters 填写 iOS 相关参数。参见firebase.google.com/docs/dynamic-links/ios/create如何在iOS上创建链接和提供参数。 非常感谢。我将我的 originalLink 更改为“levooya.com/product?product_id=%u”,如果应用程序已安装,它会完美地指向我的应用程序!但是当应用程序没有安装时,我仍然无法链接到应用程序商店。我想可能是参数问题。 您是否指定了 FIRDynamicLinkIOSParameters?发生 AppStore 导航所需的 FIRDynamicLinkIOSParameters.appStoreID。 我测试了几天,有一个问题:这是一种设置预览页面的方法,只在应用卸载时显示,但在安装时隐藏?我曾尝试指定 FIRDynamicLinkIOSParameters,但是当我添加它时,动态链接总是首先显示预览页面。以上是关于Firebase 动态链接无法直接打开应用的主要内容,如果未能解决你的问题,请参考以下文章
带有颤动的 Firebase 动态链接:深层链接 URL 未打开应用程序
未安装应用时,Firebase 动态链接会打开 Weblink 而不是 App Store
Firebase 动态链接 - 从 Play 商店安装应用程序后无法在 android 中获取 Url