使用 URL 方案导航到特定视图
Navigate to specific view with URL Scheme
我在我的 info.plist 中添加了一个 url 方案 newConversation,这样当用户点击 browser/email 中的 link 时,它会将他重定向到应用程序。这工作得很好。
我想知道如何在单击此 url 时将应用程序打开到特定的视图控制器?
我尝试使用:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
if ([url.scheme isEqualToString:@"newConversation"]) {
NSLog(@"url schemeeeee");
emailLink = YES;
[self initWindow];
}
return YES;
}
但没有取得任何进展。
谢谢!
您的应用应该只为您的应用注册一个方案(例如myappscheme
)。然后,如果您需要处理不同的操作,您可以使用该方案提供更具体的 URLs:
myappscheme:///newConversation
myappscheme:///doSomethingElse
然后你得到 /newConversation
作为 URL 的路径。然后你的代码变成:
if ([url.path isEqualToString:@"/newConversation"]) {
} else if ([url.path isEqualToString:@"/doSomethingElse"]) {
}
老实说,您自己实现起来有点痛苦。基本的自定义 URL 方案 link 不是理想的解决方案,并且有大量令人讨厌的边缘情况,最显着的是用户在没有您的应用程序之前会看到的“无法打开页面”错误已安装,而且许多应用实际上无法将自定义方案 URL 识别为 'clickable'(它们只是显示为常规文本)。
更好的方法是使用常规 http://
link,然后 重定向 访问者到您的应用程序——如果他们安装了它——或后备 URL/App 商店页面。在 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://";
不幸的是,这仍然会显示 'Cannot Open Page' 错误,但直到最近,通过使用此脚本的更细微版本,才有可能以合理的用户友好方式解决此问题。遗憾的是,Apple intentionally broke that 有了 iOS 9.2 更新,所以自定义 URL 方案实际上对现在的深度 link 毫无用处,除非你 确定 该应用程序已安装在该设备上。
最佳解决方案是结合自定义 URL 方案 links(具有智能 JavaScript 重定向)和 Apple 的新 Universal Links。通用链接让您可以使用正常的 http://
URL 到您网站上的页面(该页面可以是一个简单的重定向到 App Store,没有自定义 URL 触发器导致 'Cannot Open Page' 错误),它会被您的 phone 拦截并直接发送到您的应用程序(如果已安装)。不幸的是,通用链接仅适用于 iOS 9+,并且在许多应用程序中打开时尚不可用。
要处理的事情很多,所以最好的选择可能是像 Branch.io 这样的免费服务(完全披露:我与团队合作)来处理所有技术方面的问题。
我在我的 info.plist 中添加了一个 url 方案 newConversation,这样当用户点击 browser/email 中的 link 时,它会将他重定向到应用程序。这工作得很好。
我想知道如何在单击此 url 时将应用程序打开到特定的视图控制器?
我尝试使用:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
if ([url.scheme isEqualToString:@"newConversation"]) {
NSLog(@"url schemeeeee");
emailLink = YES;
[self initWindow];
}
return YES;
}
但没有取得任何进展。
谢谢!
您的应用应该只为您的应用注册一个方案(例如myappscheme
)。然后,如果您需要处理不同的操作,您可以使用该方案提供更具体的 URLs:
myappscheme:///newConversation
myappscheme:///doSomethingElse
然后你得到 /newConversation
作为 URL 的路径。然后你的代码变成:
if ([url.path isEqualToString:@"/newConversation"]) {
} else if ([url.path isEqualToString:@"/doSomethingElse"]) {
}
老实说,您自己实现起来有点痛苦。基本的自定义 URL 方案 link 不是理想的解决方案,并且有大量令人讨厌的边缘情况,最显着的是用户在没有您的应用程序之前会看到的“无法打开页面”错误已安装,而且许多应用实际上无法将自定义方案 URL 识别为 'clickable'(它们只是显示为常规文本)。
更好的方法是使用常规 http://
link,然后 重定向 访问者到您的应用程序——如果他们安装了它——或后备 URL/App 商店页面。在 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://";
不幸的是,这仍然会显示 'Cannot Open Page' 错误,但直到最近,通过使用此脚本的更细微版本,才有可能以合理的用户友好方式解决此问题。遗憾的是,Apple intentionally broke that 有了 iOS 9.2 更新,所以自定义 URL 方案实际上对现在的深度 link 毫无用处,除非你 确定 该应用程序已安装在该设备上。
最佳解决方案是结合自定义 URL 方案 links(具有智能 JavaScript 重定向)和 Apple 的新 Universal Links。通用链接让您可以使用正常的 http://
URL 到您网站上的页面(该页面可以是一个简单的重定向到 App Store,没有自定义 URL 触发器导致 'Cannot Open Page' 错误),它会被您的 phone 拦截并直接发送到您的应用程序(如果已安装)。不幸的是,通用链接仅适用于 iOS 9+,并且在许多应用程序中打开时尚不可用。
要处理的事情很多,所以最好的选择可能是像 Branch.io 这样的免费服务(完全披露:我与团队合作)来处理所有技术方面的问题。