应用之间相互调用唤起

转自:应用之间相互调用 唤起


1.在app的info.plist中的information Property List中新增URL types一项,
其中url identifier可任意写如 com.***.***
URL Schemes 是其他应用唤起本项目的schemes
如下图






2. 在appB的代码中打开刚才定义的URL,代码如下

NSURL *url = [NSURL URLWithString:@"kdweibov4:"];  
[[UIApplication sharedApplication] openURL:url];  
3.打开之后,会调用appA的AppDelegate的
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {}
如果项目未启动,由其他项目唤醒该项目,可能涉及到rootviewController的情况,所以一般需要在方法中处理唤醒方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
     BOOL result = YES;
        if (launchOptions != nil) {
        NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
        if (url != nil && ![url isFileURL]) 
{
            //这里设置no,不重复调用 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
            result = NO;
            if (![[KDLinkInviteConfig sharedInstance] isAvailableInviteFromUrl:url]) {
                [KDAppLaunch openLaunchFromUrl:url];
            }
        }
        BOOL canOpen = [KDAppLaunch openLaunchFromUrl:url];
        BOS_CONFIG.bLaunchByShare = canOpen;
    }
return result;
}
4.判断是否能打开应用
[[UIApplication sharedApplication] canOpenURL:[NSURLURLWithString:@"kdweibov4://"]];

应用之间传值
- (IBAction)A:(id)sender
{
NSString *str = @"nav://com.b.nav?viewId=%@";
//转码
NSString *urlStr = [[NSString stringWithFormat:str, @"letters"]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:urlStr];
    [[UIApplication sharedApplication] openURL:url];
}

- (IBAction)B:(id)sender
{
NSString *str = @"nav://com.b.nav?viewId=%@";
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:str, @"numbers"]];
    [[UIApplication sharedApplication] openURL:url];
}

在appDelegate文件中调用如下:
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
//[url host] 获取到url identifier
//[url scheme] 获取本次唤起的scheme
//[url query] 获取唤起时带有的参数 如 viewId = 222

    if ([[url host] isEqualToString:@"com.b.nav"]) {
        NSString *viewId = [[url query] substringFromIndex:[[url query] rangeOfString:@"viewId="].location + 7];
        if ([viewId isEqualToString:@"letters"])
{
OneViewController *one = [[OneViewController alloc] init];
//解码:
NSString *test = [[url query]
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
one.testLabel.text = test;
[self.viewController presentViewController:one animated:YES completion:nil];
        }
else
{
TwoViewController *two = [[TwoViewController alloc] init];
[self.viewController presentViewController:two animated:YES completion:nil];
        }
    }
    return YES;
}

调用系统应用如下:

上面讲述的是调用自身的应用,讲解了如何在自己应用之间调用问题,今天介绍一下如果
调用IOS自带的app的方法
一、调用app store界面方法
在实际开发中,往往要推荐自己其他应用和推荐自己的收费软件,那么我们就需要在程序
中直接连接到app store的相应页面。
实际上的做法很简单,使用的还是UIApplication类的OpenURL方法: 

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"程序的相应连接"]];


二、调用其它应用的方法
1)调用 自带mail

[[UIApplicationsharedApplication] openURL:
[NSURLURLWithString:@"mailto://admin@hzlzh.com"]];
2)调用 电话phone

[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://8008808888"]];

3)调用 SMS

[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];

4)调用自带 浏览器 safari

[[UIApplicationsharedApplication] openURL:
[NSURLURLWithString:@"http://www.hzlzh.com"]];
5)调用 Remote

[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"remote://fff"]];

上面是最基本的语句,没什么处理过程。
如:调用phone可以传递号码,调用SMS只能设定号码,不能初始化SMS内容。