【问题标题】:Navigate to specific view with URL Scheme使用 URL Scheme 导航到特定视图
【发布时间】:2016-05-20 18:30:52
【问题描述】:

我在 info.plist 中添加了一个 url 方案 newConversation,这样当用户点击浏览器/电子邮件中的链接时,它会将他重定向到应用程序。这工作得很好。

我想知道如何在单击此 url 时将应用程序打开到特定的视图控制器?

我尝试使用:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
if ([url.scheme isEqualToString:@"newConversation"]) {
    NSLog(@"url schemeeeee");
    emailLink = YES;
    [self initWindow];
}
return YES;
}

但没有取得任何进展。

谢谢!

【问题讨论】:

    标签: ios objective-c url-scheme


    【解决方案1】:

    您的应用应该只为您的应用注册一个方案(例如myappscheme)。然后,如果您需要处理不同的操作,您可以使用该方案提供更具体的 URL:

    myappscheme:///newConversation
    myappscheme:///doSomethingElse
    

    然后你会得到/newConversation 作为 URL 的路径。那么你的代码就变成了:

    if ([url.path isEqualToString:@"/newConversation"]) {
    } else if ([url.path isEqualToString:@"/doSomethingElse"]) {
    }
    

    【讨论】:

    • 您不会“添加”它们。你只需使用它们。将它们想象成浏览器中的 http URL。只有一种 http URL 方案。当您需要使用 URL 时,您只需将其后面的其余部分添加到 URL 中即可。
    【解决方案2】:

    老实说,自己实施这有点痛苦。基本的自定义 URL 方案链接不是一个理想的解决方案,并且有大量令人讨厌的边缘情况,最值得注意的是如果用户没有安装您的应用程序,他们之前会看到“无法打开页面”错误,以及许多应用程序的事实实际上不会将自定义方案 URL 识别为“可点击”(它们只是显示为常规文本)。

    更好的方法是使用常规的http:// 链接,然后将访问者重定向到您的应用(如果他们已安装)或后备 URL/App Store 页面。在 iOS 9 之前,一个合理的基本实现是这样的 JavaScript 重定向:

    setTimeout(function() {
      window.location = "https://itunes.apple.com/path/to/your/app/";
    }, 25);
    
    // If "yourapp://" is registered, the user will see a dialog
    // asking if want to open your app. If they agree, your app will 
    // launch  immediately and the timer won't fire.
    // If not installed, you'll get an ugly "Cannot Open Page" 
    // dialogue and the App Store will launch when the timer expires.
    
    window.location = "yourapp://";
    

    不幸的是,这仍然会显示“无法打开页面”错误,但直到最近,通过使用此脚本的更细微的版本,以合理的用户友好方式解决此问题是可能的。可悲的是,Apple intentionally broke that 随着 iOS 9.2 更新,因此自定义 URL 方案现在实际上对于深度链接几乎没有用处,除非您确定该应用已安装在该设备上。

    最好的解决方案是自定义 URL 方案链接(带有智能 JavaScript 重定向)和 Apple 新的 Universal Links 的组合。通用链接让您可以使用普通的http:// URL 指向您网站上的某个页面(该页面可能是一个简单的重定向到 App Store,没有导致“无法打开页面”错误的自定义 URL 触发器),它会被您的电话并直接发送到您的应用程序(如果已安装)。不幸的是,通用链接仅适用于 iOS 9+,并且在许多应用程序中打开时还无法使用。

    这需要处理很多事情,所以最好的选择可能是像Branch.io 这样的免费服务(完全披露:我与团队合作)来处理所有技术方面的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多