简介
app中的跳转,分两种情况。第一种是启动内置的应用,一般的电话,浏览器,短信和邮件可以直接调用并添加参数. 第二种, 打开另一个外置的 app,如自己开发的应用,qq 微信微博等.
这些跳转都是可以通过openURL来实现。
内置应用跳转
浏览器
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"http://"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.baidu.com"]];
}
打电话
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]];
// //拨号前询问,拨号后返回, 私有API,所以可能不会被审核通过
// [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"telprompt:// 10010"]];
}
发邮件
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mailto://"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://wangyanchang21@163.com"]];
}
发短信
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"sms://"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://10086"]];
}
另外, 还有一个内置的调用系统发短信的功能, 需要导入MessageUI.framework
,并引入头文件#import <MessageUI/MessageUI.h>
。
调起发送短信功能:
if( [MFMessageComposeViewController canSendText]){
MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
messageController.view.backgroundColor = [UIColor whiteColor];
messageController.delegate = self;
messageController.messageComposeDelegate = self;
messageController.body = message;
messageController.recipients = @[phoneNum];
messageController.navigationBar.tintColor = [UIColor blackColor];
//推到发送试图控制器
[self presentViewController:messageController animated:YES completion:nil];
}else{
// Toast: 该设备不支持短信功能
}
//发送短信后回调的方法
-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
switch (result) {
case MessageComposeResultCancelled:
//已取消发送短信
break;
case MessageComposeResultFailed:
//短信发送失败
break;
case MessageComposeResultSent:
//短信发送成功
break;
default:
break;
}
[self dismissViewControllerAnimated:YES completion:nil];
}
外置应用跳转
第二种情况是要跳转至自己开发的app,这种情况则要为将要打开的app注册一个URL协议。这个可以在项目的文件info.plist中注册。主要操作为:
Step1. 右键,选择“Add Row”
Step2. Key值选择“URL types”
Step3. 打开“Item 0″,然后为该key增加一个URL identifier。可以是任何值,但建议用“反域名”(例如 “com.fcplayer.testHello”)。
Step4. 在“Item 0”下再加一行。
Step5. 选择“URL Schemes” 作为Key。
Step6. 输入你的URL协议名 (例如“testHello://” 应写做“testHello”)。如果有必要,你可以在这里加入多个协议。
其实在打开的时候只需要URL Schemes即可,URL identifier是可选项。如果需要传送参数,可以在URL Schemes://添加你的参数,格式和网页开发的传递参数差不多。(又或者URL Schemes://URL identifier@添加的参数)关键是要和接收参数方定义好处理的方式。然后在需要打开的地方添加代码:
以下是当前需要被跳转的 App 中plist 文件中的注册的 URL:
当前 App 设置URL 为 testHello, 所以将下面代码写入其他项目, 将会自动跳入本 App
NSString *url = @"testHello://";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];