从另一个(iPhone)启动应用程序

是否有可能从另一个应用程序内启动任何iPhone应用程序? 例如, 在我的应用程序中,如果我想要用户按下button并右键启动到电话应用程序(closures当前应用程序,打开电话应用程序)

这可能吗? 我知道这可以通过电话URL链接来打电话,但是我想要启动电话应用程序而不拨打任何特定的号码。

正如Kevin指出的,URL Schemes是应用程序之间进行通信的唯一方式。 所以,不,不可能启动任意应用程序。

但是,可以启动任何注册URLscheme的应用程序,无论是苹果,您的还是其他开发者。 文档在这里:

与其他应用程序通信

至于启动电话,看起来像你的tel:链接需要至less三位数字才能启动电话。 所以你不能只是拖放到没有拨号的应用程序。

我发现写一个可以打开另一个应用程序的应用程序很容易。

假设我们有两个名为FirstAppSecondApp应用程序。 当我们打开FirstApp时,我们希望能够通过点击一个button来打开SecondApp。 解决scheme是:

  1. 在SecondApp中

    转到SecondApp的plist文件,并且需要添加一个带有stringiOSDevTipsURL Schemes (当然,您也可以编写另一个string.it由您决定)。

在这里输入图像描述

2。 在FirstApp

用下面的动作创build一个button:

 - (void)buttonPressed:(UIButton *)button { NSString *customURL = @"iOSDevTips://"; if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]]; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error" message:[NSString stringWithFormat:@"No custom URL defined for %@", customURL] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; } } 

而已。 现在,当你点击FirstApp中的button时,它应该打开SecondApp。

对于8之前的iOS来说,李的答案是绝对正确的。

在iOS 9中,您必须将您的应用程序想要在Info.plist中查询的任何URLscheme列入LSApplicationQueriesSchemes项(string数组):

在这里输入图像描述

这里是一个很好的教程,从另一个应用程序启动应用程序:
iOS SDK:使用URLscheme
而且,不可能启动任意应用程序,而是注册URL Schemes的本地应用程序。

在Swift中

只是有人正在寻找一个快速的Swift复制和粘贴

 if let url = NSURL(string: "app://") where UIApplication.sharedApplication().canOpenURL(url) { UIApplication.sharedApplication().openURL(url) } else if let itunesUrl = NSURL(string: "https://itunes.apple.com/itunes-link-to-app") where UIApplication.sharedApplication().canOpenURL(itunesUrl) { UIApplication.sharedApplication().openURL(itunesUrl) } 

试试下面的代码将帮助你从你的应用程序启动一个应用程序

注意:将名称fantacyreplace为实际的应用程序名称

 NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"]; NSURL *myurl=[[NSURL alloc] initWithString:mystr]; [[UIApplication sharedApplication] openURL:myurl]; 

您只能启动已注册URLscheme的应用程序。 然后,就像使用短信打开短信应用程序一样,您可以使用其URLscheme打开应用程序。

在LaunchMe这个文档中有一个很好的例子可以certificate这一点。

LaunchMe示例代码截至2017年11月6日。

为了让您从另一个应用程序中打开您的应用程序,您需要在两个应用程序中进行更改。 以下是使用Swift 3iOS 10更新的步骤:

1.注册您想要打开的应用程序

通过定义您的应用程序的自定义和唯一的URL计划来更新Info.plist

在这里输入图像描述

请注意,您的scheme名称应该是唯一的,否则,如果您的设备上安装了另一个具有相同URLscheme名称的应用程序,则将确定运行时间哪个被打开。

2.在您的主应用程序中包含以前的URLscheme

您需要指定您希望应用程序能够与UIApplication类的canOpenURL:方法一起使用的URLscheme。 因此,打开主应用程序的Info.plist并将其他应用程序的URLscheme添加到LSApplicationQueriesSchemes(在iOS 9.0中引入)

在这里输入图像描述

3.实施打开您的应用程序的操作

现在所有东西都已经设好了,所以你可以在你的主应用程序中编写代码来打开你的其他应用程序。 这应该看起来像这样:

 let appURLScheme = "MyAppToOpen://" guard let appURL = URL(string: appURLScheme) else { return } if UIApplication.shared.canOpenURL(appURL) { if #available(iOS 10.0, *) { UIApplication.shared.open(appURL) } else { UIApplication.shared.openURL(appURL) } } else { // Here you can handle the case when your other application cannot be opened for any reason. } 

请注意,如果您希望现有应用程序(从AppStore安装)打开,则这些更改需要新版本。 如果您想打开已经发布到Apple AppStore的应用程序,则需要首先上传包含URLscheme注册的新版本。

不,这不对。 除了logging的URL处理程序之外,没有办法与/启动另一个应用程序。

我也尝试过一段时间( 启动带有标识符的iPhone应用程序 ),但是肯定没有DOCUMENTED方法来做到这一点。 🙂

为了实现这一点,我们需要在这两个应用程序中添加几行代码

应用程序A:你想从另一个应用程序打开。

应用程序B :从应用程序B你想打开应用程序A.

应用程序代码

将一些标签添加到应用程序A的开放Plist源代码和XML下的过去的Plist中

 <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.TestApp</string> <key>CFBundleURLSchemes</key> <array> <string>testApp.linking</string> </array> </dict> </array> 

在应用程序A应用程序委托 – 获取callback在这里

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { // You we get the call back here when App B will try to Open // sourceApplication will have the bundle ID of the App B // [url query] will provide you the whole URL // [url query] with the help of this you can also pass the value from App B and get that value here } 

现在来App B代码

如果你只想打开没有任何input参数的应用程序A.

 -(IBAction)openApp_A:(id)sender{ if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?"]]){ UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; [alert show]; } } 

如果你想从应用程序B传递参数到应用程序A然后使用下面的代码

 -(IBAction)openApp_A:(id)sender{ if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?userName=abe&registered=1&Password=123abc"]]){ UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; [alert show]; } } 

注意:你也可以用typestestApp.linking打开App ://? 在Safari浏览器

Swift 3快速粘贴版本@ villy393回答:

 if UIApplication.shared.canOpenURL(openURL) { UIApplication.shared.openURL(openURL) } else if UIApplication.shared.canOpenURL(installUrl) UIApplication.shared.openURL(installUrl) }