使用URL Scheme导航到特定视图

时间:2016-05-20 18:30:53

标签: ios objective-c url-scheme

我在我的info.plist中添加了一个url scheme newConversation,这样当用户点击浏览器/电子邮件中的链接时,它会将他重定向到应用程序。这完全没问题。

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

我尝试使用:

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

但没有随处可见。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

然后,您获得了/newConversation的网址路径。然后你的代码变成:

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

答案 1 :(得分:1)

说实话,这对你自己来说是一种痛苦。基本的自定义URL方案链接不是一个理想的解决方案,并且有大量令人讨厌的边缘情况,最明显的是“无法打开页面”#34;如果用户未安装您的应用,用户将会看到错误,并且许多应用实际上并未将自定义方案网址识别为“可点击”。 (它们只是显示为常规文本)。

更好的方法是使用常规的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进行了更新,因此自定义网址方案现在对于深层链接实际上毫无用处,除非您某些该应用已安装在该设备上。

最佳解决方案是自定义网址方案链接(具有智能JavaScript重定向)和Apple的新Universal Links的组合。通用链接允许您使用正常的http:// URL到您网站上的页面(该页面可以是一个简单的重定向到App Store而没有导致“无法打开页面”错误的自定义URL触发器),如果已安装,则会被您的手机拦截并直接发送到您的应用中。不幸的是,Universal Links仅适用于iOS 9+,并且在许多应用程序中打开时无法正常工作。

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

相关问题