使用动态链接首次下载后更新应用程序时未调用 openURL 方法
Posted
技术标签:
【中文标题】使用动态链接首次下载后更新应用程序时未调用 openURL 方法【英文标题】:openURL method not getting called when updating app after first download with dynamic link 【发布时间】:2018-01-02 09:53:07 【问题描述】:当我通过构建新版本来更新我的应用程序时,会调用 openURL 方法。但是当我点击动态链接并在之后进行更新时,不再调用 openURL 方法。
有人可以解释为什么会这样吗?
这是我想用 openURL 方法做事的代码/
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<NSString *, id> *)options
// Sends the URL to the current authorization flow (if any) which will
// process it if it relates to an authorization response.
if ([_currentAuthorizationFlow resumeAuthorizationFlowWithURL:url])
_currentAuthorizationFlow = nil;
return YES;
FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
NSString *userID = [[NSUserDefaults standardUserDefaults] stringForKey:@"xx"];
NSString *firstTimeAppOpened = [[NSUserDefaults standardUserDefaults] stringForKey:@"xxx"];
if (dynamicLink != nil)
if ([dynamicLink.url.absoluteString length] != 0)
NSLog(@"App opened with link: %@", dynamicLink);
NSString *snippet = [NSString stringWithFormat:@"URLScheme: Received dynamic firebase link: %@", dynamicLink.url.absoluteString];
NSString *category = @"DYNAMIC_LINK";
NSString *pathFromURL = [dynamicLink.url.absoluteString lastPathComponent];
[SiteConnector sendAuditWithSnippet:snippet inCategory:category];
NSString *firstTimeAppOpened = [[NSUserDefaults standardUserDefaults] stringForKey:@"FirstTimeAppOpened"];
if ([dynamicLink.url.absoluteString rangeOfString:@"murat"].location == NSNotFound)
[self dynamicLinkBehaviour:pathFromURL second:dynamicLink.url absolutePath:nil];
else
if (firstTimeAppOpened == nil)
[self onboardingDynamicLink:dynamicLink.url.absoluteString];
else
if (userID == nil && firstTimeAppOpened == nil)
[self openWelcomeScreen];
NSString *valueToSave = @"yes";
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"FirstTimeLoggedIn"];
[[NSUserDefaults standardUserDefaults] synchronize];
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
【问题讨论】:
你想用 openURL 打开一个 url 吗? @SandipGill 是的,当应用程序第一次启动时,我需要进行检查。但是 openURL 方法仅在我下载应用程序以及进行更新时调用(通过在之前的安装之上安装)。但是,当我使用 firebase 动态链接下载应用程序时,它可以工作,但当我在其之上进行更新时,它就不行了。 所以 firebase 动态链接做了一些奇怪的事情。在对使用 firebase 动态链接进行的下载进行上述更新后,它不会打开 openURL 方法。 好的,可以分享一下代码吗? @SandipGill 我已将 openURL 方法添加到此“问题”中。 【参考方案1】:openURL
仅在通过 URI 方案(即fb://
)打开应用程序时调用。 Firebase 在大多数情况下使用通用链接,通用链接打开的应用会触发continue userActivity
协议功能。您可以参考他们的文档以获取该代码:
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool
guard let dynamicLinks = DynamicLinks.dynamicLinks() else
return false
let handled = dynamicLinks.handleUniversalLink(userActivity.webpageURL!) (dynamiclink, error) in
// ...
return handled
这是我推荐使用 Branch 的原因之一,因为无论是 URI 方案还是通用链接,它们都在一个回调中进行处理。
【讨论】:
感谢您的帮助。但是每次第一次安装应用程序时都会调用 openURL。所以我的问题仍然存在..我需要这种方法来激活或不激活。两者都不做..【参考方案2】:你好@iosporgrammerIOS 请试试这个。
var yourUrl = NSURL(string:"url_String")! 如果 UIApplication.shared.canOpenURL(yourUrl as URL) UIApplication.shared.openURL(yourUrl as URL)目标 C
UIApplication *application = [UIApplication sharedApplication]; NSURL *URL = [NSURL URLWithString:@"http://www.google.com"]; [应用程序 openURL:URL 选项:@ completionHandler:^(BOOL 成功) 如果(成功) NSLog(@"打开的网址"); ];【讨论】:
以上是关于使用动态链接首次下载后更新应用程序时未调用 openURL 方法的主要内容,如果未能解决你的问题,请参考以下文章
VB.Net SQL DataAdapter 首次运行时未更新
FBSDKLoginManager logInWithReadPermissions:fromViewController:处理程序:应用程序首次运行时未调用完成