我想处理这样的网址:http://www.something.com/product/3/
以这种方式:
- 如果您安装了应用程序 => 使用应用程序处理它。
- 否则 => 用 safari 处理它。
这可能吗?
我的想法是我可以通过电子邮件发送该 url,如果接收者安装了应用程序,那么应用程序会启动并做一些事情,如果没有安装,只需通过 safari 打开它。
我知道自定义方案,它们在应用程序中运行良好,但它们显然在 safari 中不起作用,因为它们不是 http 协议。
我想处理这样的网址:http://www.something.com/product/3/
以这种方式:
这可能吗?
我的想法是我可以通过电子邮件发送该 url,如果接收者安装了应用程序,那么应用程序会启动并做一些事情,如果没有安装,只需通过 safari 打开它。
我知道自定义方案,它们在应用程序中运行良好,但它们显然在 safari 中不起作用,因为它们不是 http 协议。
1) 在您的应用中创建自定义 URL 方案。如果您不知道如何创建自定义 URL 方案,请点击链接:http ://www.idev101.com/code/Objective-C/custom_url_schemes.html
2) 然后将以下脚本添加到您希望应用打开的 URL。
<script language="javascript" type="text/javascript">
var iOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false);
var appUrlScheme = "myappscheme://" + document.URL;
if (iOS) {
window.open(appUrlScheme, "_self");
}
</script>
该脚本是不言自明的,如果它是 iOS 设备,那么它只是尝试使用您的自定义 url 方案打开当前 url,即myappscheme://whateverurl.com'. If you app is installed on the device then iOS is going to launch your app and pass this URL to
handleOpenURL function, otherwise mobile safari will silently ignore
window.open` 调用,您的网页将正常加载:
3)handleOpenURL
在您的 AppDelegate 中实现回调方法来处理 URL:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
NSLog(@"url: %@", url);
NSLog(@"query string: %@", [url query]);
NSLog(@"host: %@", [url host]);
NSLog(@"url path: %@", [url path]);
//REDIRECT USER TO A VIEW CONTROLLER
return YES;
}
是的,您可以使用URL Scheme来完成,首先在Info.plist 文件中创建您自己的自定义 url 方案
通过转到菜单并单击编辑器 > 添加项目来添加新行。通过添加新项目来设置 URL 类型项目。展开 URL Types 键,展开 Item 0,并添加一个新项目“URL scheme”。为“URL方案”的第0项填写“readtext”,为“URL Identifier”填写您的公司标识符。
然后解析您的 url 以获得相同 url 方案的不同 url 以使用不同的屏幕打开您的应用程序。这里我只显示了警报,用于根据您的链接打开您的特定页面。如果未安装该应用程序,那么它将打开在网络浏览器中。
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
// Display text
UIAlertView *alertView;
NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
alertView = [[UIAlertView alloc] initWithTitle:@"Text" message:text delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
return YES;
}
application:handleOpenURL : (用于早期的 iOS 4.1) application:openURL:sourceApplication:annotation: (用于后来的 iOS 4.1)。
不,那是不可能的。但是,您可以在邮件中包含两个链接: