应用程序:openURL:选项:从 Firebase 动态链接安装应用程序后首次打开应用程序时未调用
Posted
技术标签:
【中文标题】应用程序:openURL:选项:从 Firebase 动态链接安装应用程序后首次打开应用程序时未调用【英文标题】:application:openURL:options: not called when first time app open after app installation from Firebase dynamic link pressing 【发布时间】:2017-08-25 04:30:59 【问题描述】:我阅读了所有我能找到的帖子,并且在点击粘贴到 ios 上的 Notes 应用程序中的动态链接后首次启动应用程序时仍然得到一个 nil URL。其实我是跟着视频看的:https://www.youtube.com/watch?v=sFPo296OQqk
通过application(_:continue:restorationHandler:)
,Universal Links 可以正常工作并且符合预期。
但是,当通过application(_:open:options:)
(以前的application:openURL:options:
)进入时,URL 以<my-scheme-name>://google/link/?is_weak_match=1
的形式出现。无论我如何配置我的项目/应用程序,URL 始终为零。此外,每次首次启动应用时都会调用application(_:open:options:)
,无论是否在安装应用之前点击了动态链接。这是意料之中的吗?
配置:
apple-app-site-association 文件已设置好,适合通用链接。 在 Info.plist 中设置了自定义 URL 方案。 使用最新的 GoogleService-Info.plist 不在 Safari 的“私人”模式下拨打didFinishLaunchingWithOptions
[FIROptions defaultOptions].deepLinkURLScheme = CUSTOM_URL_SCHEME;
[FIRApp configure];
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks dynamicLinkFromCustomSchemeURL:url];
if (dynamicLink)
// Handle the deep link. For example, show the deep-linked content or
// apply a promotional offer to the user's account.
// [START_EXCLUDE]
// In this sample, we just open an alert.
NSString *message = [self generateDynamicLinkMessage:dynamicLink];
[self showDeepLinkAlertViewWithMessage:message];
// [END_EXCLUDE]
return YES;
// [START_EXCLUDE silent]
// Show the deep link that the app was called with.
[self showDeepLinkAlertViewWithMessage:[NSString stringWithFormat:@"openURL:\n%@", url]];
// [END_EXCLUDE]
return NO;
// [END openurl]
// [START continueuseractivity]
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray *))restorationHandler
// [START_EXCLUDE silent]
NSLog(@"%@", userActivity.webpageURL);
__weak AppDelegate *weakSelf = self;
// [END_EXCLUDE]
BOOL handled = [[FIRDynamicLinks dynamicLinks]
handleUniversalLink:userActivity.webpageURL
completion:^(FIRDynamicLink * _Nullable dynamicLink,
NSError * _Nullable error)
// [START_EXCLUDE]
AppDelegate *strongSelf = weakSelf;
NSString *message = [strongSelf generateDynamicLinkMessage:dynamicLink];
[strongSelf showDeepLinkAlertViewWithMessage:message];
// [END_EXCLUDE]
];
// [START_EXCLUDE silent]
if (!handled)
// Show the deep link URL from userActivity.
NSString *message =
[NSString stringWithFormat:@"continueUserActivity webPageURL:\n%@", userActivity.webpageURL];
[self showDeepLinkAlertViewWithMessage:message];
// [END_EXCLUDE]
return handled;
// [END continueuseractivity]
- (NSString *)generateDynamicLinkMessage:(FIRDynamicLink *)dynamicLink
NSString *matchConfidence;
if (dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong)
matchConfidence = @"strong";
else
matchConfidence = @"weak";
NSString *msg = [NSString stringWithFormat:@"App URL: %@\n"
@"Match Confidence: %@\n",
dynamicLink.url, matchConfidence];
return msg;
- (void)showDeepLinkAlertViewWithMessage:(NSString *)message
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action)
NSLog(@"OK"); ];
UIAlertController *alertController =
[UIAlertController alertControllerWithTitle:@"Deep-link Data"
message:message
preferredStyle:UIAlertControllerStyleAlert];
[alertController addAction:okAction];
[self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
设置:
Xcode 8.3 部署目标:iOS 10.3.3 Objective-C【问题讨论】:
在您处理过的 AppDelegate 中显示您的代码。 我已经编辑了详细信息@JitendraSolanki 你在 didFinshLaunchingOptions 中返回了什么? - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions [FIROptions defaultOptions].deepLinkURLScheme = CUSTOM_URL_SCHEME; [FIRApp 配置];返回是; 您能否检查动态链接本身是否正常 - 在浏览器末尾附加 &d=1 应该会给您一个调试视图。 【参考方案1】:请尝试连接蜂窝网络和 WiFi 并重复实验。连接到不同的 WiFi 网络也可能有助于找出问题所在。如果您的 WiFi 具有少量面向公众的 IP 地址,则检索挂起的动态链接可能会失败。另请参阅此答案中的建议Firebase Dynamic Links not survive installation
如果这不起作用,我建议使用 Firebase 打开支持票。
关于您正在接收的链接<my-scheme-name>://google/link/?is_weak_match=1
:此链接由 FDL iOS SDK 发送,用于传达挂起的动态链接不可用的事件。只有在首次启动应用程序后,您才会收到此链接。如果我们找到待处理的动态链接,我们将改为传递该动态链接。
【讨论】:
以上是关于应用程序:openURL:选项:从 Firebase 动态链接安装应用程序后首次打开应用程序时未调用的主要内容,如果未能解决你的问题,请参考以下文章
如何从 UI Xctest 调用 Appdelegate 的“OpenURL”功能
Apple 是不是需要从您的应用程序中对 Safari 中的 openURL 进行网络检测?
当应用程序在 iOS 中处于后台时,openURL 不起作用