ios 一个app启动另一个app
ios 一个app启动另一个app
问题描述:需要从一个ios应用程序中,能启动另一个ios应用程序。
开发环境:xcode7.3.1
关键词:白名单(lsapplicationqueriesschemes)、注册自己的url
demo源代码链接:https://pan.baidu.com/s/1bo327sb
如何从一个app中,启动另一个app???本人ios菜鸟(工作需要,刚开始自学ios,现学现卖,哈哈)参考网上若干文章,实现了这个功能。目前,将demo分享出来。
1.注册自己的url新建一个工程myappone,在info.plist 文件中添加字段,注册 myappone的url.
1.1在 information property list中,点击“+” 添加 url types,添加一个item,再在item中,添加“url schemes”,再在url schemes的item中,添加一个字符串“appdemo1”(参考下图),该字符串 即为 当前 工程 myappone 自己 为自己注册的 url。注册自己的url完成。
1.2我们刚才注册的自己的url,就相当于我们当前的工程myappone的一个身份标识。其他app通过ios提供的接口(后面会介绍是ios 的哪个函数),调用这个url就能启动我们这个myappone应用程序了。
2. 白名单lsapplicationqueriesschemes在ios9以后,需要在info.plist文件中添加lsapplicationqueriesschemes(白名单),才能合法启动你想要启动的那个app。白名单中添加的,是你想要启动的app的 url(这个url就是上面讲解的“注册自己的url”)。
2.1 添加 lsapplicationqueriesschemes。(当前的工程是xcode7.3.1,xcode没有自动匹配 lsapplicationqueriesschemes,因此,需要你手动输入这个字段,并将它的属性改为【array】),在lsapplicationqueriesschemes 中添加“appdemo2”。
我们假设已经有一个myapptwo,它注册的url是 appdemo2。我们想在myappone工程去启动的myapptwo这个app,就需要在白名单中添加myapptwo的url。
3.myappone 启动 另一个app的关键代码3.1 字符串appdemo2后面的 "://"是必须添加的,否则会 无法打开你指定的app的url的。
3.2 代码介绍了 无参url和有参url。如果想传递参数,在“://”后面附加这些参数即可。
1 //// 用户 按下 按钮********* 请参考 viewcontroller.m 文件中的代码 2 - (ibaction)btn1click:(id)sender { 3 nslog(@"myappone: you click the button1111."); 4 char szbuff[50] = {0}; 5 sprintf(szbuff, "%s", "appdemo2://username=heliang&pwd=20160812"); 6 /// 1.不带参数的传递方式 7 // nsurl* urllocal = [nsurl urlwithstring:@"appdemo2://"]; 8 /// 2.带参数的传递方式 9 nsurl* urllocal = [nsurl urlwithstring:[nsstring stringwithutf8string:szbuff]]; 10 11 // 判断是否可以启动该 url 12 if([[uiapplication sharedapplication] canopenurl:urllocal]) 13 { 14 [[uiapplication sharedapplication] openurl:urllocal]; 15 nslog(@"launch appdemo2 success!"); 16 } 17 else 18 { 19 nslog(@"no such url."); 20 /// 跳到 appstore 某个 app 21 nsurl* urlappstore = [nsurl urlwithstring:@"https://itunes.apple.com/cn/app/tie-lu12306/id564818797?mt=8"]; 22 [[uiapplication sharedapplication] openurl: urlappstore]; 23 } 24 }
3.3至此,已经介绍完如何从一个app1启动另一个app2了。
步骤如下:
①app2在info.plist的url schemes中 注册自己的url
②app1在info.plist的【白名单】中添加 app2注册的 url
③app1中调用[uiapplication sharedapplication] openurl:urllocal]; 方法,启动 app2。(可以参考链接中的demo,进行进一步的理解。)
如何获取传递这种启动方式,传递过来的参数呢?
4.获取传递过来的参数4.1在appdelegate.m 中重写 下面的这个application方法(如果文件中没有这个函数,就手动添加下面的函数,这就是重写)。传递过来的参数,就在 url中。(可以参考链接中的demo,进行进一步的理解。)
4.2尽信书不如无书,本文也不是权威的讲解。本文例子,仅供大家入门学习ios的这个知识点。更深层次的原理和应用,还需要大家慢慢琢磨了。当前,能在自己的工程中,实现这个功能,你就成功了。提前祝贺你成功!
1 ///////// 重写的 application 方法******** 请参考 appdelegate.m 文件中的代码 2 -(bool)application:(uiapplication*)application openurl:(nonnull nsurl *)url options:(nonnull nsdictionary *)options 3 { 4 //// 打印 我们收到的参数、以及应用程序的 applicationkey 5 nslog(@"appdemo1被启动,下面是 appdemo2传递过来的 启动参数:"); 6 nsstring* strurl = [[nsstring alloc] init]; 7 strurl = url.absolutestring; 8 nslog(@"strurl:%@", strurl); 9 10 nsstring* sourceapplication = options[uiapplicationopenurloptionssourceapplicationkey]; 11 nslog(@"sourceapplication:%@", sourceapplication); 12 return yes; 13 }