在IOS中打开URLscheme

我有2个应用程序,这是意味着不同的用途,我不应该允许用户在同一设备上使用这两个应用程序。 我如何检查是否安装了其他应用程序? 我想我可以做到这一点使用打开url,如下所示,把应用程序包ID不工作,我坚持让我的应用程序EX的URL:“FB:/ /

if ([[UIApplication sharedApplication] canOpenURL:@"My App URL"]) { //App installed } else{ //App Not installed } 

你有2个应用程序。现在你想从第二个应用程序打开第一个应用程序。我会给你一步一步的指令,请遵循。

我的第一个应用程序名称是LinkAppSample,第二个应用程序名称是LinkSecondApp

第1 :在第一个应用程序LinkAppSample中添加以下内容

 <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.example.com</string> <key>CFBundleURLSchemes</key> <array> <string>chatapp</string> </array> </dict> </array> 

那么你需要添加

 <key>LSApplicationQueriesSchemes</key> <array> <string>chatapp</string> </array> 

请参阅下面的截图

在这里输入图像说明

第二步:进入第二个App.My第二个App名称是LinkSecondApp.Now点击LinkSecondApp项目。点击TARGETS然后点击info.然后点击URL Type,在URL Schemes中添加或写入或设置名称Target-> Info-> URL types->添加urltypes

首先点击目标信息

在这里输入图像说明

然后点击URL Tpes.Once你点击它提示你+符号。

在这里输入图像说明

现在点击+符号并在URL Schemes中给出应用程序的名称。您必须将Rote设置为Viewer

在这里输入图像说明

注意:您的URLscheme名称必须相同(第一个应用程序名称和第二个应用程序URLscheme名称在这里是chatapp)。

第3步:现在,您必须在第二个应用程序LinkSecondApp中添加代码以打开第一个应用程序。

LinkSecondApp.m

 -(IBAction)actionOpenFirstApp:(id)sender { NSString *customURL = @"chatapp://"; UIApplication *application = [UIApplication sharedApplication]; NSURL *URL = [NSURL URLWithString:@"chatapp://"]; if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) { [application openURL:URL options:@{} completionHandler:^(BOOL success) { NSLog(@"Open %@: %d",customURL,success); }]; } else { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Error!" message:@"No Custom URL is defined" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; [alertController addAction:ok]; [self presentViewController:alertController animated:YES completion:nil]; } } 

Swift 3.0工作答案:

一切都保持相同作为选定的答案 ( 上面的答案是由user3182143回答,因为这会导致其他用户很less问题,所以我回答这种方式,只有代码执行是不同的rest按照上述正确答案回答相同的步骤)

但是现在代码实现是不同的:

 let kCustomURLScheme = "yourappscheme://" func openCustomApp() { if (UIApplication.shared.canOpenURL(URL(string:kCustomURLScheme)!)) { print("true") } if openCustomURLScheme(customURLScheme: kCustomURLScheme) { // app was opened successfully } else { // handle unable to open the app, perhaps redirect to the App Store print("unable to open , go to itune store to download it ") } } 

此function使用APPSCHEME来检查是否有任何安装的应用程序与特定的APPSCHEME可以启动,如果是的话,将启动其他如果你有应用程序iTune链接,然后将打开应用程序链接(以上函数调用下面的方法为最终启动):

  func openCustomURLScheme(customURLScheme: String) -> Bool { let customURL = URL(string: customURLScheme)! if UIApplication.shared.canOpenURL(customURL) { if #available(iOS 10.0, *) { UIApplication.shared.open(customURL) UIApplication.shared.open(URL(string: "https://itunes.apple.com/in/app/appname/id404249815?mt=8")!, options: [:], completionHandler: nil) } else { UIApplication.shared.openURL(customURL) } return true } return false } 

此代码适用于Swift3.0和iOS 10,请随时分享您的反馈和评论。

要知道一个应用程序是否安装

 -(BOOL) isAppInstalled:(NSString *)appUrl{ return [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:appUrl]]; // @ is not needed as you are passing input of function as a parameter. } 

要知道是否安装了任何应用程序,请调用此函数

 if( [self isAppInstalled:@"MyApp2://"]) { NSLog("The second app is installed"); //Perform your actions } 

请记住在Info.plist中的First Apps LSApplicationURLScheme中包含第二个应用程序的urlscheme。

我刚刚通过这个,发现接受的答案很混乱,所以我正在做我的。

从app2打开app1

1)在app1中:声明应用程序可以处理的自定义scheme

您可以直接在app1.plist文件中通过可视化信息编辑器 (目标>信息> URLtypes)

 <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Viewer</string> <key>CFBundleURLName</key> <string>com.mycompany.myapp</string> <key>CFBundleURLSchemes</key> <array> <string>myscheme</string> </array> </dict> </array> 

2)在app2中:声明应用程序可以调用的scheme(白名单)

 <key>LSApplicationQueriesSchemes</key> <array> <string>myscheme</string> </array> 

3)在app2中:调用这个方法的地方

 - (void)callApp1 { NSString *customURL = @"myscheme://"; UIApplication *application = [UIApplication sharedApplication]; NSURL *URL = [NSURL URLWithString:customURL]; if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) { [application openURL:URL options:@{} completionHandler:^(BOOL success) { NSLog(@"Open %@: %d",customURL,success); }]; } else { BOOL success = [application openURL:URL]; NSLog(@"Open %@: %d",customURL,success); } } else { if ([application canOpenURL:URL]) { [application openURL:URL]; } } } 

当然这个scheme(这里myscheme必须在三个部分相配)。

很容易,据我所知, 这是所有需要的!

请转到Xcode中的项目>目标>信息> URLtypes部分。 在这里,我们必须添加两个URLscheme,loginSDK需要正确设置,以便正常工作。 使用加号button,然后在URL Schemes字段中input应用程序包ID值(例如com.admin.myApp)。

然后在你的代码中使用这个

 if ([[UIApplication sharedApplication] canOpenURL:@"com.admin.myApp://"]) { //App installed } else{ //App Not installed }