1.需求:我们创建两个项目分别为TestDemo1何TestDemo2,现在需要在TestDemo1中通过一个按钮打开TestDemo2程序,需要下面这些配置;
2.配置信息:首先配置TestDemo2中的plist文件:
如下图所示:设置URL Schemes为music(URL Schemes建议都小写,因为之后接收到数据的时候,不区分大小写, 都是转为小写),URL identifier可选
在TestDemo2中的APPdelegate中添加下面这个方法
//处理URL请求 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { NSLog(@"%@", url); if ([[url scheme] isEqualToString:@"music"]) { //处理链接 NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:@"新消息" message:text delegate:self cancelButtonTitle:@"知道了" otherButtonTitles: nil]; [myAlert show]; return YES; } return NO; }
3.然后配置TestDemo1中的plist文件:
TestDemo1中想打开TestDemo2程序可以调用下面的demo:
NSString *telStr = @"music://test"; // 则需要打开的app就要配置这个协议 NSURL *url = [NSURL URLWithString:telStr]; UIApplication *app = [UIApplication sharedApplication]; BOOL canOpen = [app canOpenURL:url]; if (canOpen) { // 有安装app BOOL isOpen = [app openURL:url]; NSLog(@"打开了app%d",isOpen); } else { // 没有安装app // 使用浏览器打开url }
4.补充:如果使用模拟器,可能会报错:
LaunchServices: ERROR: There is no registered handler for URL scheme xxx
容易让人误解的是总以为自己缺少哪些东西没有配置,极有可能的问题是因为模拟器并未安装XXX所以才会导致。换成真机测试下即可
时间: 2024-10-09 14:58:14