是否可以从另一个应用程序中启动任意iPhone应用程序?例如, 在我的应用程序中,如果我希望用户按下按钮并启动到手机应用程序(关闭当前应用程序,打开手机应用程序).
这有可能吗?我知道可以使用tel URL链接拨打电话,但我想改为启动Phone应用而不拨打任何特定号码.
正如Kevin指出的那样,URL Schemes是应用程序之间通信的唯一方式.所以,不,不可能推出任意应用程序.
但是,可以启动任何注册URL方案的应用程序,无论是Apple的,您的还是其他开发者.文档在这里:
与其他应用程序通信
至于启动手机,看起来您的tel:
链接需要至少三位数才能启动手机.所以你不能只是拨打一个号码进入应用程序.
我发现编写一个可以打开另一个应用程序的应用程序很容易.
假设我们有两个叫做FirstApp
和的应用程序SecondApp
.当我们打开FirstApp时,我们希望能够通过单击按钮打开SecondApp.这样做的解决方案是:
在SecondApp中
转到SecondApp的plist文件,你需要添加一个带有字符串iOSDevTips的URL Schemes(当然你可以写另一个字符串.这取决于你).
2.在FirstApp中
使用以下操作创建一个按钮:
- (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中的按钮时,它应该打开SecondApp.
对于8之前的iOS,lee答案绝对正确.
在iOS 9中,您必须将您的应用程序想要在LSApplicationQueriesSchemes键(字符串数组)下的Info.plist中查询的任何URL方案列入白名单:
在斯威夫特
只是因为某人正在寻找快速的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) }
为了让您从另一个应用程序打开您的应用程序,您需要在两个应用程序中进行更改.以下是使用Swift 3和iOS 10更新的步骤:
1.注册要打开的应用程序
更新Info.plist
定义应用程序的定制和独特的URL方案.
请注意,您的方案名称应该是唯一的,否则如果您的设备上安装了另一个具有相同URL方案名称的应用程序,那么将确定运行时哪个应用程序打开.
2.在主应用程序中包含以前的URL方案
您需要指定希望应用程序能够与类的canOpenURL:
方法一起使用的URL方案UIApplication
.因此,打开主应用程序Info.plist
并将其他应用程序的URL方案添加到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的应用程序,则需要先上载包含URL方案注册的新版本.
以下是从另一个应用程序启动应用程序的好教程:
iOS SDK:使用URL方案
并且,无法启动任意应用程序,但是注册URL方案的本机应用程序.
为实现这一目标,我们需要在两个App中添加几行代码
应用程序A:您要从其他应用程序打开哪个.(资源)
应用B:从应用B你想要打开应用A (目的地)
App A的代码
将少量标签添加到应用程序的Plist中,将App App A的 Open Plist源和过去的XML下载
CFBundleURLTypes CFBundleURLName com.TestApp CFBundleURLSchemes testApp.linking
在应用程序代理应用程序一个 -这里获取回调
- (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代码 -
如果您只想在没有任何输入参数的情况下打开App 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]; } }
如果要将参数从App B传递到App A,请使用以下代码
-(IBAction)openApp_A:(id)sender{ if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?userName=abe®istered=1&Password=123abc"]]){ UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; [alert show]; } }
注意:您也可以使用testApp.linking://类型打开App ?在safari浏览器上
您只能启动已注册URL方案的应用程序.然后就像您使用短信:打开短信应用程序一样,您将能够使用他们的URL方案打开应用程序.
在名为LaunchMe的文档中有一个很好的例子可以证明这一点.
LaunchMe示例代码截至2017年11月6日.
尝试以下代码将帮助您从应用程序启动应用程序
注意:将名称fantacy替换为实际应用程序名称
NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"]; NSURL *myurl=[[NSURL alloc] initWithString:mystr]; [[UIApplication sharedApplication] openURL:myurl];